Kubernetes Cluster Upgrade - Schritt-für-Schritt-Anleitung

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.

01 k8s upgrade apt cache policy kubeadm

 

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

03 k8s upgrade 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>

05 k8s upgrade drain

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

06 k8s upgrade kubeadm upgrade plan

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

07 k8s upgrade

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

10 k8s upgrade 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

12 k8s upgrade kubectl version

Status aller Nodes prüfen.

kubectl get nodes

11 k8s upgrade get nodes

 

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.