How to Install Kubernetes Cluster (kubeadm Setup) on Ubuntu 22.04 (Step-by-Step Guide)
Table of contents
- Kubeadm Installation Guide
- Pre-requisites
- if you reset your kubadm try below command
- If You want to uninstall previous kubeadm
- After Instalation To start service automatically during the boot, you must enable it using:
- Fresh Setup, Kubeadm
- Both Master & Worker Node
- Prerequisit for master node
- Master Node
- Worker Node
- verify Cluster Connection
Kubeadm Installation Guide
This guide outlines the steps needed to set up a Kubernetes cluster using kubeadm.
Pre-requisites
Ubuntu OS (Xenial or later)
sudo privileges
Internet access
t2.medium instance
if you reset your kubadm try below command
sudo rm -rf /var/lib/etcd
sudo kubeadm reset
sudo swapoff -a
If You want to uninstall previous kubeadm
sudo kubeadm reset
sudo apt-get purge kubeadm kubectl kubelet kubernetes-cni kube*
sudo apt-get autoremove
sudo rm -rf ~/.kube
After Instalation To start service automatically during the boot, you must enable it using:
systemctl enable kubelet
Fresh Setup, Kubeadm
sudo vi /etc/hosts
setup master and worker node: Both server or node setup this
192.168.1.118 master
192.168.1.119 worker-node
Both Master & Worker Node
Before instalation permanently disable swapoff from both node.
sudo vi /etc/fstab
Run the following commands on both the master and worker nodes to prepare them for kubeadm. Or Execute common.sh from the repository.
sudo swapoff -a
sudo apt update
sudo modprobe overlay
sudo modprobe br_netfilter
echo "br_netfilter" | sudo tee -a /etc/modules
echo "net.bridge.bridge-nf-call-ip6tables = 1" | sudo tee -a /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
sudo apt update
sudo apt -y upgrade
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
apt-cache policy docker-ce
sudo apt install -y docker-ce
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker ${USER}
sudo rm /etc/containerd/config.toml
sudo systemctl restart docker
sudo systemctl restart containerd
# install kubeadm
sudo mkdir /etc/apt/keyrings/
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
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 kubelet kubeadm kubectl kubernetes-cni
Prerequisit for master node
Turn off ufw or allow this ports: 6443/tcp, 2379–2380/tcp, 10250/tcp, 10251/tcp, 10252/tcp 10255/tcp
Master Node
After initialization of master run this command if gets an error like [ERROR CRI]: container runtime is not running
sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd
- Initialize the Kubernetes master node. or execute master.sh from the repository
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
Worker 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=5
at the end. Make sure either you are working as sudo user or usesudo
before the command
verify Cluster Connection
kubectl get nodes