Freigeben über


Anpassen der Knotenkonfiguration für AKS-Knotenpools (Azure Kubernetes Service)

Durch Anpassen der Knotenkonfiguration können Sie die Betriebssystemeinstellungen oder die Kubelet-Parameter anpassen, um die Anforderungen Ihrer Workloads zu erfüllen. Wenn Sie einen AKS-Cluster erstellen oder dem Cluster einen Knotenpool hinzufügen, können Sie eine Teilmenge der häufig verwendeten Betriebssystem- und kubelet-Einstellungen anpassen. Um Einstellungen über diese Teilmenge hinaus zu konfigurieren, können Sie einen Daemonsatz verwenden, um die erforderlichen Konfigurationen anzupassen, ohne die AKS-Unterstützung für Ihre Knoten zu verlieren.

Erstellen von benutzerdefinierten Knotenkonfigurationsdateien für AKS-Knotenpools

Betriebssystem- und Kubelet-Konfigurationsänderungen erfordern die Erstellung einer neuen Konfigurationsdatei mit den Parametern und den gewünschten Einstellungen. Wenn kein Wert für einen Parameter angegeben ist, wird der Wert auf den Standardwert festgelegt.

Hinweis

Die folgenden Beispiele zeigen allgemeine Konfigurationseinstellungen. Sie können die Einstellungen so ändern, dass sie Ihren Workloadanforderungen entsprechen. Eine vollständige Liste der unterstützten benutzerdefinierten Konfigurationsparameter finden Sie im Abschnitt " Unterstützte benutzerdefinierte Konfigurationsparameter" .

Kubelet-Konfiguration

Erstellen Sie eine Datei linuxkubeletconfig.json mit folgendem Inhalt:

{
 "cpuManagerPolicy": "static",
 "cpuCfsQuota": true,
 "cpuCfsQuotaPeriod": "200ms",
 "imageGcHighThreshold": 90,
 "imageGcLowThreshold": 70,
 "topologyManagerPolicy": "best-effort",
 "allowedUnsafeSysctls": [
  "kernel.msg*",
  "net.*"
],
 "failSwapOn": false
}

Betriebssystemkonfiguration

Erstellen Sie eine Datei linuxosconfig.json mit folgendem Inhalt:

{
 "transparentHugePageEnabled": "madvise",
 "transparentHugePageDefrag": "defer+madvise",
 "swapFileSizeMB": 1500,
 "sysctls": {
  "netCoreSomaxconn": 163849,
  "netIpv4TcpTwReuse": true,
  "netIpv4IpLocalPortRange": "32000 60000"
 }
}

Erstellen eines AKS-Clusters mithilfe von benutzerdefinierten Konfigurationsdateien

Hinweis

Beachten Sie bei der Verwendung von benutzerdefinierten Konfigurationsdateien beim Erstellen eines neuen AKS-Clusters die folgenden Informationen:

  • Wenn Sie beim Erstellen eines Clusters eine Konfiguration angeben, gilt die Konfiguration nur für die Knoten im anfänglichen Knotenpool. Alle Einstellungen, die in der JSON-Datei nicht konfiguriert sind, behalten ihre Standardwerte bei.
  • CustomLinuxOsConfig wird für den Windows-Betriebssystemtyp nicht unterstützt.

Erstellen Sie einen neuen Cluster mit benutzerdefinierten Konfigurationsdateien mithilfe des az aks create Befehls, und geben Sie Ihre Konfigurationsdateien für die --kubelet-config und --linux-os-config Parameter an. Mit dem folgenden Beispielbefehl wird ein neuer Cluster mit den benutzerdefinierten Dateien ./linuxkubeletconfig.json und ./linuxosconfig.json erstellt:

az aks create --name <cluster-name> --resource-group <resource-group-name> --kubelet-config ./linuxkubeletconfig.json --linux-os-config ./linuxosconfig.json

Hinzufügen eines Knotenpools mithilfe benutzerdefinierter Konfigurationsdateien

