How To Setup Kubernetes Cluster with master and worker node ( kubelet, kubeadm and kubectl)


  1. Create Two Ubuntu VM (MASTER AND WORKER): and SSH Into them using the link here

  2. Install Docker Engine on both VM and enable Docker:

sudo apt-get install -y docker.io
sudo usermod –aG docker Ubuntu
sudo chmod 777 /var/run/docker.sock

sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status docker
  1. Installing kubelet, kubeadm and kubectl:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg

Download the public signing key for the Kubernetes package repositories. The same signing key is used for all repositories so you can disregard the version in the URL:

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

Add the appropriate Kubernetes apt repository.

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

Update the apt package index, install kubelet, kubeadm and kubectl, and pin their version:

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

Enable the kubelet service before running kubeadm

sudo systemctl restart kubelet
sudo systemctl status kubelet
sudo systemctl status kubelet

Adding kubeadm to a network (ON THE MASTER VM ONLY)

sudo kubeadm init --apiserver-advertise-address=(PRIVATE IP OF VM) --pod-network-cidr=192.168.0.0/16
  1. Adding kubenetes cluser:
mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
  1. Back on WORKER NODE:
    Follow the same process to – Install kubelet, kubeadm and kubectl:

  2. Join the Master and Worker with the Join Command:

  3. Using the JOIN Command looks like this on the vm

sudo kubeadm join 172.31.56.164:6443 --token y82mmu.a9wairsns2hhrgtu \
        --discovery-token-ca-cert-hash sha256:fd617bad969a4275a7a8d03c6bcb3a9a115196feb14c27ffc5371495e1dc6f84

to retrive the join command incase you didnt save it run this on Master VM

kubeadm token create --print-join-command
  1. To test on Master VM:
kubectl get nodes

its show node NOT READY.

  1. Set your port network Using Calico manifest:
    https://docs.tigera.io/calico/latest/getting-started/kubernetes/self-managed-onprem/onpremises
curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml -O

kubectl apply -f calico.yaml
  1. Run these commands on MASTER
kubectl get nodes
kubectl get pod -A
  1. Create a pod to TEST:
kubectl run my-pod --image=nginx 
kubectl get pods

Thank You for Following and Practicing.