129 lines
3.7 KiB
Markdown
129 lines
3.7 KiB
Markdown
# 📘 How to Install Kubernetes on Ubuntu 24.04 (Step-by-Step Guide)
|
||
|
||
This guide walks you through installing a multi-node Kubernetes cluster on Ubuntu 24.04 using `kubeadm`.
|
||
|
||
---
|
||
|
||
## 🧰 Prerequisites
|
||
|
||
* Ubuntu 24.04 instances with SSH enabled
|
||
* sudo user access
|
||
* At least 2GB RAM, 2 CPUs, and 20GB storage per node
|
||
* Internet access
|
||
|
||
### Sample Setup:
|
||
|
||
* **Master Node:** k8s-master-noble (192.168.1.120)
|
||
* **Worker 1:** k8s-worker01-noble (192.168.1.121)
|
||
* **Worker 2:** k8s-worker02-noble (192.168.1.122)
|
||
|
||
---
|
||
|
||
## 1️⃣ Set Hostnames & Update Hosts File
|
||
|
||
Run on each node:
|
||
|
||
sudo hostnamectl set-hostname "k8s-master-noble" # Master
|
||
sudo hostnamectl set-hostname "k8s-worker01-noble" # Worker 1
|
||
sudo hostnamectl set-hostname "k8s-worker02-noble" # Worker 2
|
||
|
||
Edit `/etc/hosts` on all nodes:
|
||
|
||
192.168.1.120 k8s-master-noble
|
||
192.168.1.121 k8s-worker01-noble
|
||
192.168.1.122 k8s-worker02-noble
|
||
|
||
---
|
||
|
||
## 2️⃣ Disable Swap & Load Kernel Modules
|
||
|
||
sudo swapoff -a
|
||
sudo sed -i '/ swap / s/^/#/' /etc/fstab
|
||
|
||
sudo modprobe overlay
|
||
sudo modprobe br\_netfilter
|
||
|
||
echo -e "overlay\nbr\_netfilter" | sudo tee /etc/modules-load.d/k8s.conf
|
||
|
||
echo -e "net.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1\nnet.ipv4.ip\_forward = 1" | sudo tee /etc/sysctl.d/kubernetes.conf
|
||
|
||
sudo sysctl --system
|
||
|
||
---
|
||
|
||
## 3️⃣ Install and Configure containerd
|
||
|
||
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
|
||
|
||
curl -fsSL [https://download.docker.com/linux/ubuntu/gpg](https://download.docker.com/linux/ubuntu/gpg) | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/containerd.gpg
|
||
|
||
sudo add-apt-repository "deb \[arch=amd64] [https://download.docker.com/linux/ubuntu](https://download.docker.com/linux/ubuntu) \$(lsb\_release -cs) stable"
|
||
|
||
sudo apt update && sudo apt install containerd.io -y
|
||
|
||
containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
|
||
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
|
||
|
||
sudo systemctl restart containerd
|
||
|
||
---
|
||
|
||
## 4️⃣ Add Kubernetes Repository
|
||
|
||
curl -fsSL [https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key](https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key) | sudo gpg --dearmor -o /etc/apt/keyrings/k8s.gpg
|
||
|
||
echo "deb \[signed-by=/etc/apt/keyrings/k8s.gpg] [https://pkgs.k8s.io/core:/stable:/v1.30/deb/](https://pkgs.k8s.io/core:/stable:/v1.30/deb/) /" | sudo tee /etc/apt/sources.list.d/k8s.list
|
||
|
||
---
|
||
|
||
## 5️⃣ Install kubelet, kubeadm, kubectl
|
||
|
||
sudo apt update
|
||
sudo apt install kubelet kubeadm kubectl -y
|
||
|
||
---
|
||
|
||
## 6️⃣ Initialize Kubernetes Cluster (Master Node Only)
|
||
|
||
sudo kubeadm init --control-plane-endpoint=k8s-master-noble
|
||
|
||
Then set up kubectl:
|
||
|
||
mkdir -p \$HOME/.kube
|
||
sudo cp /etc/kubernetes/admin.conf \$HOME/.kube/config
|
||
sudo chown \$(id -u):\$(id -g) \$HOME/.kube/config
|
||
|
||
---
|
||
|
||
## 7️⃣ Join Worker Nodes
|
||
|
||
Use the join command from the `kubeadm init` output on each worker node:
|
||
|
||
sudo kubeadm join k8s-master-noble:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
|
||
|
||
---
|
||
|
||
## 8️⃣ Install Calico Network Add-on (Master Only)
|
||
|
||
kubectl apply -f [https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/calico.yaml](https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/calico.yaml)
|
||
|
||
Check readiness:
|
||
|
||
kubectl get pods -n kube-system
|
||
kubectl get nodes
|
||
|
||
---
|
||
|
||
## 9️⃣ Test the Cluster
|
||
|
||
kubectl create ns demo-app
|
||
kubectl create deployment nginx-app --image nginx --replicas 2 --namespace demo-app
|
||
kubectl expose deployment nginx-app -n demo-app --type NodePort --port 80
|
||
kubectl get svc -n demo-app
|
||
|
||
Then access it:
|
||
|
||
curl http\://<worker-node-ip>:<node-port>
|
||
|
||
✅ You now have a fully functional Kubernetes cluster on Ubuntu 24.04!
|