A MULTI-CLOUD SETUP OF K8S CLUSTER

suman15
5 min readJul 13, 2022

What is Kubernetes?

To know about kubernetes visit the below blog:

What is Multi Cloud Kubernetes Cluster?

Multicloud is a cloud architecture composed of more than one cloud vendor, possibly in combination with private cloud or on-premise resources.

Multi cloud setups differ in complexity, there are several use cases that may require Kubernetes cluster nodes to be deployed across different cloud services. Some such use cases include:

  • Reducing geographic latency and related performance constraints
  • Regulatory or compliance factors
  • Disaster recovery requirements
  • Specific capabilities such as custom hardware or access to certain vendor-managed services

Let’s head over our practical ➡️

Configuring AWS

Setting Up the EC2 Instance

The first stage will be to set up your Amazon EC2 instance.

You can use either above step or below steps mentioned:

First, log in to the AWS Portal

→ In the portal, click on “Services,” then select “EC2” under theCompute services category.

→ Now go to the panel on the left side of the EC2 console and select “Instances.”

→ On the Instances page, click on “Launch Instance.”

→ The next page will lists number of machine images that can be used for various workloads.

For our task we use the “Amazon Linux 2 AMI” image, as it simplifies provisioning since there are no manual steps required to install OS and storage.

→ You can also opt for any machine image running a Linux distribution for setting up the workload.

→ Once you pick an image of your choice, click “Select.”

→ Next, select the Instance type you would like to use.

→ To Configure Instance, Add Storage, and Add Tags settings, accept the default configurations and skip to the next step.

→ In the Security Group settings menu, click on “Create a new security group,” which initiates a security group with the default settings.

→ Once done, verify the instance configuration settings. This redirects to a key-pair creation page. The AWS console can create private and public RSA keys if a pair doesn’t exist. Create these keys, download them, and keep them safe as these will be used for secure access to the EC2 endpoint.

→ Click “Launch” to activate the instance.

Configuring Azure

Now let’s launch slave on Azure Cloud

→ Go to azure cloud and create new virtual machine and resource group

→ Fill all the required information like Resource group, virtual machine name, region, Image say RedHat Image

→ We also have to set Authentication, So here I am selecting password based authentication

→ Now choose the disk type according to requirement

→ Now lets do some networking part, here you have to select your subnet, virtual network and public IP so that other system can connect you

→ In next step we have to do Management and Advance setting (choose default settings)

→ In next page we have to add Tags to our Virtual machine

→ Now review all the options and Launch the Virtual machine

Here our all required instances launched successfully.

Configure Kubernetes master node

Steps to configure master node

kubernetes is based on docker so first we have to install docker on master node and also start and enable the docker services

command:-

yum install docker -y

systemctl start docker

systemctl enable docker

Configure cgroup drive

vim /etc/docker/daemon.json{  
"exec-opts": ["native.cgroupdriver=systemd"]
}

Since we have made changes in docker, we need to restart the docker service :

systemctl restart docker

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://packa

Installing required software :

Kubelet: An agent that runs on each node in the cluster. It makes sure that containers are running in a Pod. The kubelet takes a set of PodSpecs that are provided through various mechanisms and ensures that the containers described in those PodSpecs are running and healthy. The kubelet doesn’t manage containers that were not created by Kubernetes.

Kubeadm: It is a Kubernetes cluster management tool. It performs the necessary actions to create a Kubernetes cluster. It also useful for upgrading, joining multiple nodes, manages Kubernetes certificates, external authentications for the cluster.

Kubectl: It is Kubernetes command-line tool, allows you to run commands against Kubernetes clusters.

yum install docker kubelet kubeadm kubectl iproute-tc -y

Starting and enabling services :

systemctl enable --now docker
systemctl enable --now kubelet

We also need to pull docker images using kubeadm. It pulls images of the config files.

kubeadm config  images pull

The important step is while initializing Master,

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>:6443
kubeadm init --pod-network-cidr=10.244.0.0/16 --control-plane-endpoint=<public_ip>:6443 --ignore-preflight-errors=NumCPU --ignore-preflight-errors=Mem

  • pod-network-cidr: IP range (for pods inside the slave nodes)
  • Control plane endpoint: assign the cluster with a public IP with port
  • ignore-preflight-errors: Ignoring the unwanted CPU errors and memory errors

Now, make a 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

Apply flannel :

To connect the nodes of the master and slave we use a flannel.

Flannels act as a DHCP server as well as a router in the cluster. It will create a connection between the pods running in the cluster. The flannel works on the underlying network.

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Final step:

Generate token so that slave nodes could connect to master node :

kubeadm token create --print-join-command

Configure Kubernetes slave node

Setting up Kubernetes nodes on Azure:

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

Installing required software :

yum install docker kubelet kubeadm kubectl iproute-tc -y

Starting and enabling services :

systemctl enable --now docker
systemctl enable --now kubelet

We also need to pull docker images using kubeadm. It pulls images of the config files :

kubeadm config  images pull

Now, we need to change the docker cgroupdriver into systemd :

vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}

Since we have made changes in docker, we need to restart the docker service :

systemctl restart docker

Setting up a network bridge to 1 :

echo "1" > /proc/sys/net/bridge/bridge-nf-call-iptable

Copy-paste the token generated in the master node

Finally, in the master node :

kubectl get nodes

You will see that all the nodes are connected and are ready !

So here our task completed!!

THANKS FOR READING

If you find anything that could be improved please let me know💚💛

For more such articles, Stay Connected 😄

--

--