Hinweis

Beachten Sie bei der Verwendung von benutzerdefinierten Konfigurationsdateien beim Hinzufügen eines neuen Knotenpools zu einem vorhandenen AKS-Cluster die folgenden Informationen:

  • Wenn Sie einem vorhandenen Cluster einen Linux-Knotenpool hinzufügen, können Sie die Kubelet-Konfiguration, die Betriebssystemkonfiguration oder beide angeben. Wenn Sie einem vorhandenen Cluster einen Windows-Knotenpool hinzufügen, können Sie die Kubelet-Konfiguration angeben. Wenn Sie beim Hinzufügen eines Knotenpools eine Konfiguration angeben, gilt die Konfiguration nur für die Knoten im neuen Knotenpool. Alle Einstellungen, die in der JSON-Datei nicht konfiguriert sind, behalten ihre Standardwerte bei.
  • CustomKubeletConfig wird für Linux- und Windows-Knotenpools unterstützt.

Erstellen Sie einen neuen Linux-Knotenpool mithilfe des Befehls az aks nodepool add und geben Sie Ihre Konfigurationsdateien für die Parameter --kubelet-config und --linux-os-config an. Der folgende Beispielbefehl erstellt einen neuen Linux-Knotenpool mit der benutzerdefinierten ./linuxkubeletconfig.json Datei:

az aks nodepool add --name <node-pool-name> --cluster-name <cluster-name> --resource-group <resource-group-name> --kubelet-config ./linuxkubeletconfig.json

Bestätigen, dass Einstellungen angewendet wurden

Nachdem Sie eine benutzerdefinierte Knotenkonfiguration angewendet haben, können Sie bestätigen, dass die Einstellungen auf die Knoten angewendet wurden, indem Sie mit dem Host verbinden und überprüfen, ob Konfigurationsänderungen im Dateisystem vorgenommen wurden.

Unterstützte benutzerdefinierte Konfigurationsparameter

Benutzerdefinierte Linux Kubelet-Konfiguration

Parameter Zulässige Werte/Intervall Standard BESCHREIBUNG
cpuManagerPolicy keine, statisch none Die statische Richtlinie ermöglicht Containern in garantierten Pods mit ganzzahligen CPU-Anforderungen Zugriff auf exklusive CPUs auf dem Knoten.
cpuCfsQuota wahr, falsch true Aktivieren/Deaktivieren der CPU-CFS-Kontingentregelung für Container, die CPU-Grenzwerte angeben.
cpuCfsQuotaPeriod Intervall in Millisekunden (ms) 100ms Legt den Wert des CPU-CFS-Kontingentzeitraums fest.
imageGcHighThreshold 0–100 85 Der Prozentsatz der Datenträgerauslastung, nach der die Image-Garbage Collection immer ausgeführt wird. Minimale Datenträgerauslastung, die die Garbage Collection auslöst. Legen Sie den Wert zum Deaktivieren von Image-Garbage Collection auf 100 fest.
imageGcLowThreshold 0 bis 100, nicht größer als imageGcHighThreshold 80 Der Prozentsatz der Datenträgerauslastung, vor der die Image-Garbage Collection nie ausgeführt wird. Die minimale Datenträgerauslastung, die Garbage Collection auslösen kann.
topologyManagerPolicy none, best-effort, restricted, single-numa-node none Optimieren Sie die NUMA-Knotenausrichtung. Weitere Informationen finden Sie unter Kontroll-Topologiemanagement-Richtlinien auf einem Knoten.
allowedUnsafeSysctls kernel.shm*, , kernel.msg*kernel.sem, , fs.mqueue.*net.* Keine Zulässige Liste unsicherer sysctls oder unsicherer sysctl-Muster.
containerLogMaxSizeMB Größe in Megabyte (MB) 50 Die maximale Größe (z. B. 10 MB) einer Containerprotokolldatei, bevor sie rotiert wird.
containerLogMaxFiles ≥ 2 5 Die maximale Anzahl von Containerprotokolldateien, die für einen Container vorhanden sein können
podMaxPids -1 bis zum PID-Grenzwert des Kernels -1 (∞) Die maximale Anzahl von Prozess-IDs, die in einem Pod ausgeführt werden können.
seccompDefault Unconfined, RuntimeDefault Unconfined Legt das seccomp-Standardprofil für alle Workloads fest. RuntimeDefault verwendet das seccomp-Standardprofil von containerD und schränkt bestimmte Systemaufrufe ein, um die Sicherheit zu verbessern. Eingeschränkte Syscalls schlagen fehl. Unconfined legt keine Einschränkungen für Syscalls fest, sodass alle Systemaufrufe zugelassen und die Sicherheit reduziert wird. Weitere Informationen finden Sie im containerd default seccomp-Profil. Dieser Parameter befindet sich in der Vorschau. Registrieren Sie das Feature-Flag "KubeletDefaultSeccompProfilePreview" mithilfe des az feature register Befehls mit --namespace "Microsoft.ContainerService".

