How to upgrade kubernetes master node with kubeadm
Example in 1.29 -> 1.30
but will applied to all major version updates.
You should upgrade one by one, not the version quantum jump(ex 1.29 -> 1.33). That will kill your master node.
Heads up! If you make mistake in this steps, you will spend much more time to recover that.
vim /etc/apt/sources.list.d/kubernetes.list
// deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /
// Then change major version of the repository
// ex 1.29 -> 1.30
// deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /
Then
apt update
// Determine what version you should to upgrade.
apt-cache madison kubeadm
kubeadm | 1.30.13-1.1 | https://pkgs.k8s.io/core:/stable:/v1.30/deb Packages
kubeadm | 1.30.12-1.1 | https://pkgs.k8s.io/core:/stable:/v1.30/deb Packages
kubeadm | 1.30.11-1.1 | https://pkgs.k8s.io/core:/stable:/v1.30/deb Packages
kubeadm | 1.30.10-1.1 | https://pkgs.k8s.io/core:/stable:/v1.30/deb Packages
kubeadm | 1.30.9-1.1 | https://pkgs.k8s.io/core:/stable:/v1.30/deb Packages
kubeadm | 1.30.8-1.1 | https://pkgs.k8s.io/core:/stable:/v1.30/deb Packages
kubeadm | 1.30.7-1.1 | https://pkgs.k8s.io/core:/stable:/v1.30/deb Packages
kubeadm | 1.30.6-1.1 | https://pkgs.k8s.io/core:/stable:/v1.30/deb Packages
kubeadm | 1.30.5-1.1 | https://pkgs.k8s.io/core:/stable:/v1.30/deb Packages
kubeadm | 1.30.4-1.1 | https://pkgs.k8s.io/core:/stable:/v1.30/deb Packages
kubeadm | 1.30.3-1.1 | https://pkgs.k8s.io/core:/stable:/v1.30/deb Packages
kubeadm | 1.30.2-1.1 | https://pkgs.k8s.io/core:/stable:/v1.30/deb Packages
kubeadm | 1.30.1-1.1 | https://pkgs.k8s.io/core:/stable:/v1.30/deb Packages
kubeadm | 1.30.0-1.1 | https://pkgs.k8s.io/core:/stable:/v1.30/deb Packages
// I will select the 1.30.13-1.1
apt-mark unhold kubeadm && \
apt update && apt install -y kubeadm='1.30.13-*' && \
apt-mark hold kubeadm
// After success to install kubeadm
// Make plan to upgrade
kubeadm upgrade plan
You can now apply the upgrade by executing the following command:
kubeadm upgrade apply v1.30.13
_____________________________________________________________________
// Then
kubeadm upgrade apply v1.30.13
[upgrade/version] You have chosen to change the cluster version to "v1.30.13"
[upgrade/versions] Cluster version: v1.29.15
[upgrade/versions] kubeadm version: v1.30.13
[upgrade] Are you sure you want to proceed? [y/N]: y
// After some minutes, you can see this message
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.30.13". Enjoy!
// Then we will upgrade kubelet and kubectl
// First, drain the node
kubectl drain your-node-name --ignore-daemonsets
// Upgrade kubelet and kubectl
sudo apt-mark unhold kubelet kubectl && \
sudo apt-get update && sudo apt-get install -y kubelet='1.30.13-*' kubectl='1.30.13-*' && \
sudo apt-mark hold kubelet kubectl
// Then restart the services
sudo systemctl daemon-reload
sudo systemctl restart kubelet
// Then make node to available to run pods
kubectl uncordon your-node-name
Congraturation!
Problem solver
If you having problem with GPG key when trying apt update after changes kubernetes repository url, try this.
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
If you failed to upgrade with kubeadm and your node not back to normal automatically, please check this document and recover it.