CREATE A MULTI-CLOUD SETUP of K8S cluster!
Article for creating a multicloud k8s cluster
π CREATE A MULTI-CLOUD SETUP of K8S cluster :
π
Launch node in AWS
π
Launch node in Azure
π
Launch node in GCP
π
One node on cloud should be Master Node
π
Then setup multi node Kubernetes cluster.
So to do this task, I have created three nodes :
Master node on AWS, Slave nodes on AWS, Azure and GCP.
Letβs start :
Setting up Kubernetes master on AWS :
Step-1 : For installing kubelet, kubeadm, kubectl first, we need to set up a repo for this :
vim /etc/yum.repos.d/k8s.repo# content inside repo k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
Step-2 : Installing required softwares :
yum install docker kubelet kubeadm kubectl iproute-tc -y
Step-3 : Starting and enabling services :
systemctl enable --now docker
systemctl enable --now kubelet
Step-4 : We also need to pull docker images using kubeadm. It pulls images of the config files.
kubeadm config images pull
Step-5 : Now, we need to change the docker cgroupdriver into systemd
vim /etc/docker/daemon.json
Step-6 : Since we have made changes in docker, we need to restart docker service :
systemctl restart docker
Step-7 : Setting up network bridge to 1 :
echo "1" > /proc/sys/net/bridge/bridge-nf-call-iptable
Step-8 : The important step is while initializing Master, while running preflight the main thing is we need to associate the token to the public IP of instance, so that any of the other nodes can easily connect, so for this use :
--control-plane-endpoint=<PUBLIC_IP>:6443kubeadm init --pod-network-cidr=10.244.0.0/16 --control-plane-endpoint=<public_ip>:6443 --ignore-preflight-errors=NumCPU --ignore-preflight-errors=Mem
Step-9 : Now, make directory for kube config files and give permission to them :
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Step-10 : Apply flannel :
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Step-11 : Final step : Generate token so that slave nodes could connect to master node :
kubeadm token create --print-join-command
Second : Setting up Kubernetes nodes on AWS, Azure, GCP :
(Follow same steps in all the three platforms)
β» AWS
β» Azure
β» GCP
Step-1 : For installing kubelet, kubeadm, kubectl first, we need to set up a repo for this :
vim /etc/yum.repos.d/k8s.repo
# content inside repo k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
Step-2 : Installing required softwares :
yum install docker kubelet kubeadm kubectl iproute-tc -y
Step-3 : Starting and enabling services :
systemctl enable --now docker
systemctl enable --now kubelet
Step-4 : We also need to pull docker images using kubeadm. It pulls images of the config files :
kubeadm config images pull
Step-5 : Now, we need to change the docker cgroupdriver into systemd :
vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
Step-6 : Since we have made changes in docker, we need to restart docker service :
systemctl restart docker
Step-7 : Setting up network bridge to 1 :
echo "1" > /proc/sys/net/bridge/bridge-nf-call-iptable
Step-8 : Copy paste the token generated in master nodeβ¦.
Finally, in master node :
kubectl get nodes
You will see the all the nodes are connected and are ready: