Anwenden von Sicherheits- und Kernelupdates auf Linux-Knoten in Azure Kubernetes Service (AKS)

Sicherheitsupdates werden automatisch auf Linux-Knoten in AKS angewendet, um Ihre Cluster zu schützen. Diese Updates enthalten Sicherheitsfixes für das Betriebssystem oder Kernelupdates. Einige dieser Updates erfordern den Neustart eines Knotens, um den Vorgang abzuschließen. AKS startet diese Linux-Knoten nicht automatisch neu, um das Update abzuschließen.

Der Prozess, mit dem Windows Server-Knoten aktuell gehalten werden, ist ein wenig anders. Windows Server-Knoten werden nicht täglich aktualisiert. Stattdessen führen Sie ein AKS-Upgrade aus, das neue Knoten mit dem neuesten Basisimage und den neuesten Patches für Windows Server bereitstellt. Weitere Informationen zu AKS-Clustern, die Windows Server-Knoten verwenden, finden Sie unter Durchführen eines Upgrades für einen Knotenpool.

In diesem Artikel erfahren Sie, wie Sie mit dem Open-Source-Daemon kured (KUbernetes REboot Daemon) nach Linux-Knoten suchen, die einen Neustart erfordern, und dann automatisch die Neuplanung der ausgeführten Pods und den Knotenneustart verarbeiten.

Hinweis

KuredDapr ist ein Open-Source-Projekt der Cloud Native Computing Foundation (CNCF). Bitte wenden Sie sich an kured GitHub. Zusätzliche Unterstützung finden Sie im #kured-Kanal auf CNCF Slack.

Voraussetzungen

Azure CLI-Version 2.0.59 oder höher muss installiert und konfiguriert sein. Führen Sie az --version aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.

Grundlegendes zum AKS-Knotenupdate

In einem AKS-Cluster werden die Kubernetes-Knoten als virtuelle Azure-Computer (VMs) ausgeführt. Diese Linux-basierten VMs verwenden ein Ubuntu- oder Azure Linux-Image, bei dem das Betriebssystem so konfiguriert ist, dass es automatisch jeden Tag nach Updates sucht. Wenn Sicherheits- oder Kernelupdates verfügbar sind, werden sie automatisch heruntergeladen und installiert.

AKS node update and reboot process with kured

Einige Sicherheitsupdates, z.B. Kernelupdates, erfordern einen Knotenneustart, damit der Vorgang abgeschlossen wird. Ein Linux-Knoten, für den ein Neustart erforderlich ist, erstellt eine Datei namens /var/run/reboot-required. Dieser Neustart erfolgt nicht automatisch.

Sie können eigene Workflows und Prozesse für Neustarts von Knoten nutzen oder kured verwenden, um den Prozess zu orchestrieren. Mit kured wird ein DaemonSet bereitgestellt, das einen Pod auf jedem Linux-Knoten im Cluster ausführt. Diese Pods im DaemonSet suchen nach dem Vorhandensein der Datei /var/run/reboot-required und initiieren dann einen Prozess, um die Knoten neu zu starten.

Upgrades für Knotenimages

Unbeaufsichtigte Upgrades wenden Updates auf das Betriebssystem des Linux-Knotens an, aber das Image, das zum Erstellen von Knoten für Ihren Cluster verwendet wird, bleibt unverändert. Wenn Ihrem Cluster ein neuer Linux-Knoten hinzugefügt wird, wird das ursprüngliche Image zum Erstellen des Knotens verwendet. Dieser neue Knoten empfängt alle Sicherheits- und Kernelupdates, die während der automatischen täglichen Überprüfung verfügbar sind, bleibt jedoch ungepatcht, bis alle Überprüfungen und Neustarts abgeschlossen sind.

Alternativ können Sie das Knotenimageupgrade verwenden, um nach Knotenimages zu suchen und diese zu aktualisieren, die von Ihrem Cluster verwendet werden. Weitere Informationen zu Upgrades für Knotenimages finden Sie unter Upgrade für AKS-Knotenimages (Azure Kubernetes Service).

Knotenupgrades

In AKS gibt es einen weiteren Prozess, mit dem Sie ein Upgrade eines Clusters durchführen können. Ein Upgrade ist in der Regel der Wechsel zu einer neueren Version von Kubernetes, nicht nur das Anwenden von Sicherheitsupdates auf Knoten. Ein AKS-Upgrade führt folgende Aktionen aus:

  • Ein neuer Knoten wird mit den neuesten Sicherheitsupdates und der aktuellen Kubernetes-Version bereitgestellt.
  • Ein alter Knoten wird gesperrt und geleert.
  • Pods werden auf dem neuen Knoten geplant.
  • Der alte Knoten wird gelöscht.

