CKA — Install kubeadm

1 minute read

The Three Kubernetes Binaries

Every Kubernetes node needs three binaries:

Binary Purpose Runs on
kubeadm Bootstrap and manage the cluster All nodes (used during setup/upgrade)
kubelet Node agent that runs Pods All nodes (always running)
kubectl CLI to interact with the cluster Control plane (and admin machines)

System Requirements

Requirement Control Plane Worker Node
CPU 2 cores minimum 1 core minimum
Memory 2 GB minimum 1 GB minimum
Disk 20 GB free 20 GB free
Network Full connectivity to all nodes Full connectivity to all nodes
Swap Disabled Disabled

Required Ports

Component Port Protocol Node Type
kube-apiserver 6443 TCP Control plane
etcd 2379-2380 TCP Control plane
kubelet 10250 TCP All nodes
kube-scheduler 10259 TCP Control plane
kube-controller-manager 10257 TCP Control plane
NodePort Services 30000-32767 TCP Worker nodes

Install on Ubuntu / Debian

Run these commands on all nodes (control plane and workers):

# Install required packages
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg

# Add Kubernetes apt repository (v1.30)
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key \
  | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

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

# Install specific versions
sudo apt-get update
sudo apt-get install -y kubelet=1.30.0-1.1 kubeadm=1.30.0-1.1 kubectl=1.30.0-1.1

# Pin the versions (prevent accidental upgrades)
sudo apt-mark hold kubelet kubeadm kubectl

# Enable kubelet
sudo systemctl enable --now kubelet

Version Pinning

Version pinning ensures that apt upgrade does not accidentally upgrade Kubernetes components:

# Hold (pin) versions
sudo apt-mark hold kubelet kubeadm kubectl

# Check held packages
sudo apt-mark showhold

# Unhold (when ready to upgrade)
sudo apt-mark unhold kubelet kubeadm kubectl

Exam tip: Always pin versions after installation to avoid accidental upgrades that break the cluster.

Verify Installation

kubeadm version
# kubeadm version: &version.Info{Major:"1", Minor:"30", ...}

kubelet --version
# Kubernetes v1.30.0

kubectl version --client
# Client Version: v1.30.0

Pre-Flight Checks

Before running kubeadm init, you can run pre-flight checks to verify the system is ready:

sudo kubeadm init --dry-run

This validates:

  • Swap is disabled
  • Required ports are available
  • Container runtime is running
  • Required kernel modules are loaded
  • System has enough CPU and memory

Next: Initialize Control Plane →

Updated: