In diesem Artikel finden Sie eine kurze Schritt-für-Schritt-Anleitung zur Aktualisierung Ihres Kubernetes-Clusters. In diesem Beitrag werden nur die manuellen Schritte beschrieben, die an jedem einzelnen Worker durchgeführt werden müssen.
Vorbereitung
Ein Cluster-Upgrade in Kubernetes ist nur auf die nächste Minor-Version möglich (z.B. von 1.25.x auf 1.26.x). Wenn Sie z.B. von 1.25.x auf 1.28.x upgraden möchten, müssen Sie zuerst auf die Zwischenversionen (1.25.x > 1.26.x > 1.27.x > 1.28.x) upgraden.
Lesen Sie die Release Notes! Es ist unbedingt notwendig, die Release Notes zu lesen, da in der neuen Kubernetes Version nicht nur neue Funktionen und Verbesserungen hinzukommen, sondern auch alte Funktionen abgekündigt werden können. Dies kann sowohl zu Kompatibilitätsproblemen als auch zu Sicherheitsproblemen führen.
Sichern Sie die kritischen Komponenten des Clusters, wie z.B. die ETCD-Datenbank, Konfigurationsdateien und Persistent Volumes.
Update-Schritte
Die Aktualisierung der Cluster kann grob in vier Schritte unterteilt werden.
- Versionsprüfung
- Upgrade der Control Plane
- Upgrade der Worker Nodes
- Aktualisierung von kubectl auf der Admin-VM
1. Versionsprüfung
Zuerst stellen wir fest, welche Versionen derzeit für die Aktualisierung zur Verfügung stehen.
sudo apt update
– dieser Befehl aktualisiert die der verfügbaren Paketen
apt-cache policy kubeadm
– hiermit überprüfen Sie welche verfügbaren Versionen gibt es.
2. Upgrade der Control Plane
Sieben weitere Schritte werden auf der Contol Plane durchgeführt.
2.1. Der untere Befehl hebt den "Hold"-Status von kubeadm auf. Dadurch wird sichergestellt, dass kubeadm beim nächsten Upgrade aktualisiert wird.
sudo apt-mark unhold kubeadm
2.2. Dieser Befehl aktualisiert die Paketlisten auf dem System.
sudo apt-get update
2.3. Diese Befehlskette installiert eine bestimmte Version von kubeadm, in meinem Fall 1.28.2-00. Der Parameter -y bestätigt die Installation automatisch.
sudo apt-get install -y kubeadm=1.28.2-00
2.4. Nach der Aktualisierung wird der Hold-Status wiedergesetzt, um die automatische Aktualisierung zu verhindern.
sudo apt-mark hold kubeadm
2.5. An dieser Stelle wird überprüft, ob das Upgrade von kubeadm erfolgreich war.
kubeadm version
2.6. Grundsätzlich bereitet der Befehl kubectl drain
die Kubernetes Nodes (Control oder Worker Nodes) für Wartungsarbeiten vor. Alle Pods, die auf diesen Nodes laufen, müssen ordnungsgemäß heruntergefahren und auf andere Nodes des Clusters verschoben werden. Die Option --ignore-daemonsets
bedeutet, dass die systemrelevanten DaemonSet-Pods auf dem Node belassen werden.
sudo kubectl drain --ignore-daemonsets <control-node-name>
2.7. Dieser Befehl prüft die Versionskompatibilität und zeigt die für ein Upgrade erforderlichen Schritte an. Dieser Schritt wird normalerweise nur auf dem ersten Control Node durchgeführt, da der Plan für den gesamten Cluster gilt.
sudo kubeadm upgrade plan v1.28.2
2.8. Wenn alle Werte/Parameter korrekt sind, können Sie diese mit der unteren Befehlskette anwenden. Der Befehl kubeadm upgrade apply
wird nur auf dem ersten Control Plane Node ausgeführt. Auf allen weiteren wird der Befehl kubeadm upgrade node
verwendet.
sudo kubeadm upgrade apply v1.28.2
Die Komponenten wie kube-apiserver, kube-controller-manager und kube-scheduler werden auf die aktuelle Version aktualisiert.
2.9. Der Befehl kubectl uncordon ist ein Counterpart zu kubectl drain und wird nach der Aktualisierung ausgeführt, sobald diese abgeschlossen ist. Somit wird der Node wieder betriebsbereit.
kubectl uncordon <control-node-name>
2.10. Den Hold-Status von kubelet und kubectl entfernen.
sudo apt-mark unhold kubelet kubectl
2.11. Paketlisten auf dem System aktualisieren (optional).
sudo apt-get update
2.12. In der Befehlskette angegebenen Versionen von kubelet und kubectl installieren.
sudo apt-get install -y kubelet=1.28.2-00 kubectl=1.28.2-00
2.13. Wieder den Hold-Status setzen
sudo apt-mark hold kubelet kubectl
2.14. Die unteren Befehle dienen ausschließlich zur Überprüfung, ob die Aktualisierung stattgefunden hat.
kubectl version
kubectl get nodes
2.15. Aktualisieren Sie alle weiteren Control Planes mit den oberen Schritten (außer den Schritten 2.7 und 2.8). Der Schritt 2.8. muss auf den anderen Control Nodes durch kubeadm upgrade node
ersetzt werden.
3. Upgrade der Worker Nodes
Die Aktualisierung der Worker Nodes erfolgt analog zur Aktualisierung der Control Nodes, wobei einige Befehle nicht direkt vom Worker Node, sondern von der Admin-VM oder dem Control Node ausgeführt werden.
3.1. Der erste Schritt wird auf der Admin-VM oder dem Control Node ausgeführt.Es handelt sich wieder um den Befehl drain. Die Parameter können je nach Umgebung variieren.
kubectl drain --ignore-daemonsets --delete-emptydir-data <worker-node-name>
3.2. Die nächsten Schritte betreffen die Aktualisierung von kubeadm und werden direkt auf dem Worker Node ausgeführt (ssh anatoli@wn01). Die sind absolut identisch mit den Schritten auf den Controller Nodes und benötiogen daher keiner Erläuterung.
sudo apt-mark unhold kubeadm
sudo apt-get update
sudo apt-get install -y kubeadm=1.28.2-00
sudo apt-mark hold kubeadm
3.3. Jetzt aktualisieren wir Node Konfiguration. Dies bereitet den Knoten für das Upgrade von kubelet und kubectl vor.
sudo kubeadm upgrade node
3.4. Vier weitere Befehlsketten sorgen für die Aktualisierung von kubelet und kubectl.
sudo apt-mark unhold kubelet kubectl
sudo apt-get update
sudo apt-get install -y kubelet=1.28.2-00 kubectl=1.28.2-00
sudo apt-mark hold kubelet kubectl
3.5. Wenn alle obigen Schritte fehlerfrei durchgeführt wurden, verlassen Sie die VM (exit
).
3.6. Der folgende Befehl wird wieder auf der Admin-VM ausgeführt. Auf den Worker Nodes wird kubectl uncordon
nach dem Upgrade von kubeadm, kubelet und kubectl verwendet, nicht nach dem Upgrade von kubeadm.
kubectl uncordon
<worker-node-name>
3.7. Obere Schritte auf den anderen Worker-Knoten wiederholen.
4. Aktualisierung von kubectl auf der Admin-VM
Auf der Admin-VM wird nur die Management-Komponente (kubectl) aktualisiert.
4.1. Den Hold-Status von kubectl entfernen:
sudo apt-mark unhold kubectl
4.2. Paketlisten aktualsieren
sudo apt-get update
4.3. Upgrade durchführen
sudo apt-get install -y kubectl=1.28.2-00
4.4. kubectl wieder auf Hold setzen
sudo apt-mark hold kubectl
Upgrade überprüfen
Prüfen Sie, ob die Client- und Serverversionen identisch sind.
kubectl version
Status aller Nodes prüfen.
kubectl get nodes