Sie können während eines Upgrades nicht die gleiche Kubernetes-Version behalten. Sie müssen eine neuere Version von Kubernetes angeben. Um ein Upgrade auf die neueste Version von Kubernetes durchzuführen, können Sie Ihren AKS-Cluster upgraden.

Bereitstellen von kured in einem AKS-Cluster

Installieren Sie zur Bereitstellung des kured DaemonSets das folgende offizielle Kured Helm-Chart. Dies erstellt eine Rolle und eine Clusterrolle, Bindungen und ein Dienstkonto. Dann wird das DaemonSet mit kured bereitgestellt.

# Add the Kured Helm repository
helm repo add kubereboot https://kubereboot.github.io/charts/

# Update your local Helm chart repository cache
helm repo update

# Create a dedicated namespace where you would like to deploy kured into
kubectl create namespace kured

# Install kured in that namespace with Helm 3 (only on Linux nodes, kured is not working on Windows nodes)
helm install my-release kubereboot/kured --namespace kured --set controller.nodeSelector."kubernetes\.io/os"=linux

Ferner können Sie zusätzliche Parameter für kured konfigurieren, z. B. die Integration in Prometheus oder Slack. Weitere Informationen zu Konfigurationsparametern finden Sie im Kured Helm-Chart.

Aktualisieren von Clusterknoten

In der Standardeinstellung suchen Linux-Knoten in AKS jeden Abend nach Updates. Wenn Sie nicht warten möchten, können Sie ein Update manuell ausführen, um zu überprüfen, ob kured ordnungsgemäß ausgeführt wird. Führen Sie zunächst die Schritte zum Herstellen einer SSH-Verbindung mit einem Ihrer AKS-Knoten aus. Wenn eine SSH-Verbindung mit dem Linux-Knoten besteht, suchen Sie nach Updates, und wenden Sie diese wie folgt an:

sudo apt-get update && sudo apt-get upgrade -y

Wenn Updates angewendet wurden, für die ein Knotenneustart erforderlich ist, wird eine Datei in /var/run/reboot-required geschrieben. Kured prüft alle 60 Minuten auf Knoten, die einen Neustart erfordern.

Überwachen und Überprüfen des Neustarts

Wenn eines der Replikate im DaemonSet festgestellt hat, dass ein Knotenneustart erforderlich ist, wird der Knoten über die Kubernetes-API gesperrt. Diese Sperre verhindert, dass weitere Pods auf dem Knoten geplant werden. Die Sperre gibt auch an, dass immer nur ein Knoten zur Zeit neu gestartet werden soll. Wenn der Knoten gesperrt ist, werden ausgeführte Pods vom Knoten entfernt, und der Knoten wird neu gestartet.

Sie können den Status der Knoten mit dem Befehl kubectl get nodes überwachen. Die folgende Beispielausgabe zeigt einen Knoten mit dem Status SchedulingDisabled, da der Knoten auf den Neustart vorbereitet wird:

NAME                       STATUS                     ROLES     AGE       VERSION
aks-nodepool1-28993262-0   Ready,SchedulingDisabled   agent     1h        v1.11.7

Nachdem das Update abgeschlossen wurde, können Sie den Status der Knoten mit dem Befehl kubectl get nodes mit dem Parameter --output wide anzeigen. Durch diese Ausgabe können Sie einen Unterschied bei KERNEL-VERSION der zugrunde liegende Knoten erkennen, wie in der folgenden Beispielausgabe gezeigt. aks-nodepool1-28993262-0 wurde in einem früheren Schritt aktualisiert und zeigt die Kernelversion 4.15.0-1039-azure an. Der Knoten aks-nodepool1-28993262-1, der noch nicht aktualisiert wurde, zeigt die Kernelversion 4.15.0-1037-azure an.

NAME                       STATUS    ROLES     AGE       VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
aks-nodepool1-28993262-0   Ready     agent     1h        v1.11.7   10.240.0.4    <none>        Ubuntu 16.04.6 LTS   4.15.0-1039-azure   docker://3.0.4
aks-nodepool1-28993262-1   Ready     agent     1h        v1.11.7   10.240.0.5    <none>        Ubuntu 16.04.6 LTS   4.15.0-1037-azure   docker://3.0.4

Nächste Schritte

In diesem Artikel wurde beschrieben, wie Sie mit kured Linux-Knoten bei einem Sicherheitsupdate automatisch neu starten können. Um ein Upgrade auf die neueste Version von Kubernetes durchzuführen, können Sie Ihren AKS-Cluster upgraden.

Weitere Informationen zu AKS-Clustern, die Windows Server-Knoten verwenden, finden Sie unter Durchführen eines Upgrades für einen Knotenpool.