Die Verwaltung von Kubernetes-Clustern im großen Maßstab kann eine Herausforderung sein, insbesondere wenn es darum geht, die zugrunde liegenden Hosts auf dem neuesten Stand zu halten. Der Rancher System-Upgrade-Controller vereinfacht diesen Prozess, indem er Host-Upgrades auf eine Kubernetes-native Weise automatisiert. Dieses Tool nutzt Kubernetes-Ressourcen, um Upgrades zu orchestrieren, und sorgt so für minimale Ausfallzeiten und konsistente Konfigurationen in Ihrem Cluster.
In diesem Artikel erfahren Sie, wie der System-Upgrade-Controller funktioniert, welche Funktionen er hat und wie Sie ihn einrichten können, um Ihre Kubernetes-Host-Verwaltungsaufgaben zu rationalisieren. Unabhängig davon, ob Sie einen kleinen Cluster oder eine große Umgebung verwalten, hilft Ihnen diese Anleitung, Upgrades effizient und sicher zu automatisieren.
Der System-Upgrade-Controller von Rancher ist ein Kubernetes-nativer Controller, mit dem Sie Ihre Kubernetes-Hosts mithilfe von Kubernetes-CRDs verwalten können. Egal, ob Sie Ihre Betriebssystemabhängigkeiten oder die Kubernetes-Version selbst aktualisieren, der System-Upgrade-Controller bietet eine breite Palette an Optionen, um diese Aufgaben zu vereinfachen.
Der System-Upgrade-Controller überwacht die plans.upgrade.cattle.io
CRD. Diese Pläne spezifizieren die durchzuführenden Aktionen und die Zielknoten. Sobald ein Plan auf die in Frage kommenden Knoten angewendet wird, kennzeichnet der Controller die Knoten mit einem Hash der Konfiguration des Plans. Dieser Mechanismus stellt sicher, dass jeder Plan nur einmal pro Knoten für eine bestimmte Konfiguration ausgeführt wird, um redundante Upgrades zu verhindern.
Der System-Upgrade-Controller arbeitet in einem unkomplizierten Arbeitsablauf:
Plan
mit dem Plan-CRD, indem Sie den Upgrade-Auftrag z. B. durch Angabe von Image, Version und Knotenauswahlkriterien spezifizieren.Während Sie Upgrades mit Dingen wie Kubernetes Jobs oder Ansible verwalten könnten, bietet der System-Upgrade-Controller einen Kubernetes-nativen Ansatz, der die Dinge einfach hält. Durch die Verwendung von CRDs können Sie Upgrades deklarativ über GitOps-Workflows integrieren. Außerdem erhalten neue Knoten, die dem Cluster hinzugefügt werden, automatisch die entsprechenden Upgrade-Pläne, wodurch die Konsistenz Ihrer gesamten Infrastruktur gewährleistet wird.
kubectl apply -f https://github.com/rancher/system-upgrade-controller/releases/latest/download/system-upgrade-controller.yaml
kubectl apply -f https://github.com/rancher/system-upgrade-controller/releases/latest/download/crd.yaml
Jetzt können wir mit der Planung beginnen.
Hinweis: Die Pläne müssen in demselben Namespace erstellt werden, in dem die Steuerung bereitgestellt wurde.
Hier ist ein Beispiel für einen Plan zum Upgrade eines RKE2-Clusters. Dieser Plan aktualisiert die Kubernetes-Kontrollebene und die Arbeitsknoten mithilfe von SUC.
apiVersion: upgrade.cattle.io/v1
kind: Plan
metadata:
name: server-plan
namespace: system-upgrade
labels:
rke2-upgrade: server
spec:
# specify the image and version of the container running the upgrade
upgrade:
image: rancher/rke2-upgrade
version: v1.32.2+rke2r1
# how many nodes will run the upgrade simultaneously
concurrency: 1
# enable/disable cordon on node
cordon: true
serviceAccountName: system-upgrade
# which nodes the plan is targeted for
nodeSelector:
matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: In
values:
- "true"
tolerations:
- effect: NoExecute
key: CriticalAddonsOnly
operator: Equal
value: "true"
- effect: NoSchedule
key: node-role.kubernetes.io/control-plane
operator: Exists
- effect: NoExecute
key: node-role.kubernetes.io/etcd
operator: Exists
---
apiVersion: upgrade.cattle.io/v1
kind: Plan
metadata:
name: agent-plan
namespace: system-upgrade
labels:
rke2-upgrade: agent
spec:
# specify the image and version of the container running the upgrade
upgrade:
image: rancher/rke2-upgrade
version: v1.32.2+rke2r1
# init-container which will wait for the `server-plan` to be finished before this plan can be applied
prepare:
args:
- prepare
- server-plan
image: rancher/rke2-upgrade
# how many nodes will run the upgrade simultaneously
concurrency: 1
# enable/disable cordon on node
cordon: true
# pass drain options
# drain:
# force: false
# ignoreDaemonSets: true
# # ...
serviceAccountName: system-upgrade
# which nodes the plan is targeted for
nodeSelector:
matchExpressions:
- key: beta.kubernetes.io/os
operator: In
values:
- linux
- key: node-role.kubernetes.io/worker
operator: In
values:
- "true"
- key: node-role.kubernetes.io/control-plane
operator: NotIn
values:
- "true"
Bei der Anwendung auf den Cluster registriert der Controller die neu erstellten Pläne. Er sammelt alle Knoten, die mit den Selektoren übereinstimmen, und überprüft alle Knoten auf das entsprechende Label plan.upgrade.cattle.io/server-plan
(Steuerebenen) / plan.upgrade.cattle.io/agent-plan
(Arbeiter). Wenn er sieht, dass der Plan noch nicht angewendet wurde, holt sich der Controller einen nach dem anderen und wendet den Plan durch einen Job auf dem entsprechenden Knoten an. Der Job-Pod führt die Bilder und Skripte aus, die die Arbeit verrichten werden. Danach wird der Node wieder entschlüsselt und mit dem Hash der Plankonfiguration beschriftet. Erst nach diesen Schritten wird der nächste Knoten gepatcht.
Selbst wenn der erste Arbeitsknoten den Job zur gleichen Zeit erhält, wie der erste Kontrollplan-Knoten gepatcht wird, ist der Agentenplan so konfiguriert, dass er auf die Beendigung des Server-Plans wartet, bevor der erste Knoten gecordet und gepatcht wird.
Wenn sich nun der Plan ändert, stellt der Controller eine Fehlanpassung des Hashes fest und der Prozess beginnt von Neuem.
Um ein Beispiel dafür zu geben, wie die Verwendung von benutzerdefinierten Bash-Skripten in Plänen aussehen könnte, hier ein weiteres Beispiel, das ubuntu os-packages aktualisiert.
apiVersion: v1
kind: Secret
metadata:
name: upgrade-os
namespace: system-upgrade
type: Opaque
stringData:
# adding bash script
# here could be anything
# ex. adding reboot command if reboot-required
upgrade.sh: |
#!/bin/sh
set -e
apt update
apt list --upgradable
apt upgrade -y
apt autoclean
---
apiVersion: upgrade.cattle.io/v1
kind: Plan
metadata:
name: upgrade-os
namespace: system-upgrade
spec:
# how many nodes will run the upgrade simultaneously
concurrency: 1
# enable/disable cordon on node
# if reboot on reboot-required included into script, set this to true
cordon: false
# specify the image and version of the container running the upgrade
# passing arguments to run the script
upgrade:
image: alpine:latest # change image tag
command: ["chroot", "/host"]
args: ["sh", "/run/cattle-system/secrets/upgrade-os/upgrade.sh"]
# setting version to current date
version: "$(date +'%Y-%m-%d-%H%M')"
# mount script using secret
secrets:
- name: upgrade-os
path: /host/run/cattle-system/secrets/upgrade-os
serviceAccountName: system-upgrade
# which nodes the plan is targeted for
nodeSelector:
matchExpressions:
- key: beta.kubernetes.io/os
operator: In
values:
- linux
tolerations:
- effect: NoExecute
key: CriticalAddonsOnly
operator: Equal
value: "true"
- effect: NoSchedule
key: node-role.kubernetes.io/control-plane
operator: Exists
- effect: NoExecute
key: node-role.kubernetes.io/etcd
operator: Exists
Wenden Sie diese yaml wie folgt an, um die Datumseinfügung zu verarbeiten.
cat <<EOF | kubectl apply -f -
# yaml
EOF
Neben dem Upgrade von Kubernetes-Versionen kann der System-Upgrade-Controller auch für verschiedene Host-Management-Aufgaben eingesetzt werden, darunter:
kubeadm
oder anderen benutzerdefinierten Workflows.Um die Automatisierung noch weiter voranzutreiben, können Sie den System-Upgrade-Controller in ein automatisiertes Abhängigkeitsmanagement-Tool wie Renovate integrieren. Renovate kann Ihre Abhängigkeiten überwachen, einschließlich Kubernetes-Versionen und Container-Images, und automatisch Pull Requests oder Updates erstellen, wenn neue Versionen verfügbar sind. Durch die Kombination von Renovate mit SUC können Sie eine vollständig automatisierte Pipeline einrichten, die nicht nur Updates identifiziert, sondern diese auch nahtlos auf Ihre gesamte Infrastruktur anwendet.
Durch die Kombination dieser Tools können Sie ein robustes System für die Verwaltung Ihrer Kubernetes-Infrastruktur schaffen, mit dem sich Ihr Team auf höherwertige Aufgaben konzentrieren kann.
Der Rancher System-Upgrade-Controller ist ein leistungsstarkes Tool, das die Verwaltung von Kubernetes-Hosts automatisiert und gleichzeitig Konsistenz und Effizienz gewährleistet. Durch die Nutzung von Kubernetes-nativen CRDs vereinfacht es den Upgrade-Prozess und reduziert den Bedarf an manuellen Eingriffen. Egal, ob ein kleiner Cluster oder eine große Umgebung verwaltet wird, SUC hilft dabei, eine aktuelle und stabile Infrastruktur zu erhalten.
Wir unterstützen Unternehmen bei der Konzeption, der Implementierung und dem Betrieb von Kubernetes-Clustern – einschließlich Upgrade-Strategien und GitOps-Integration.
Setzen Sie sich mit uns in Verbindung, um zu besprechen, wie wir Ihre Infrastrukturziele unterstützen können.