Benutzerdefinierte Windows-Kubelet-Konfiguration

Parameter Zulässige Werte/Intervall Standard BESCHREIBUNG
imageGcHighThreshold 0–100 85 Der Prozentsatz der Datenträgerauslastung, nach der die Image-Garbage Collection immer ausgeführt wird. Mindestfestplattennutzung, die die Garbage Collection auslöst. Legen Sie den Wert zum Deaktivieren von Image-Garbage Collection auf 100 fest.
imageGcLowThreshold 0 bis 100, nicht größer als imageGcHighThreshold 80 Der Prozentsatz der Datenträgerauslastung, vor der die Image-Garbage Collection nie ausgeführt wird. Die minimale Datenträgerauslastung, die Garbage Collection auslösen kann.
containerLogMaxSizeMB Größe in Megabyte (MB) 10 Die maximale Größe (z. B. 10 MB) einer Protokolldatei eines Containers, bevor sie rotiert wird.
containerLogMaxFiles ≥ 2 5 Die maximale Anzahl von Containerprotokolldateien, die für einen Container vorhanden sein können

Konfigurationseinstellungen für benutzerdefinierte Linux-Betriebssysteme

Wichtig

Um die Such- und Lesbarkeit zu vereinfachen, werden die Betriebssystemeinstellungen in diesem Artikel anhand ihres Namens angezeigt, sollten jedoch der JSON-Konfigurationsdatei oder der AKS-API mithilfe der CamelCase-Großschreibungskonvention hinzugefügt werden.

Wenn Sie beispielsweise vm.max_map_count setting ändern, sollten Sie es in der JSON-Konfigurationsdatei in vmMaxMapCount umformatieren.

Grenzwerte für Linux-Dateihandle

Bei der Bereitstellung hoher Datenverkehrsmengen kommt dieser Datenverkehr häufig aus einer großen Anzahl lokaler Dateien. Sie können die folgenden Kerneleinstellungen und integrierten Grenzwerte anpassen, damit Sie mehr verarbeiten können, und zwar zu Lasten eines Systemspeichers.

In der folgenden Tabelle sind die Grenzwerte für das Dateihandle aufgeführt, die Sie pro Knotenpool anpassen können:

Einstellung Zulässige Werte/Intervall Ubuntu 22.04 Standard Ubuntu 24.04 Standard Standardeinstellung für Azure Linux 3.0 BESCHREIBUNG
fs.file-max 8192 - 9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807 Maximale Anzahl von Dateihandles, die der Linux-Kernel zuweist. Dieser Wert wird auf den maximal möglichen Wert (2^63-1) festgelegt, um die Ausschöpfung der Dateibeschreibung zu verhindern und unbegrenzte systemweite Dateihandles für containerisierte Workloads sicherzustellen.
fs.inotify.max_user_watches 781250 - 2097152 1048576 1048576 1048576 Maximale Anzahl von Dateiüberwachungen, die vom System zugelassen werden. Jedes Überwachungselement ist für einen 32-Bit-Kernel ungefähr 90 Bytes groß und ungefähr 160 Bytes für einen 64-Bit-Kernel.
fs.aio-max-nr 65536 - 6553500 65536 65536 65536 Der Wert aio-nr zeigt die aktuelle systemweite Anzahl von asynchronen E/A-Anforderungen an. Mit aio-max-nr können Sie den maximalen Wert ändern, auf den aio-nr anwachsen kann.
fs.nr_open 8192 - 20000500 1048576 1048576 1073741816 Die maximale Anzahl von Dateihandles, die ein Prozess zuordnen kann.

