Kubernetes cluster deployment involves configuring virtual machines with the right software binaries installed. All of the VMs will need Docker installed on them, which implies any operating system that supports Docker can be used.
Master and agent node distinction is strictly not necessary, though commonly done. Critical services (running as pods) such as api-server, etcd, kube-controller are scheduled to run on one node, as they can cause seriously obstruct the functioning of the pods. This node is usually referred to as master. Also, each node can have different machine configuration. This has no impact on functioning of kubernetes, as pods placement is done based on node resources.
Deployment of k8s in high availability configuration is beyond the scope of this book, but is well explained in the official documentation of kubernetes. Using auto-scaling features...