This article will show you how install kubernetes on Ubuntu server (24)
Update package repo
Run below command to update package repository
sudo apt-get update
Run below command to install required tools
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
Download kubernetes public signing key
Run below command to download and save kubernetes signing key
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
Run below command to allow unprivileged APT programs to read this keyring
sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
Add kubernetes to source list
Run below command to add kubernetes to source list
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
# helps tools such as command-not-found to work correctly
sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list
Follow kubernetes official doc to create a cluster
Open ports for cluster use, open below ports on Ubuntu server, ports
sudo ufw allow 6443/tcp
sudo ufw allow 2379:2380/tcp
sudo ufw allow 10250/tcp
sudo ufw allow 10259/tcp
sudo ufw allow 10257/tcp
sudo ufw allow 10256/tcp
sudo ufw allow 30000:32767/tcp
Check swap configuration
sudo swapon --show # or run `free -h`
# Disable swap
sudo swapoff -a
To permanently disable swap, edit file /etc/fstab, comment out /swap.img line
Install container runtime, use CRI-O as an example, reference
CRIO_VERSION=v1.32
curl -fsSL https://pkgs.k8s.io/addons:/cri-o:/stable:/$CRIO_VERSION/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/cri-o-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/cri-o-apt-keyring.gpg] https://pkgs.k8s.io/addons:/cri-o:/stable:/$CRIO_VERSION/deb/ /" | sudo tee /etc/apt/sources.list.d/cri-o.list
Install CRI-O
apt-get update
apt-get install -y cri-o
# Start CRI-O
systemctl start crio.service
Install kubeadm, kubelete, kubectl
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
# Enable kubelet
sudo systemctl enable --now kubelet
Use kubeadm in create cluster
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
You may have below error throw out:
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
To fix this, run below to update sysctl config, uncomment below part
sudo vi /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
sudo sysctl -p
Follow post install actions:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Install Pod network add-on, reference
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.2/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.2/manifests/custom-resources.yaml
Find cluster taints
kubectl describe nodes
CreationTimestamp: Sun, 09 Feb 2025 14:40:31 -0400
Taints: node-role.kubernetes.io/control-plane:NoSchedule
Remove taints
kubectl taint nodes --all node-role.kubernetes.io/control-plane:NoSchedule-
Check your cluster is ready
kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
leveraon-ubuntu Ready control-plane 3m25s v1.32.1 192.168.0.146 <none> Ubuntu 24.04.1 LTS 6.8.0-52-generic cri-o://1.32.1
Reference
- https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-using-native-package-management
- https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/
- https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
- https://kubernetes.io/docs/tasks/administer-cluster/