Hinweis

Der fs.file-max Parameter wird auf 9223372036854775807 (der Maximalwert für eine signierte 64-Bit-Ganzzahl) für Ubuntu und Azure Linux basierend auf upstream-Standardwerten festgelegt. Diese Konfiguration:

  • Verhindert Denial-of-Service-Angriffe basierend auf systemweiten Dateideskriptorausschöpfungen.
  • Stellt sicher, dass Container-Workloads nie durch systemweite Dateigriff-Grenzen eingeschränkt werden.
  • Behält die Sicherheit durch Prozessgrenzwerte (fs.nr_open und ulimit) bei, die weiterhin auf einzelne Prozesse angewendet werden.
  • Optimiert für Containerplattformen , auf denen viele Container möglicherweise gleichzeitig ausgeführt werden, wobei potenziell viele Dateien und Netzwerkverbindungen geöffnet werden.

Linux-Socket und Netzwerkoptimierung

Für Agentknoten, die eine große Anzahl gleichzeitiger Sitzungen verarbeiten sollen, können Sie die folgenden TCP- und Netzwerkoptionen verwenden und sie pro Knotenpool anpassen:

Einstellung Zulässige Werte/Intervall Ubuntu 22.04 Standard Ubuntu 24.04 Standard Standardeinstellung für Azure Linux 3.0 BESCHREIBUNG
net.core.somaxconn 4096 - 3240000 16384 16384 16384 Maximale Anzahl von Verbindungsanforderungen, die für einen beliebigen Lauschsocket in die Warteschlange eingereiht werden können. Eine Obergrenze für den Wert des backlog-Parameters, der an die Funktion listen(2) übergeben wird. Wenn das backlog-Argument größer als somaxconn ist, erfolgt automatisch eine Kürzung auf diesen Grenzwert.
net.core.netdev_max_backlog 1000 - 3240000 1000 1000 1000 Maximale Anzahl von Paketen, die auf der INPUT-Seite in die Warteschlange eingereiht werden, wenn die Schnittstelle Pakete schneller empfängt, als der Kernel diese verarbeiten kann.
net.core.rmem_max 212992 - 134217728 1048576 1048576 212992 Maximale Größe des Empfangssocketpuffers in Bytes.
net.core.wmem_max 212992 - 134217728 212992 212992 212992 Maximale Größe des Sendesocketpuffers in Bytes.
net.core.optmem_max 20480 - 4194304 20.480 131072 20.480 Maximale Größe des zusätzlichen Puffers (Option Arbeitsspeicherpuffer), die pro Socket zulässig ist. Der Arbeitsspeicher der Socket-Option wird in einigen Fällen verwendet, um zusätzliche Strukturen im Zusammenhang mit der Verwendung des Sockets zu speichern.
net.ipv4.tcp_max_syn_backlog 128 - 3240000 16384 16384 16384 Die maximale Anzahl von Verbindungsanforderungen in der Warteschlange, die keine Bestätigung vom Verbindungsclient erhalten haben. Wenn diese Zahl überschritten wird, beginnt der Kernel mit dem Ablegen von Anfragen.
net.ipv4.tcp_max_tw_buckets 8000 - 1440000 262144 262144 131072 Maximale Anzahl von timewait-Sockets, die gleichzeitig vom System gehalten werden. Wenn dieser Wert überschritten wird, wird der time-wait-Socket sofort gelöscht, und es wird eine Warnung ausgegeben.
net.ipv4.tcp_fin_timeout 5 - 120 60 60 60 Die Zeitspanne, in der eine verwaiste Verbindung, die nicht mehr von einer Anwendung referenziert ist, im Zustand FIN_WAIT_2 bleibt, bevor sie am lokalen Ende abgebrochen wird.
net.ipv4.tcp_keepalive_time 30 - 432000 7.200 7.200 7.200 Gibt an, wie oft TCP keepalive-Nachrichten sendet, wenn keepalive aktiviert ist.
net.ipv4.tcp_keepalive_probes 1 - 15 9 9 9 Gibt an, wie viele keepalive-Tests von TCP gesendet werden, bis die Verbindung als getrennt angenommen wird.
net.ipv4.tcp_keepalive_intvl 10 – 90 75 75 75 Gibt an, wie oft die Tests gesendet werden. Multipliziert mit tcp_keepalive_probes ergibt sich die Zeit, nach der eine Verbindung nach dem Start von Tests beendet wird, die nicht antwortet.
net.ipv4.tcp_tw_reuse 2 2 2 Hiermit wird die Wiederverwendung von TIME-WAIT-Sockets für neue Verbindungen ermöglicht, wenn dies aus Sicht des Protokolls sicher ist.
net.ipv4.ip_local_port_range Erste: 1024 – 60999 und letzte: 32768 – 65535] Erster: 32768 und letzter: 60999 Erster: 32768 und letzter: 60999 Erster: 32768 und letzter: 60999 Der lokale Portbereich, der von TCP- und UDP-Datenverkehr verwendet wird, um den lokalen Port auszuwählen. Besteht aus zwei Zahlen: Die erste Zahl ist der erste lokale Port, der für TCP- und UDP-Datenverkehr auf dem Agent-Knoten zulässig ist. Der zweite Wert ist die letzte lokale Portnummer.
net.ipv4.neigh.default.gc_thresh1 128 - 80000 4096 4096 4096 Minimale Anzahl von Einträgen, die sich im ARP-Cache befinden können. Die Garbage Collection wird nicht ausgelöst, wenn die Anzahl der Einträge unter dieser Einstellung liegt.
net.ipv4.neigh.default.gc_thresh2 512 - 90000 8192 8192 8192 Maximale Anzahl weicher Einträge, die sich im ARP-Cache befinden können. Diese Einstellung ist wohl die wichtigste, da die ARP-Garbage Collection etwa 5 Sekunden nach Erreichen dieses weichen Maximums ausgelöst wird.
net.ipv4.neigh.default.gc_thresh3 1024 - 100000 16384 16384 16384 Harte maximale Anzahl von Einträgen im ARP-Cache.
net.netfilter.nf_conntrack_max 131072 – 2097152 524288 524288 262144 nf_conntrack ist ein Modul, das Verbindungseinträge für NAT innerhalb von Linux nachverfolgt. Das nf_conntrack-Modul verwendet eine Hashtabelle, um den eingerichteten Verbindungsdatensatz des TCP-Protokolls aufzuzeichnen. nf_conntrack_max ist die maximale Anzahl von Knoten in der Hashtabelle, d. h. die maximale Anzahl von Verbindungen, die vom nf_conntrack-Modul unterstützt werden, oder die Größe der Verbindungsnachverfolgungstabelle.
net.netfilter.nf_conntrack_buckets 65536 – 524288 262144 262144 262144 nf_conntrack ist ein Modul, das Verbindungseinträge für NAT innerhalb von Linux nachverfolgt. Das nf_conntrack-Modul verwendet eine Hashtabelle, um den eingerichteten Verbindungsdatensatz des TCP-Protokolls aufzuzeichnen. nf_conntrack_buckets die Größe der Hashtabelle.

