Follow this documentation to set up a highly available Kubernetes cluster using Ubuntu 20.04 LTS.
This documentation guides you in setting up a cluster with two master nodes, two worker nodes and a load balancer node using HAProxy.
Role | FQDN | IP | OS | RAM | CPU | API Version |
---|---|---|---|---|---|---|
Master | kmaster1.example.com | 10.0.1.24 | Ubuntu 20.04 | 4G | 2 | 1.19 |
Master | kmaster2.example.com | 10.0.1.100 | Ubuntu 20.04 | 4G | 2 | 1.19 |
Worker | kworker1.example.com | 10.0.1.162 | Ubuntu 20.04 | 1G | 1 | 1.19 |
Worker | kworker2.example.com | 10.0.1.5 | Ubuntu 20.04 | 1G | 1 | 1.19 |
HAproxy | lb.example.com | 10.0.1.84 | Ubuntu 20.04 | 1G | 1 |
- Perform all the commands as root user unless otherwise specified
apt update && apt install -y haproxy
Append the below lines to /etc/haproxy/haproxy.cfg
frontend kubernetes-frontend
bind 10.0.1.84:6443
mode tcp
option tcplog
default_backend kubernetes-backend
backend kubernetes-backend
mode tcp
option tcp-check
balance roundrobin
server kmaster1 10.0.1.24:6443 check fall 3 rise 2
server kmaster2 10.0.1.100:6443 check fall 3 rise 2
systemctl restart haproxy
ufw disable
swapoff -a; sed -i '/swap/d' /etc/fstab
cat >>/etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
{
apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt update && apt install -y docker-ce=5:19.03.10~3-0~ubuntu-focal containerd.io
}
{
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
}
apt update && apt install -y kubeadm=1.19.2-00 kubelet=1.19.2-00 kubectl=1.19.2-00
kubeadm init --control-plane-endpoint="10.0.1.84:6443" --upload-certs --apiserver-advertise-address=10.0.1.24 --pod-network-cidr=192.168.0.0/16
Copy the commands to join other master nodes and worker nodes.
kubectl --kubeconfig=/etc/kubernetes/admin.conf create -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml
Use the respective kubeadm join commands you copied from the output of kubeadm init command on the first master.
IMPORTANT: You also need to pass --apiserver-advertise-address to the join command when you join the other master node.
On your host machine
mkdir ~/.kube
scp [email protected]:/etc/kubernetes/admin.conf ~/.kube/config
kubectl cluster-info
kubectl get nodes
kubectl get cs
Have Fun!!