Kubernetes Multi Node Cluster Setup on AWS Cloud
In This Article, you can follow the same steps to create the Multi Node cluster in your virtual machines and connect as many nodes you need..
I will be using AWS cloud to setup Multi Node cluster of K8s. I will be using 3 ec2 instances , 1 for Master Node and 2 for slave / worker node.
So lets launch 3 instances first!
Launching Aws instances
- Search ec2
- Click on Launch instances
- Select Amazon Linux
- Select t2.micro
- Number of instances = 3
- Allow all traffic
- Remaining keep as it is and launch the instance
So Launching the instances is now complete , you can now change the name of one of the instance to kubernetes Master.
Now login to kubernetes master
Install the container Runtime -docker
#sudo yum install docker -y
#sudo systemctl enable docker --now
Install the following Packages in all the machines
kubeadm
: the command to bootstrap the cluster.kubelet
: the component that runs on all of the machines in your cluster and does things like starting pods and containers.kubectl
: the command line util to talk to your cluster.
Before installing the above packages you have to first configure yum repository
//yum configuration file
#cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF
#sudo yum repolist
#sudo yum install kubeadm kubectl kubelet -y //Starting kubelet services
#sudo systemctl enable kubelet --now //downloading necessary images required for the cluster
#kubeadm config images pull
ok Now it’s time to setup the master
//to setup the master we use the below command
#kubeadm init
but the command will fail with some warnings and errors, so lets check everything one by one.
- Specify range of IP addresses for the pod network by using the option
— pod-network-cidr - changing the docker cgroup driver to systemd
#cd /etc/docker
#vi daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
#cat daemon.json //after changing the conf file of docker we have to restart it
#systemctl restart docker
- Install one software called iproute-tc
#yum install iproute-tc -y
- The minimum Ram and CPU requirement for this setup is 2GB and 2 CPU,
but i am using only 1GB Ram and 1 CPU ,so you will get one error for this .
You can either increase your Ram and CPU else ignore this error for setting up this cluster.
so finally to setup the master run the below command
#kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU --ignore-preflight-errors=Mem
#mkdir -p $HOME/.kube
#sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
#sudo chown $(id -u):$(id -g) $HOME/.kube/config //to check the total nodes we have
#kubectl get nodes//Setting up CNI
#kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
Your Master Node is ready ,now we can connect the slave nodes to Master.
For connecting the slave to master we require the token
//copy the output of this command.
#kubeadm token create --print-join-command
Now login to your Slave Node and run the below commands
we are running almost the same command ,that we run on master
#sudo yum install docker -y
#sudo systemctl enable docker --now
#cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF
#sudo yum repolist
#sudo yum install kubeadm kubectl kubelet -y
#systemctl enable kubelet --now
#cd /etc/docker
#vi daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
#cat daemon.json //after changing the conf file of docker we have to restart it
#systemctl restart docker
#yum install iproute-tc -y //Letting iptables see bridged traffic
#cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#sudo sysctl --system //This is the final step
Paste the command that you copied from the master after running kubeadm token create --print-join-command
So Now our Multi Node cluster is ready.
//Run this in master node#kubectl get nodes
Thats it!!
Hope you guys have got some information about Multi-Node setup.
Thank You!💕