Setting up a Kubernetes cluster on ubuntu server

Setting up a Kubernetes cluster on ubuntu server

Hey there,

i tried to create a kubernetes cluster and i faced some difficulties along the way. First of all i tried to create it using two laptops in our office. But the issue i faced after everything i tried still the versions of kubeadm , kubectl and kubelet were different on both of the laptops.

So, i ditched the plan for using physical laptops and used AWS EC2 instances

The 2nd issue i faced with EC2 is i used 2GB ram which is not ideal for kubernetes.

I finally used two EC2 with 4GB ram one for master node and one for worker node.

Table of Contents

  1. Prerequisites

  2. Installation Steps

    • Update & Upgrade

    • Install Docker

    • Install Kubernetes Components

    • Disable Swap

    • Initialize Master Node

    • Configure kubectl

    • Install a Pod Network

    • Join Worker Nodes (Up to this point)

  3. Conclusion


The Prerequisites

Before we jump into the installation, make sure you’ve got the following ready:

  • Ubuntu 24.04 LTS installed and running

  • At least 2 GB of RAM (4 GB or more recommended)

  • A user with sudo privileges

  • Access to the terminal

Got it all? Great! Let’s get started.

Installation Steps

Step 1: Update & Upgrade

First things first, let’s update your system to make sure everything is current:

sudo apt update && sudo apt upgrade -y

This command updates your package list and upgrades all installed packages to their latest versions.

Step 2: Install Docker

Kubernetes relies on Docker to manage containers. Let’s install Docker:

sudo apt install -y docker.io

After installation, verify Docker is up and running:

sudo docker --version

Step 3: Install Kubernetes Components

We need to add the Kubernetes repository and install some essential components. First, add the Kubernetes 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

Add the GPG key for the repository:

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

Next, update your package lists and install the Kubernetes components:

sudo apt update
sudo apt install -y kubelet kubeadm kubectl

To prevent these packages from being automatically updated, lock their versions:

sudo apt-mark hold kubelet kubeadm kubectl

Step 4: Disable Swap

Kubernetes prefers to have swap disabled. Here’s how to turn it off:

sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

Step 5: Initialize the Master Node

With swap disabled, it’s time to initialize your Kubernetes master node. Run:

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

This command sets up the Kubernetes control plane. After it completes, you’ll see instructions for the next steps. Follow these to set up kubectl:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Step 6: Configure kubectl

Ensure kubectl is properly configured for your user by running:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

You can now check the status of your cluster nodes:

kubectl get nodes

Step 7: Install a Pod Network

For your cluster to function properly, you need to set up a pod network. We’ll use Flannel for this:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

This step ensures your pods can communicate with each other.

Step 8: Join Worker Nodes (Until Here)

To add worker nodes to your cluster, you’ll need to install Docker and Kubernetes components on each worker node, just like you did on the master node. Then, execute the join command on each worker node. This command is provided during the master node initialization process and looks something like this:

sudo kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

Replace <master-ip>, <master-port>, <token>, and <hash> with the actual values from your master node’s output.


Conclusion

Congratulations! 🎉 You’ve just set up a Kubernetes cluster on ubuntu server and are ready to add worker nodes. This is a huge step towards mastering container orchestration. Next, you can dive into deploying applications, scaling your services, and exploring more advanced features.

If you run into any issues or have questions, feel free to drop a comment. Happy clustering! 🖥️