Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Knotenhärtung ist ein Opt-In-Feature für Linux-Knotenpools, das die Knotenstabilität aufrechterhält, wenn Workloads CPU-, Speicher- oder Datenträgerengpässe verursachen. Wenn Sie die Knotenhärtung auf einem Cluster aktivieren, ändert AKS, wie jeder Knoten Ressourcen für Kubernetes-Komponenten und Hostdienste reserviert und erzwingt, und wie der kubelet Pods entfernt, wenn Ressourcen knapp werden.
In diesem Artikel wird erläutert, welche Änderungen die Knotenhärtung mit sich bringt, die gehärteten Standardwerte mit den AKS-Standardwerten verglichen und Ihnen gezeigt, wie Sie das Feature aktivieren, überprüfen, anpassen und deaktivieren.
Important
AKS-Preview-Funktionen stehen auf Selbstbedienungs- und Opt-in-Basis zur Verfügung. Vorschauversionen werden „im Istzustand“ und „wie verfügbar“ bereitgestellt und sind von den Service Level Agreements und der eingeschränkten Garantie ausgeschlossen. AKS-Vorschauversionen werden teilweise vom Kundensupport auf Grundlage der bestmöglichen Leistung abgedeckt. Daher sind diese Funktionen nicht für die Verwendung in der Produktion vorgesehen. Weitere Informationen finden Sie in den folgenden Supportartikeln:
Vorteile der Node-Härtung
Bei ausgelasteten oder sprunghaft ausgelasteten Knoten können Workloads Ressourcen nutzen, die das Kubelet, die Containerlaufzeit und Hostdienste benötigen. In diesem Fall können Knoten nicht mehr reagieren, einen NotReady-Status melden oder Pods abrupt beenden. Die Node-Härtung reduziert diese Risiken auf folgende Weise:
-
Erzwungene Reservierungen: Standardmäßig verwendet AKS kube-reservierte Werte nur, um zu berechnen, wie viel Kapazität der Scheduler pods zuordnen kann. Durch die Verwendung von Node Hardening erzwingt das Kubelet auch kube-reserved und vom System reservierte Kapazität über Linux-Steuerungsgruppen (cgroups). Das Kubelet und containerd werden in einer dedizierten
kubereserved.slicecgroup ausgeführt, sodass sie ihre reservierte CPU-Freigabe und den Arbeitsspeicher behalten, auch wenn Pods den Knoten auslasten. -
Dedizierte Kapazität für Hostdienste: Die Knotenhärtung fügt eine systemreservierte Zuordnung für Hostbetriebssystemdienste hinzu, die in
system.sliceausgeführt werden. - Mehr Arbeitsspeicherreserve: Die harte Eviction-Schwelle für verfügbaren Arbeitsspeicher skaliert mit dem Knotenspeicher, sodass der Kubelet Pods entfernt, bevor auf dem Knoten der Arbeitsspeicher kritisch knapp wird.
- Ordnungsgemäße Entfernung: Schwellenwerte für die vorläufige Entfernung lassen den Kubelet Pods kontrolliert mit einer Beendigungsfrist entfernen, wenn Arbeitsspeicher oder Festplattenspeicher knapp werden. Die harte Eviction, die Pods sofort beendet, dient dann als letztes Mittel.
- Reservierungen, die mit der Pod-Dichte zunehmen: Die Berechnung des für Kube reservierten Speichers steigt mit der maximalen Anzahl von Pods pro Knoten, wodurch der Overhead von Kubelet und Containerd bei der Ausführung einer größeren Anzahl von Pods berücksichtigt wird.
Was ändert sich, wenn Sie Node Hardening aktivieren
In den folgenden Tabellen werden die Standardwerte für Linux-Knoten mit Kubernetes 1.29 oder höher mit den Standardwerten verglichen, die AKS anwendet, wenn die Knotenhärtung aktiviert ist.
Ressourcenreservierungen
| Setting | Ohne Knotenhärtung | Mit Node Hardening |
|---|---|---|
| Kube-reservierte CPU | Basierend auf der Anzahl der CPU-Kerne. Weitere Informationen finden Sie unter CPU-Reservierungen. | Unverändert |
| Für Kube reservierter Arbeitsspeicher |
min(20 × maxPods + 50, 25% of node memory) MiB |
min(35 × maxPods + max(250, 2% of node memory), 25% of node memory) MiB |
| Kube-reservierte Prozess-IDs (PIDs) | 1000 |
Nicht reserviert |
| Systemreservierte CPU | None | 100m |
| Vom System reservierter Speicher | None | 200 MiB plus 100 MiB für jede volle 32 GiB des Knotenspeichers, plus 100 MiB für Cluster, die Azure CNI verwenden |
| Systemreservierter kurzlebiger Speicher | None | 1Gi |
Entfernungsschwellenwerte
| Setting | Ohne Knotenhärtung | Mit Node Hardening |
|---|---|---|
Dauerhafte Entfernung: memory.available |
100Mi |
250Mi für Knoten mit 8 GiB Arbeitsspeicher oder weniger, 375Mi für Knoten mit mehr als 8 GiB und weniger als 32 GiB und 512Mi für Knoten mit 32 GiB oder mehr |
Dauerhafte Entfernung: nodefs.available und nodefs.inodesFree |
10% und 5% |
Unverändert |
Dauerhafte Entfernung: pid.available |
2000 |
Nicht festgelegt |
Soft eviction: memory.available |
None |
500Mi, 750Mi oder 1Gi mit den gleichen Knotenspeicherstufen wie bei der dauerhaften Entfernung, mit einer Toleranzperiode von 30 Sekunden |
Soft-Eviction: nodefs.available und nodefs.inodesFree |
None |
12% und 7%, jeweils mit einer 2-minütigen Karenzzeit |
| Maximale Beendigungsfrist des Pods während der Soft-Eviction | Nicht festgelegt | 60 Sekunden |
Cgroup-Durchsetzung
| Setting | Ohne Knotenhärtung | Mit Node-Härtung |
|---|---|---|
| Erzwungener Knoten zuweisbar | pods |
pods, kube-reserved und system-reserved |
| Kubelet und containerd cgroup |
system.slice, ohne Grenzen |
kubereserved.slice, wobei der Arbeitsspeicher auf den für Kube reservierten Arbeitsspeicher begrenzt und eine CPU-Freigabe proportional zur Kube-reservierten CPU ist |
| cgroup für Host-Services |
system.slice, ohne Grenzen |
system.slice, wobei der Arbeitsspeicher auf den systemreservierten Arbeitsspeicher begrenzt und eine CPU-Freigabe proportional zur systemreservierten CPU-Leistung ist |
Da die Knotenhärtung mehr Kapazität reserviert, melden Knoten weniger allocatable-Kapazität für Pods. Auf einem Knoten mit 4 vCPUs und 16 GiB Arbeitsspeicher, der Azure CNI verwendet, reduziert die Aktivierung der Node-Härtung die zuweisbare Kapazität wie folgt:
- Mit dem standardmäßigen Höchstwert von 250 Pods pro Knoten, um ca. 570 MiB Arbeitsspeicher, 100 Millicores CPU und 1 GiB kurzlebigen Speicher.
- Bei maximal 30 Pods pro Knoten sind das etwa 1,3 GiB Arbeitsspeicher, 100 Millicores CPU und 1 GiB kurzlebiger Speicher.
Soft-Eviction-Schwellenwerte reduzieren nicht die zuweisbare Kapazität. Sie ändern sich nur, wenn das Kubelet beginnt, Pods zu verdrängen.
Überlegungen
Beachten Sie die folgenden Überlegungen, bevor Sie Node Hardening aktivieren:
- Sie aktivieren die Knotenhärtung auf Clusterebene und sie gilt für alle Linux-Knotenpools im Cluster. Sie können sie nicht für einzelne Knotenpools aktivieren, und es wirkt sich nicht auf Windows-Knotenpools aus.
- Knoten melden weniger zuweisbare Kapazität, sodass Pods, die auf einen Knoten passen, bevor Sie die Node-Härtung aktivieren, möglicherweise danach nicht mehr passen. Überprüfen Sie Ihre Pod-Ressourcenanforderungen und die Größen der Knotenpools.
- Hostdienste in
system.sliceteilen eine feste Speichergrenze, die dem für das System reservierten Speicher entspricht. Wenn Sie Ihre eigenen Agents auf Knoten als systemd-Dienste ausführen, z. B. Sicherheits-, Überwachungs- oder Protokollweiterleitungs-Agents, werden diese Agents auf diesen Grenzwert angerechnet. Überprüfen Sie deren Speicherauslastung und Stabilität, bevor Sie die Knotenhärtung in der Produktion verwenden. - Werte, die Sie in der benutzerdefinierten Kubelet-Konfiguration eines Knotenpools festlegen, setzen die entsprechenden Standardeinstellungen für die Knotenhärtung außer Kraft. Weitere Informationen finden Sie unter Anpassen von Knotenhärtungseinstellungen.
- Wenn Sie die Knotenhärtung später deaktivieren, behalten vorhandene Knotenpools die gehärteten Einstellungen für die vorläufige Entfernung bei, auch nachdem ein Reimaging für ihre Knoten durchgeführt wurde. Um diese Einstellungen zu entfernen, müssen Sie neue Knotenpools erstellen. Weitere Informationen finden Sie unter Node Hardening deaktivieren.
- Standardwerte können sich ändern, während sich das Feature in der Vorschau befindet. Beginnen Sie mit einem Nichtproduktionscluster, und überprüfen Sie Ihre Workloads unter repräsentativen Knotendruckbedingungen.
Prerequisites
- Ein Azure-Abonnement. Wenn Sie kein Konto haben, erstellen Sie ein kostenloses Konto.
- Ein AKS-Cluster mit Linux-Knotenpools oder Berechtigungen zum Erstellen eines solchen Clusters.
- Die
aks-previewAzure CLI-Erweiterung und dasCustomNodeConfigPreviewFeatureflag, wie in den folgenden Abschnitten beschrieben.
Installieren Sie die aks-preview Azure CLI-Erweiterung
Installieren Sie die
aks-previewErweiterung mithilfe desaz extension addBefehls.az extension add --name aks-previewAktualisieren Sie die Erweiterung mithilfe des Befehls
az extension updateauf die neueste Version.az extension update --name aks-preview
Registriere die CustomNodeConfigPreview-Feature-Flag
Registrieren Sie das
CustomNodeConfigPreviewFeature-Flag mithilfe desaz feature registerBefehls.az feature register --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"Es dauert einige Minuten, bis der Status Registered (Registriert) angezeigt wird.
Überprüfen Sie den Registrierungsstatus mithilfe des
az feature showBefehls.az feature show --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"Wenn der Status "Registriert" angezeigt wird, aktualisieren Sie die Registrierung des Microsoft. ContainerService-Ressourcenanbieter mithilfe des
az provider registerBefehls.az provider register --namespace "Microsoft.ContainerService"
Knotenhärtung aktivieren
Während der Vorschau ist Node Hardening standardmäßig nicht aktiviert.
Aktivieren der Knotenhärtung auf einem neuen Cluster
Erstellen Sie einen Cluster mit aktivierter Knotenhärtung mithilfe des az aks create Befehls mit dem --enable-node-hardening Parameter.
Dieser Befehl erfordert die aks-preview Erweiterung und das CustomNodeConfigPreview Feature-Flag. Weitere Informationen finden Sie unter Voraussetzungen.
az aks create \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-node-hardening \
--generate-ssh-keys
Informationen zum Überprüfen der Änderung finden Sie unter Einstellungen für Knotenhärtung überprüfen.
Aktivieren der Knotenhärtung auf einem vorhandenen Cluster
Aktivieren Sie die Knotenhärtung auf einem vorhandenen Cluster mithilfe des az aks update Befehls mit dem --enable-node-hardening Parameter.
Dieser Befehl erfordert die aks-preview Erweiterung und das CustomNodeConfigPreview Feature-Flag. Weitere Informationen finden Sie unter Voraussetzungen.
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-node-hardening
Um die Änderung zu bestätigen, siehe Überprüfen der Knotenhärtungseinstellungen.
Überprüfen der Knotenhärtungseinstellungen
Rufen Sie die Anmeldeinformationen für Ihren Cluster mithilfe des
az aks get-credentialsBefehls ab.az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>Überprüfen Sie die effektiven Kubelet-Reservierungs- und Eviction-Einstellungen auf einem Knoten, indem Sie den Kubelet-Konfigurationsendpunkt abfragen.
kubectl get --raw "/api/v1/nodes/<node-name>/proxy/configz" | jq '.kubeletconfig | {kubeReserved, systemReserved, evictionHard, evictionSoft, evictionSoftGracePeriod, evictionMaxPodGracePeriod, enforceNodeAllocatable}'Auf einem gehärteten Knoten enthalten
systemReservedundkube-reservedWerte, undsystem-reservedumfasstenforceNodeAllocatableundevictionSoft.Vergleichen Sie die Kapazität des Knotens mit seinen allocatable-Ressourcen.
kubectl get node <node-name> -o jsonpath='{.status.capacity}{"\n"}{.status.allocatable}{"\n"}'Auf einem gehärteten Knoten sind allocatable CPU, Memory und ephemeraler Speicher niedriger als die Kapazität. Der Unterschied entspricht den für Kube reservierten und systemreservierten Werten in den Ressourcenreservierungen sowie den Schwellenwerten für die dauerhafte Entfernung in den Entfernungsschwellenwerten. Beispielsweise liegt auf einem Knoten mit 4 vCPUs und 16 GiB Arbeitsspeicher, der Azure CNI nutzt, die zuweisbare CPU-Leistung um 240 Millicores unter der Kapazität: 140 Millicores sind für Kube reserviert und 100 Millicores für das System.
Anpassen von Knotenhärtungseinstellungen
Mithilfe einer benutzerdefinierten Kubelet-Konfiguration können Sie die Standardeinstellungen für kube-reserved und eviction für einen Linux-Knotenpool außer Kraft setzen. Für diese Einstellungen ist die CustomNodeConfigPreview Feature-Flag erforderlich. Sie können diese verwenden, unabhängig davon, ob die Knotenhärtung auf dem Cluster aktiviert ist. AKS verwaltet vom System reservierte Werte und die CGroup-Erzwingung, und Sie können sie nicht anpassen.
Jede Einstellung setzt eine Zeile in den Tabellen " Ressourcenreservierungen" oder "Schwellenwerte für Eviction" außer Kraft. Kube-reservierte Zeilen entsprechen den kubeReserved Einstellungen. Zeilen zur dauerhaften Entfernung entsprechen den hardEvictionThreshold-Einstellungen. Zeilen zur vorläufigen Entfernung entsprechen den softEvictionThreshold- und softEvictionGracePeriod-Einstellungen. Die maximale Toleranzperiode beim Beenden von Pods entspricht evictionMaxPodGracePeriodInSeconds.
Sie können die folgenden Einstellungen konfigurieren:
| Setting | Overrides | Description |
|---|---|---|
kubeReserved.cpuMillicores |
Kube-reservierte CPU | Für Kubernetes-System-Daemons reservierte CPU in Milliscores. |
kubeReserved.memoryMB |
Für Kube reservierter Arbeitsspeicher | Für Kubernetes-Systemdaemone reservierter Speicher in MiB. |
hardEvictionThreshold.memoryAvailable |
Dauerhafte Entfernung: memory.available |
Schwellenwert für die dauerhafte Entfernung für verfügbaren Speicher. |
hardEvictionThreshold.nodeFsAvailable |
Dauerhafte Entfernung: nodefs.available |
Schwellenwert für die dauerhafte Entfernung für den verfügbaren Knotendateisystemspeicher. |
hardEvictionThreshold.nodeFsInodesFree |
Dauerhafte Entfernung: nodefs.inodesFree |
Schwellenwert für die dauerhafte Entfernung für freie I-Knoten des Knotendateisystems. |
softEvictionThreshold.memoryAvailable |
Soft eviction: memory.available |
Soft-Eviction-Schwellenwert für den verfügbaren Speicher. |
softEvictionThreshold.nodeFsAvailable |
Vorläufige Entfernung: nodefs.available |
Soft-Eviction-Schwellenwert für den verfügbaren Speicherplatz des Node-Dateisystems. |
softEvictionThreshold.nodeFsInodesFree |
Vorläufige Entfernung: nodefs.inodesFree |
Schwellenwert für die vorläufige Entfernung für freie I-Knoten des Knotendateisystems. |
softEvictionGracePeriod.memoryAvailable |
Soft Eviction: memory.available Karenzzeit |
Wie lange der verfügbare Arbeitsspeicher unter dem Schwellenwert für die vorläufige Entfernung bleiben muss, bevor der Kubelet Pods entfernt. |
softEvictionGracePeriod.nodeFsAvailable |
Soft Eviction: nodefs.available Karenzzeit |
Wie lange der verfügbare Knotendateisystembereich unter dem Schwellenwert für die vorläufige Entfernung bleiben muss, bevor der Kubelet Pods entfernt. |
softEvictionGracePeriod.nodeFsInodesFree |
Soft Eviction: nodefs.inodesFree Karenzzeit |
Wie lange freie Knotendateisystem-Inodes unter ihrem weichen Schwellenwert bleiben müssen, bevor der Kubelet Pods entfernt. |
evictionMaxPodGracePeriodInSeconds |
Maximale Toleranzperiode beim Beenden von Pods während der vorläufigen Entfernung | Maximale Anzahl von Sekunden, die das Kubelet Pods während einer Soft-Eviction beenden lässt. |
- Zulässige Werte, Mindest- und Validierungsregeln für jede Einstellung finden Sie unter "Benutzerdefinierte Knotenkonfigurationsparameter für AKS".
- Legen Sie für jedes Eviction-Signal sowohl die weiche Eviction-Schwelle als auch die entsprechende Karenzzeit fest, und stellen Sie sicher, dass jeder softe Eviction-Schwellenwert größer als der harte Eviction-Schwellenwert für dasselbe Signal ist.
Erstellen Sie eine Kubelet-Konfigurationsdatei, z. B.
nodehardening-kubelet.json, mit den Einstellungen, die Sie anpassen möchten. Im folgenden Beispiel werden alle konfigurierbaren Werte festgelegt. Es legt kube-reserved auf 200 Millicores von CPU und 1.024 MiB Arbeitsspeicher fest. Legt die Schwellenwerte für die dauerhafte Entfernung für512Miverfügbaren Speicher,10%verfügbaren Dateisystemspeicher und5%freie I-Knoten fest. Legt Schwellenwerte für die vorläufige Entfernung für1Gi,12%und7%mit Toleranzperioden von 30 Sekunden, 2 Minuten und 2 Minuten fest. Außerdem wird eine maximale Beendigungsfrist für Pods von 60 Sekunden festgelegt.{ "kubeReserved": { "cpuMillicores": 200, "memoryMB": 1024 }, "hardEvictionThreshold": { "memoryAvailable": "512Mi", "nodeFsAvailable": "10%", "nodeFsInodesFree": "5%" }, "softEvictionThreshold": { "memoryAvailable": "1Gi", "nodeFsAvailable": "12%", "nodeFsInodesFree": "7%" }, "softEvictionGracePeriod": { "memoryAvailable": "30s", "nodeFsAvailable": "2m", "nodeFsInodesFree": "2m" }, "evictionMaxPodGracePeriodInSeconds": 60 }Erstellen Sie einen Linux-Knotenpool, der die Konfigurationsdatei mithilfe des
az aks nodepool addBefehls mit dem--kubelet-configParameter verwendet.az aks nodepool add \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --kubelet-config ./nodehardening-kubelet.jsonSie können den
--kubelet-configParameter auch mit demaz aks createBefehl verwenden, um die Konfiguration auf den anfänglichen Knotenpool des Clusters anzuwenden.
Node-Härtung deaktivieren
Deaktivieren Sie die Knotenhärtung mithilfe des az aks update Befehls mit dem --disable-node-hardening Parameter.
Dieser Befehl erfordert die aks-preview Erweiterung und das CustomNodeConfigPreview Feature-Flag. Weitere Informationen finden Sie unter Voraussetzungen.
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--disable-node-hardening
Durch das Deaktivieren der Knotenhärtung wird die Einstellung auf Clusterebene deaktiviert, vorhandene Knoten werden jedoch nicht sofort geändert. Vorhandene Knoten behalten alle gehärteten Einstellungen bei, bis sie z. B. während eines Knotenimageupgrades neu aufgesetzt werden. Nachdem ein Knoten neu aufgesetzt wurde, gelten die folgenden Änderungen:
- Auf die AKS-Standardwerte zurückgesetzt: Kube-reservierte und vom System reservierte Ressourcen, harte Eviction-Schwellenwerte und Cgroup-Erzwingung. Die zuweisbare Kapazität des Knotens erhöht sich entsprechend.
- Beibehalten: Die Soft-Eviction-Schwellenwerte, die Soft-Eviction-Karenzzeiten und die maximale Beendigungsfrist für Pods während der Soft-Eviction.
Sie können eine benutzerdefinierte Kubelet-Konfiguration nur festlegen, wenn Sie einen Cluster oder einen Knotenpool erstellen, sodass Sie die beibehaltenen Soft-Eviction-Einstellungen nicht aus einem vorhandenen Knotenpool entfernen können. Um sie zu entfernen, erstellen Sie einen neuen Knotenpool, in dem diese Einstellungen explizit deaktiviert sind, verschieben Sie Ihre Workloads in den neuen Knotenpool, und löschen Sie dann den alten Knotenpool.
Erstellen Sie eine Kubelet-Konfigurationsdatei, z. B.
remove-soft-eviction.json. Im folgenden Beispiel wird jeder Schwellenwert für die vorläufige Entfernung und jede Toleranzperiode auf eine leere Zeichenfolge festgelegt, wodurch die vorläufige Entfernung für dieses Signal deaktiviert wird. Außerdem wird die maximale Karenzfrist für Pod-Beendigung auf0festgelegt, bei der es sich um den Standard-AKS-Standardwert handelt.{ "softEvictionThreshold": { "memoryAvailable": "", "nodeFsAvailable": "", "nodeFsInodesFree": "" }, "softEvictionGracePeriod": { "memoryAvailable": "", "nodeFsAvailable": "", "nodeFsInodesFree": "" }, "evictionMaxPodGracePeriodInSeconds": 0 }Erstellen Sie einen Linux-Knotenpool, der die Konfigurationsdatei mithilfe des
az aks nodepool addBefehls mit dem--kubelet-configParameter verwendet.az aks nodepool add \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --kubelet-config ./remove-soft-eviction.jsonVerschieben Sie Ihre Workloads in den neuen Knotenpool, und löschen Sie dann den alten Knotenpool. Weitere Informationen finden Sie unter Ändern der Größe von Knotenpools in AKS.
Informationen zum Überprüfen der Einstellungen auf einem Knoten finden Sie unter Einstellungen für Knotenhärtung überprüfen. Auf Knoten im neuen Knotenpool ist evictionSoft leer.