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 eines AKS-Clusters mit einer benutzerdefinierten Knotenkonfiguration

Erstellen von Konfigurationsdateien

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

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 neuen Clusters mithilfe benutzerdefinierter Konfigurationsdateien

Beim Erstellen eines neuen Clusters können Sie die in den vorherigen Schritten erstellten angepassten Konfigurationsdateien verwenden, um die Kubelet-Konfiguration, die Betriebssystemkonfiguration oder beide anzugeben.

Hinweis

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

Erstellen Sie einen neuen Cluster mithilfe benutzerdefinierter Konfigurationsdateien, indem Sie den Befehl „az aks create“ verwenden und Ihre Konfigurationsdateien angeben. Mit dem folgenden Beispielbefehl wird ein neuer Cluster mit den benutzerdefinierten Dateien ./linuxkubeletconfig.json und ./linuxosconfig.json erstellt:

az aks create --name myAKSCluster --resource-group myResourceGroup --kubelet-config ./linuxkubeletconfig.json --linux-os-config ./linuxosconfig.json

Hinzufügen eines Knotenpools mithilfe benutzerdefinierter Konfigurationsdateien

Wenn Sie einem Cluster einen Knotenpool hinzufügen, können Sie die im vorherigen Schritt erstellte angepasste Konfigurationsdatei verwenden, um die Kubelet-Konfiguration anzugeben. CustomKubeletConfig wird für Linux- und Windows-Knotenpools unterstützt.

Hinweis

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, wird diese Konfiguration nur auf die Knoten im neuen Knotenpool angewendet. Alle Einstellungen, die nicht in der JSON-Datei konfiguriert sind, behalten den Standardwert bei.

az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --kubelet-config ./linuxkubeletconfig.json

Weitere Konfigurationen

Die folgenden Einstellungen können verwendet werden, um andere Betriebssystemeinstellungen zu ändern:

Nachricht des Tages

Übergeben Sie das --message-of-the-day-Flag mit dem Speicherort der Datei, um bei der Cluster- oder Knotenpoolerstellung die Nachricht des Tages auf Linux-Knoten zu ersetzen.

az aks create --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt
Knotenpoolerstellung
az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt

Überprüfen, ob Einstellungen angewendet wurden

Nach dem Anwenden einer benutzerdefinierten Knotenkonfiguration können Sie überprüfen, ob die Einstellungen auf die Knoten angewendet wurden, indem Sie eine Verbindung mit dem Host herstellen und sysctl prüfen, bzw. überprüfen, ob Konfigurationsänderungen im Dateisystem vorgenommen wurden.

Unterstützte Parameter für die benutzerdefinierte Knotenkonfiguration

Benutzerdefinierte kubelet-Konfiguration

Die benutzerdefinierte Kubelet-Konfiguration wird für Linux- und Windows-Knotenpools unterstützt. Unterstützte Parameter unterscheiden sich und sind unten dokumentiert.

Benutzerdefinierte Linux Kubelet-Konfiguration

Parameter Zulässige Werte/Intervall Standard BESCHREIBUNG
cpuManagerPolicy none, static none Mit der statischen Richtlinie können Container in Garantierten Pods mit CPU-Integeranforderungen auf exklusive CPUs auf dem Knoten zugreifen.
cpuCfsQuota true, false true Aktivieren/Deaktivieren der CPU-CFS-Kontingenterzwingung 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. Die minimale Datenträgerauslastung, 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 der NUMA-Knotenausrichtung. Weitere Informationen finden Sie hier.
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.

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. Die minimale Datenträgerauslastung, 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 Containerprotokolldatei, 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 Suche und Lesbarkeit zu vereinfachen, werden die Betriebssystemeinstellungen in diesem Artikel anhand ihres Namens angezeigt, sie sollten aber der JSON- Konfigurationsdatei oder der AKS-API in camelCase-Schreibweise hinzugefügt werden.

Wenn Sie z. B. die Einstellung „vm.max_map_count“ ändern, sollten Sie sie in der JSON-Konfigurationsdatei als „vmMaxMapCount“ umformatieren.

Dateihandlegrenzwerte

Bei hohem Datenverkehr kommt dieser in der Regel von einer großen Anzahl lokaler Dateien. Sie können die folgenden Kerneleinstellungen und integrierten Grenzwerte anpassen, damit Sie auf Kosten des Systemarbeitsspeichers mehr Datenverkehr verarbeiten können.

Einstellung Zulässige Werte/Intervall Standard BESCHREIBUNG
fs.file-max 8192 - 12000500 709620 Maximale Anzahl von Dateihandles, die der Linux-Kernel zuweist. Durch Erhöhen dieses Werts können Sie die maximal zulässige Anzahl geöffneter Dateien erhöhen.
fs.inotify.max_user_watches 781250 - 2097152 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 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 Die maximale Anzahl von Dateihandles, die ein Prozess zuordnen kann.

Socket- und Netzwerkoptimierung

Für Agent-Knoten, die eine sehr große Anzahl gleichzeitiger Sitzungen verarbeiten sollen, können Sie die unten angegebene Teilmenge der TCP- und Netzwerkoptionen verwenden, die Sie pro Knotenpool optimieren können.

Einstellung Zulässige Werte/Intervall Standard BESCHREIBUNG
net.core.somaxconn 4096 - 3240000 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 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 212992 Maximale Größe des Empfangssocketpuffers in Bytes.
net.core.wmem_max 212992 - 134217728 212992 Maximale Größe des Sendesocketpuffers in Bytes.
net.core.optmem_max 20480 - 4194304 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 Maximale Anzahl von Verbindungsanforderungen in der Warteschlange, die noch keine Bestätigung vom Client empfangen haben, der eine Verbindung herstellt. Wenn dieser Wert überschritten wird, beginnt der Kernel mit dem Löschen von Anforderungen.
net.ipv4.tcp_max_tw_buckets 8000 - 1440000 32768 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 Die Zeitspanne, für die eine verwaiste (von keiner Anwendung mehr referenzierte) Verbindung im FIN_WAIT_2-Zustand verbleibt, bevor sie am lokalen Ende abgebrochen wird.
net.ipv4.tcp_keepalive_time 30 - 432000 7200 Gibt an, wie oft TCP keepalive-Nachrichten sendet, wenn keepalive aktiviert ist.
net.ipv4.tcp_keepalive_probes 1 - 15 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 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 0 oder 1 0 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 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 Mindestanzahl von Einträgen, die sich im ARP-Cache befinden können. Garbage Collection wird nicht ausgelöst, wenn die Anzahl der Einträge unterhalb dieser Einstellung liegt.
net.ipv4.neigh.default.gc_thresh2 512 - 90000 8192 Weiche maximale Anzahl von Einträgen, die sich möglicherweise im ARP-Cache befinden. Diese Einstellung ist wohl die wichtigste, da ARP-Garbage Collection ungefähr 5 Sekunden nach Erreichen dieses weichen Maximalwerts ausgelöst wird.
net.ipv4.neigh.default.gc_thresh3 1024 - 100000 16384 Harte maximale Anzahl von Einträgen im ARP-Cache.
net.netfilter.nf_conntrack_max 131072 – 2097152 131072 nf_conntrack ist ein Modul, das Verbindungseinträge für NAT innerhalb von Linux nachverfolgt. Das nf_conntrack-Modul verwendet eine Hashtabelle, um den nf_conntrack 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 65536 nf_conntrack ist ein Modul, das Verbindungseinträge für NAT innerhalb von Linux nachverfolgt. Das nf_conntrack-Modul verwendet eine Hashtabelle, um den nf_conntrack des TCP-Protokolls aufzuzeichnen. nf_conntrack_buckets die Größe der Hashtabelle.

Workerlimits

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.

Einstellung Zulässige Werte/Intervall Standard BESCHREIBUNG
kernel.threads-max 20 - 513785 55601 Prozesse können Arbeitsthreads einrichten. Die maximale Anzahl von Threads, die erstellt werden können, wird mit der Kerneleinstellung kernel.threads-max festgelegt.

Virtueller Arbeitsspeicher

Die folgenden Einstellungen können verwendet werden, um den Betrieb des VM-Subsystems (virtueller Arbeitsspeicher) des Linux-Kernels und den writeout-Vorgang ungültiger Daten auf den Datenträger zu optimieren.

Einstellung Zulässige Werte/Intervall Standard BESCHREIBUNG
vm.max_map_count 65530 - 262144 65530 Diese Datei enthält die maximale Anzahl von Speicherzuordnungsbereichen, die ein Prozess aufweisen 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 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 Dieses Steuerelement wird verwendet, um zu definieren, wie aggressiv der Kernel Speicherseiten auslagern soll. Höhere Werte erhöhen die Aggressivität, niedrigere Werte verringern das Volumen der Auslagerung. 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 SwapFileSizeMB gibt die Größe einer Auslagerungsdatei in MB an, die auf den Agent-Knoten aus diesem Knotenpool erstellt wird.
transparentHugePageEnabled always, madvise, never always Transparente Hugepages ist eine Linux-Kernelfunktion, die zur Verbesserung der Leistung beitragen soll, indem die Speicherzuordnungshardware Ihres Prozessors effizienter genutzt wird. Wenn diese Option aktiviert ist, versucht der Kernel, nach Möglichkeit hugepages zuzuordnen, und jeder Linux-Prozess erhält 2-MB-Seiten, wenn die mmap-Region bei natürlicher Ausrichtung 2 MB groß ist. In bestimmten Fällen, in denen hugepages systemweit aktiviert sind, belegen Anwendungen möglicherweise mehr Speicherressourcen. Eine Anwendung kann mmap für eine großen Region verwenden, aber nur 1 Byte davon berühren. In diesem Fall wird möglicherweise eine 2-MB-Seite anstelle einer 4K-Seite zugeordnet. Aufgrund dieses Szenarios ist es möglich, hugepages systemweit zu deaktivieren oder nur in MADV_HUGEPAGE madvise-Regionen zuzulassen.
transparentHugePageDefrag always, defer, defer+madvise, madvise, never madvise Dieser Wert steuert, ob der Kernel Speicherkomprimierung aggressiv verwenden soll, um weitere hugepages zur Verfügung zu stellen.

Nächste Schritte