Upgrade Kubernetes Cluster auf neues Release

Da mit der Zeit jedes System zumindest sicherheitsrelevante Updates benötigt, und auch Kubernetes regelmässig neue Releases veröffentlicht, kommt irgandwann der Zeitpunkt an dem man auch das Kubernetes einmal updaten muss.
Hierbei ist zunächst zu beachten, dass ein upgarde immer nur von einem Major Release zum nächsten möglich ist. Der kubeadm upgrade auf einem Master/Backplane node wird das upgrade verweigern, wenn es über mehr als ein Major relese geht.
Ich zeige hier einmal das upgrade von einer Version 1.20.x auf 1.21.4.

Upgrade des/der Masternodes

Man sollte mit dem, oder wenn man mehrere davon hat, einem Masternode beginnen. Das vorher alle relevanten Daten gesichert werden, sollte selbstverständlich sein. Alle Schritte müssen per sudo oder als root ausgeführt werden.

Zunächst installiert man die neue kubeadm version


~# apt-get install -y --allow-change-held-packages kubeadm=1.21.1-00

Danach kurz checken, ob man die richtige Version hat:

~# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.1", GitCommit:"5e58841cce77d4bc13713ad2b91fa0d961e69192", GitTreeState:"clean", BuildDate:"2021-05-12T14:17:27Z", GoVersion:"go1.16.4", Compiler:"gc", Platform:"linux/amd64"}

Hat man die richtige Version, empfielt sich zunächst einen check auszuführen, ob der upgrade möglich ist:


~# kubeadm upgrade plan

Es kann vorkommen, das es noch einen Hinweis gibt, dass man dafür ein neueres Minor Release für das Upgrade benötigt. Hier war das 1.21.4. Also dann:


~# apt-get install -y --allow-change-held-packages kubeadm=1.21.4-00
~# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.4", GitCommit:"3cce4a82b44f032d0cd1a1790e6d2f5a55d20aae", GitTreeState:"clean", BuildDate:"2021-08-11T18:14:53Z", GoVersion:"go1.16.7", Compiler:"gc", Platform:"linux/amd64"}
~# kubeadm upgrade plan

Wenn dann alles als OK angezeigt wird, können wir das update ausführen. Das erforderliche Kommando wird in der Ausgabe des Plans angezeigt

~# kubeadm upgrade apply v1.21.4

Danach erfolgt der Upgrade. Dieser kann eine Weile dauern. Hier bei werden der API Sever, Kontroller Manager, etcd, kube scheduler und eine ganhze Reihe Zertifikate upgedated. Am Ende erhält man, hoffentlich, die Nachricht, dass alles Erfolgreich war und die Aufforderung nun auch die kubelets upzugraden. Wir tun das dann auch gleich für kubectl.

Hat man mehrere Masternodes, sollte man den Masternode auf dem man arbeitet jetzt evakuieren. Die kubectl Kommandos sollten im Userspace ausgeführt werden.

~$ kubectl drain <node-to-drain> --ignore-daemonsets

Hierbei ersetzten wir den <node-to-drain> mit dem Nodenamen, den wir aus

~$ kubectl get nodes

erhalten. Jetzt führen wir das update aus

~$ apt-get install -y --allow-change-held-packages kubelet=1.21.4-00 kubectl=1.21.4-00

Danach müssen wir kubelet einmal restarten

~# systemctl daemon-reload
~# systemctl restart kubelet

Hatten wir den Node evakuiert, können wir ihn jetzt wieder frei geben

~$ kubectl uncordon <node-to-uncordon>

Danach können wir, wenn wir mehrere Masternodes haben, das ganze auch für die anderen Masternodes ausführen. Hierbei wir allerdings kubeadm upgrade plan durch kubeadm upgrade node ersetzt und kubeadm upgrade apply ist nicht notwendig.

Upgrade worker nodes

Hier sollten wir auch zunächst den Workernode evakuieren. Wir verenden das bekannt Kommando auf dem Masternode


~$ kubectl drain <node-to-drain> --ignore-daemonsets

Danach auch hier das update:

~# apt-get install -y --allow-change-held-packages kubeadm=1.21.4-00
~# kubeadm upgrade node
~# apt-get install -y --allow-change-held-packages kubelet=1.21.4-00 kubectl=1.21.4-00
~# systemctl daemon-reload
~# systemctl restart kubelet

Und danach auf dem Masternode den Workernode wieder frei geben


~$ kubectl uncordon <node-to-uncordon>

Das wiederholt man für alle Workernodes. Das ganze kann auch parallel auf mehreren ausgeführt werden, wobei man darauf achten muss, die notwendige Kapazität f“r den Workload im Cluster nicht zu unterschreiten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.