This guide outlines the steps needed to set up a Kubernetes cluster using kubeadm.
- Ubuntu OS (Xenial or later)
- sudo privileges
- Internet access
- t2.medium instance type or higher
Run the following commands on both the master and worker nodes to prepare them for kubeadm.
# using 'sudo su' is not a good practice.
sudo apt update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo apt install docker.io -y
sudo systemctl enable --now docker # enable and start in single command.
# Adding GPG keys.
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# Add the repository to the sourcelist.
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubeadm=1.28.1-1.1 kubelet=1.28.1-1.1 kubectl=1.28.1-1.1 -y
Sample Command run on master node
-
Initialize the Kubernetes master node.
sudo kubeadm init
After succesfully running, your Kubernetes control plane will be initialized successfully.
-
Set up local kubeconfig (both for root user and normal user):
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
Apply Weave network:
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
-
Generate a token for worker nodes to join:
sudo kubeadm token create --print-join-command
-
Expose port 6443 in the Security group for the Worker to connect to Master Node
-
Run the following commands on the worker node.
sudo kubeadm reset pre-flight checks
-
Paste the join command you got from the master node and append
--v=5at the end. Make sure either you are working as sudo user or usesudobefore the command
On Master Node:
kubectl get nodesIf you want to label worker nodes, you can use the following command:
kubectl label node <node-name> node-role.kubernetes.io/worker=workerIf you want to test a demo pod, you can use the following command:
kubectl run hello-world-pod --image=busybox --restart=Never --command -- sh -c "echo 'Hello, World' && sleep 3600"












