Kubeadm Upgrade --- apt-get vrs apt install

Trying to upgrade a test cluster from 1.11 to 1.12.0

Having trouble with apt-get

### Master
apt-get update
apt-get upgrade -y kubeadm=1.12.0
kubectl drain master --ignore-daemonsets
kubeadm upgrade apply v1.12.0
kubectl get node
apt-get upgrade -y kubelet=1.12.0
systemctl restart kubelet
kubectl get nodes

##Worker
kubectl drain worker-1
on worker-1
	apt-get upgrade -y kubeadm=1.12.0-00
	apt-get upgrade -y kubelet=1.12.0-00
	kubeadm upgrade node config --kubelet-version v1.12.0
	systemctl restart kubelet
back on Master
kubectl uncordon worker-1

First it went into an infinite loop looking for some pods. I had to Ctrl+C out of it.
Next it could not find Version ‘1.12.0-00’

The following worked better.

##instructions. These worked on Master.
apt install kubeadm=1.12.0-00  
kubeadm upgrade apply v1.12.0  
apt install kubelet=1.12.0-00

##instructions that worked on worker...
apt install kubeadm=1.12.0-00 
apt install kubelet=1.12.0-00
kubeadm upgrade node config --kubelet-version $(kubelet --version | cut -d ' ' -f 2)

Can someone explain why the second set worked.

Reference: Upgrading kubeadm clusters - Kubernetes
- Replace with your desired versions

Determine which version to upgrade to
apt update
apt-cache madison kubeadm

Master
Drain the control plane node
kubectl drain master --ignore-daemonsets

Upgrading control plane nodes

  1. Check kubeadm version
    kubeadm version

  2. Upgrade kubeadm
    apt-mark unhold kubeadm && \
    apt-get update && apt-get install -y kubeadm=1.18.0-00 && \
    apt-mark hold kubeadm

  3. Confirm kubeadm version
    kubeadm version

  4. On the control plane node, run to upgrade
    sudo kubeadm upgrade plan
    sudo kubeadm upgrade apply v1.18.0 -y

  5. Upgrade kubelet and kubectl
    apt-mark unhold kubelet kubectl && \
    apt-get update && apt-get install -y kubelet=1.18.0-00 kubectl=1.18.0-00 && \
    apt-mark hold kubelet kubectl

  6. Check kubelet version
    kubelet --version

  7. Restart the kubelet
    sudo systemctl restart kubelet

  8. Uncordon the control plane node
    kubectl uncordon master

Worker nodes

  1. Drain the node
    kubectl drain node01 --ignore-daemonsets

  2. Ssh into worker node
    ssh node01
    sudo -i

  3. Upgrade the kubelet configuration
    sudo kubeadm upgrade node

  4. Upgrade kubelet and kubectl
    apt-mark unhold kubelet kubectl && \
    apt-get update && apt-get install -y kubelet=1.18.0-00 kubectl=1.18.0-00 && \
    apt-mark hold kubelet kubectl

  5. Check kubelet version
    kubelet --version

  6. Restart the kubelet
    sudo systemctl restart kubelet

  7. Logout && Exit back to Master
    exit
    exit

  8. Uncordon the node
    kubectl uncordon node01

Verify the status of the cluster
kubectl get nodes

2 Likes

systemctl daemon-reload might be handy for reloading systemd units.

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/ /

root@controlplane:~# kubectl drain controlplane --ignore-daemonsets
root@controlplane:~# apt update
root@controlplane:~# apt-cache madison kubeadm

root@controlplane:~# apt-get install kubeadm=1.29.0-1.1

root@controlplane:~# kubeadm upgrade plan v1.29.0
root@controlplane:~# kubeadm upgrade apply v1.29.0

root@controlplane:~# apt-get install kubelet=1.29.0-1.1
root@controlplane:~# systemctl daemon-reload
root@controlplane:~# systemctl restart kubelet
root@controlplane:~# kubectl uncordon controlplane

Identify the taint first.

root@controlplane:~# kubectl describe node controlplane | grep -i taint

Remove the taint with help of “kubectl taint” command.

root@controlplane:~# kubectl taint node controlplane node-role.kubernetes.io/control-plane:NoSchedule-

Verify it, the taint has been removed successfully.

root@controlplane:~# kubectl describe node controlplane | grep -i taint

root@controlplane:~# kubectl drain node01 --ignore-daemonsets

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/ /

root@node01:~# apt update
root@node01:~# apt-cache madison kubeadm

root@node01:~# apt-get install kubeadm=1.29.0-1.1

Upgrade the node

root@node01:~# kubeadm upgrade node

root@node01:~# apt-get install kubelet=1.29.0-1.1
root@node01:~# systemctl daemon-reload
root@node01:~# systemctl restart kubelet

root@controlplane:~# kubectl uncordon node01
root@controlplane:~# kubectl get pods -o wide | grep gold # make sure this is scheduled on a node