Linux-Arbeitslimits

Wie bei Dateideskriptoren wird die Anzahl von Workern oder Threads, die ein Prozess erstellen kann, sowohl durch eine Kerneleinstellung als auch durch Benutzergrenzwerte eingeschränkt. Der Benutzergrenzwert für AKS ist unbegrenzt. In der folgenden Tabelle sind die Kerneleinstellungen aufgeführt, die Sie pro Knotenpool anpassen können:

Einstellung Ubuntu 22.04 Voreinstellung Ubuntu 24.04 Standard Standardeinstellung für Azure Linux 3.0 BESCHREIBUNG
kernel.threads-max 1030425 1030462 256596 Prozesse können Arbeitsthreads einrichten. Die maximale Anzahl von Threads, die erstellt werden können, wird mit der Kerneleinstellung kernel.threads-max festgelegt.

Virtueller Linux-Speicher

In der folgenden Tabelle sind die Kernel-Einstellungen aufgeführt, die Sie pro Knotenpool anpassen können, um den Betrieb des virtuellen Speicher-Subsystems (VM) des Linux-Kernels und die writeout von schmutzigen Daten auf der Festplatte zu optimieren:

Einstellung Zulässige Werte/Intervall Ubuntu 22.04 Standard Ubuntu 24.04 Standard Standardeinstellung für Azure Linux 3.0 BESCHREIBUNG
vm.max_map_count 65530 1048576 1048576 Diese Datei enthält die maximale Anzahl von Speicherzuordnungsbereichen, die ein Prozess haben kann. Speicherzuordnungsbereiche werden als Nebeneffekte des Aufrufs von malloc direkt durch mmap, mprotect und madvise sowie beim Laden von freigegebenen Bibliotheken verwendet.
vm.vfs_cache_pressure 1–100 100 100 100 Dieser Prozentwert steuert die Tendenz des Kernels, den Speicher freizugeben, der zum Zwischenspeichern von Verzeichnis- und I-Knoten-Objekten verwendet wird.
vm.swappiness 0-100 60 60 60 Dieses Steuerelement wird verwendet, um zu definieren, wie aggressiv der Kernel Speicherseiten austauscht. Höhere Werte erhöhen die Aggressivität, niedrigere Werte verringern die Swap-Menge. Der Wert 0 weist den Kernel an, die Auslagerung erst zu initiieren, wenn die Menge der freien und dateigestützten Seiten kleiner ist als die obere Grenze in einer Zone.
swapFileSizeMB 1 MB: Größe des temporären Datenträgers (/dev/sdb) Keine Keine Keine SwapFileSizeMB gibt die Größe in MB einer Swapdatei an, die auf den Agentknoten aus diesem Knotenpool erstellt werden soll.
transparentHugePageEnabled always, madvisenever always always madvise Transparente Hugepages ist eine Linux-Kernel-Funktion, die die Leistung verbessern soll, indem sie die Speicherzuordnungshardware Ihres Prozessors effizienter nutzt. Wenn diese Funktion aktiviert ist, versucht der Kernel, wann immer möglich hugepages zuzuweisen, und jeder Linux-Prozess erhält 2-MB-Seiten, wenn der mmap-Bereich natürlich auf 2 MB ausgerichtet ist. In bestimmten Fällen, wenn hugepages systemweit aktiviert ist, kann es vorkommen, dass Anwendungen mehr Speicherressourcen zuweisen. Eine Anwendung kann mmap eine große Region, aber nur 1 Byte davon berühren; in diesem Fall kann ohne triftigen Grund eine 2-MB-Seite anstelle einer 4k-Seite zugewiesen werden. Aufgrund dieses Szenarios ist es möglich, hugepages systemweit zu deaktivieren oder nur in MADV_HUGEPAGE madvise-Regionen zuzulassen.
transparentHugePageDefrag always, , deferdefer+madvise, , madvisenever madvise madvise madvise Dieser Wert steuert, ob der Kernel Speicherkomprimierung aggressiv verwenden soll, um weitere hugepages zur Verfügung zu stellen.