Multi-Node Kubernetes Cluster Setup Using Kubeadm

This blog provides step-by-step instructions for setting up a multi-node Kubernetes cluster using Kubeadm. Importantly, avoid preflight errors.

Overview

This guide provides detailed instructions for setting up a multi-node Kubernetes cluster using Kubeadm. The guide includes instructions for installing and configuring containerd and Kubernetes, disabling swap, initializing the cluster, installing Flannel, and joining nodes to the cluster.

Prerequisites

Before starting the installation process, ensure that the following prerequisites are met:

  • You have at least two Ubuntu 18.04 or higher servers available for creating the cluster.

  • Each server has at least 2GB of RAM and 2 CPU cores.

  • The servers have network connectivity with each other.

  • You have root access to each server.

Installation Steps

The following are the step-by-step instructions for setting up a multi-node Kubernetes cluster using Kubeadm:

Note: All commands must be run in root-user mode. To go to the root, run the following command:

sudo su

Update the system's package list and install the necessary dependencies using the following commands:

sudo apt-get update
sudo apt install apt-transport-https curl -y

Install containerd

To install Containerd, use the following commands:

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install containerd.io -y

Create container configuration

Next, create the container configuration file using the following commands:

sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml

Edit /etc/containerd/config.toml

Edit the containerd configuration file to set SystemdCgroup to true. Use the following command to open the file:

sudo nano /etc/containerd/config.toml

Set SystemdCgroup to true:

SystemdCgroup = true

Restart containerd:

sudo systemctl restart containerd

Install Kubernetes

To install Kubernetes, use the following commands:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt install kubeadm kubelet kubectl kubernetes-cni

Disable swap

Disable swap using the following command:

sudo swapoff -a

If there are any swap entries in the /etc/fstab file, remove them using a text editor such as nano:

sudo nano /etc/fstab

Enable kernel modules

sudo modprobe br_netfilter

Add some settings to sysctl

sudo sysctl -w net.ipv4.ip_forward=1

Initialize the Cluster (Run only on master)

Use the following command to initialize the cluster:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

Create a .kube directory in your home directory:

mkdir -p $HOME/.kube

Copy the Kubernetes configuration file to your home directory:

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

Change ownership of the file:

sudo chown $(id -u):$(id -g) $HOME/.kube/config

Install Flannel (Run only on master)

Use the following command to install Flannel:

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.20.2/Documentation/kube-flannel.yml

Verify Installation

Verify that all the pods are up and running.Join Nodes

kubectl get pods --all-namespaces

Join Nodes

To add nodes to the cluster, run the kubeadm join command with the appropriate arguments on each node. The command will output a token that can be used to join the node to the cluster.

The End