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.
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.
-
CustomLinuxOsConfigwird 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.
-
CustomKubeletConfigwird 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_openundulimit) 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. |
Verwandte Inhalte
- Erfahren Sie, wie Sie Ihren AKS-Cluster konfigurieren.
- Erfahren Sie, wie Sie ein Upgrade der Knotenimages in Ihrem Cluster durchführen.
- Unter Upgrade eines Azure Kubernetes Service-Clusters (AKS) erfahren Sie, wie Sie Ihren Cluster auf die neueste Version von Kubernetes aktualisieren können.
- In der Liste der Häufig gestellten Fragen zu AKS finden Sie Antworten auf einige häufig gestellte Fragen zu AKS.