CKA — Upgrade Control Plane

1 minute read

Control Plane Upgrade Steps

The control plane is always upgraded first, before any worker nodes.

Step 1 — Upgrade kubeadm

sudo apt-mark unhold kubeadm

# Update repository to target version
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

sudo apt-get update
sudo apt-get install -y kubeadm=1.30.0-1.1
sudo apt-mark hold kubeadm

# Verify
kubeadm version

Step 2 — Plan the Upgrade

sudo kubeadm upgrade plan

This command:

  • Checks the current cluster version
  • Shows available upgrade versions
  • Validates all components are healthy
  • Warns about any issues

Step 3 — Apply the Upgrade

sudo kubeadm upgrade apply v1.30.0

This upgrades:

  • kube-apiserver
  • kube-controller-manager
  • kube-scheduler
  • kube-proxy
  • CoreDNS
  • etcd

Note: This does NOT upgrade kubelet or kubectl. You must do those manually.

Step 4 — Drain the Control Plane Node

kubectl drain <controlplane-node> --ignore-daemonsets --delete-emptydir-data

Step 5 — Upgrade kubelet and kubectl

sudo apt-mark unhold kubelet kubectl
sudo apt-get update
sudo apt-get install -y kubelet=1.30.0-1.1 kubectl=1.30.0-1.1
sudo apt-mark hold kubelet kubectl

# Restart kubelet
sudo systemctl daemon-reload
sudo systemctl restart kubelet

Step 6 — Uncordon the Control Plane

kubectl uncordon <controlplane-node>

Step 7 — Verify

kubectl get nodes
# controlplane   Ready   control-plane   ...   v1.30.0

What Gets Upgraded

Component Upgraded by kubeadm upgrade apply Upgraded manually
kube-apiserver Yes  
kube-controller-manager Yes  
kube-scheduler Yes  
kube-proxy Yes  
CoreDNS Yes  
etcd Yes  
kubelet   Yes
kubectl   Yes

Next: Upgrade Worker Nodes ->

Updated: