fusero-app-boilerplate/docs/GUIDE-TO-K8S.md
2025-05-20 13:00:00 +02:00

129 lines
3.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 📘 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!