In diesem Dokument erfahren Sie, wie Sie Ihre GKE-Knotenkonfiguration (Google Kubernetes Engine) mithilfe einer Konfigurationsdatei anpassen, die als Knotensystemkonfiguration bezeichnet wird.
Übersicht
Sie können die Knotenkonfiguration mit verschiedenen Methoden anpassen. Sie können beispielsweise beim Erstellen eines Knotenpools Parameter wie den Maschinentyp und die Mindest-CPU-Plattform angeben.
Eine Knotensystemkonfiguration ist eine Konfigurationsdatei, mit der Sie eine begrenzte Anzahl von Systemeinstellungen anpassen können. Sie können eine Knotensystemkonfiguration verwenden, um benutzerdefinierte Einstellungen für den Kubernetes-Knoten-Agent (kubelet
) und Linux-Kernel-Konfigurationen auf niedriger Ebene (sysctl
) in Ihren Knotenpools anzugeben.
Sie können die containerd-Containerlaufzeit auf Ihren GKE-Knoten auch anpassen, indem Sie eine andere Datei verwenden, die als Laufzeitkonfigurationsdatei bezeichnet wird. Eine Anleitung finden Sie unter containerd-Konfiguration in GKE-Knoten anpassen.
Mit den folgenden Methoden können Sie weitere Anpassungen vornehmen:
- Systemkomponenten ersetzen, z. B. Cloud Logging-Logs für GKE mit Fluentd anpassen
- Verwenden Sie DaemonSets, um Knoten anzupassen, z. B. Automatisches Bootstrapping von GKE-Knoten mit DaemonSets.
Knotensystemkonfiguration verwenden
So verwenden Sie eine Knotensystemkonfiguration:
- Erstellen Sie eine Konfigurationsdatei. Diese Datei enthält die Konfigurationen
kubelet
undsysctl
. - Fügen Sie die Konfiguration hinzu, wenn Sie einen Cluster erstellen oder einen Knotenpool erstellen oder aktualisieren.
Konfigurationsdatei erstellen
Schreiben Sie die Konfigurationsdatei des Knotensystems in YAML. Das folgende Beispiel zeigt, wie Sie Konfigurationen für die Optionen kubelet
und sysctl
hinzufügen:
kubeletConfig:
cpuManagerPolicy: static
linuxConfig:
sysctl:
net.core.somaxconn: '2048'
net.ipv4.tcp_rmem: '4096 87380 6291456'
In diesem Beispiel:
cpuManagerPolicy: static
konfiguriertkubelet
so, dass die statische CPU-Verwaltungsrichtlinie verwendet wird.net.core.somaxconn: '2048'
begrenzt den Rückstandsocket listen()
auf 2.048 Byte.net.ipv4.tcp_rmem: '4096 87380 6291456'
legt den Mindest-, Standard- und Höchstwert für den TCP-Socket-Empfang-Zwischenspeicher auf 4.096 Byte, 87.380 Byte bzw. 6.291.456 Byte fest.
Wenn Sie Konfigurationen ausschließlich für kubelet
oder sysctl
hinzufügen möchten, fügen Sie nur diesen Abschnitt in die Konfigurationsdatei ein. Wenn Sie beispielsweise eine kubelet
-Konfiguration hinzufügen möchten, erstellen Sie die folgende Datei:
kubeletConfig:
cpuManagerPolicy: static
Eine vollständige Liste der Felder, die Sie Ihrer Konfigurationsdatei hinzufügen können, finden Sie in den Abschnitten zu den Kubelet-Konfigurationsoptionen und Sysctl-Konfigurationsoptionen.
Konfiguration einem Knotenpool hinzufügen
Nachdem Sie die Konfigurationsdatei erstellt haben, fügen Sie das Flag --system-config-from-file
über die Google Cloud CLI hinzu. Sie können dieses Flag hinzufügen, wenn Sie einen Cluster erstellen oder einen Knotenpool erstellen oder aktualisieren. Mit der Google Cloud Console können Sie keine Knotensystemkonfiguration hinzufügen.
Führen Sie den folgenden Befehl aus, um eine Knotensystemkonfiguration hinzuzufügen:
Cluster erstellen
gcloud container clusters create CLUSTER_NAME \
--system-config-from-file=SYSTEM_CONFIG_PATH
Dabei gilt:
CLUSTER_NAME
ist der Name des ClustersSYSTEM_CONFIG_PATH
ist der Pfad zur Datei, die Ihrekubelet
- undsysctl
-Konfigurationen enthält
Nachdem Sie eine Knotensystemkonfiguration angewendet haben, verwendet der Standardknotenpool des Clusters die von Ihnen definierten Einstellungen.
Knotenpool erstellen
gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--system-config-from-file=SYSTEM_CONFIG_PATH
Dabei gilt:
POOL_NAME
ist der Name des KnotenpoolsCLUSTER_NAME
ist der Name des Clusters, dem Sie einen Knotenpool hinzufügen möchtenSYSTEM_CONFIG_PATH
ist der Pfad zur Datei, die Ihrekubelet
- undsysctl
-Konfigurationen enthält
Knotenpool aktualisieren
gcloud container node-pools update POOL_NAME \
--cluster=CLUSTER_NAME \
--system-config-from-file=SYSTEM_CONFIG_PATH
Dabei gilt:
POOL_NAME
ist der Name des Knotenpools, den Sie aktualisieren möchtenCLUSTER_NAME
ist der Name des Clusters, den Sie aktualisieren möchtenSYSTEM_CONFIG_PATH
ist der Pfad zur Datei, die Ihrekubelet
- undsysctl
-Konfigurationen enthält
Knotensystemkonfiguration bearbeiten
Zum Bearbeiten einer Konfiguration für ein Knotensystem können Sie einen neuen Knotenpool mit der gewünschten Konfiguration erstellen oder die Knotensystemkonfiguration eines vorhandenen Knotenpools aktualisieren.
Bearbeitung durch Erstellen eines Knotenpools
So bearbeiten Sie eine Knotensystemkonfiguration durch Erstellen eines Knotenpools:
- Erstellen Sie eine Konfigurationsdatei mit der gewünschten Konfiguration.
- Fügen Sie die Konfiguration einem neuen Knotenpool hinzu.
- Migrieren Sie Ihre Arbeitslasten zum neuen Knotenpool.
- Löschen Sie den alten Knotenpool.
Bearbeitung durch Aktualisieren eines vorhandenen Knotenpools
Wenn Sie einen vorhandenen Knotenpool durch Aktualisieren eines vorhandenen Knotenpools bearbeiten möchten, aktualisieren Sie die Knotensystemkonfiguration mit den gewünschten Werten. Durch das Aktualisieren einer Knotensystemkonfiguration wird die Systemkonfiguration des Knotenpools mit der neuen Konfiguration überschrieben. Wenn Sie Parameter während einer Aktualisierung weglassen, werden sie auf die entsprechenden Standardwerte zurückgesetzt.
Wenn Sie die Knotensystemkonfiguration auf die Standardeinstellungen zurücksetzen möchten, aktualisieren Sie Ihre Konfigurationsdatei mit leeren Werten für kubelet
und sysctl
. Beispiel:
kubeletConfig: {}
linuxConfig:
sysctl: {}
Knotensystemkonfiguration löschen
So entfernen Sie eine Knotensystemkonfiguration:
- Erstellen Sie einen Knotenpool.
- Migrieren Sie Ihre Arbeitslasten zum neuen Knotenpool.
- Löschen Sie den Knotenpool mit der alten Knotensystemkonfiguration.
Kubelet-Konfigurationsoptionen
In der folgenden Tabelle sind die kubelet
-Optionen aufgeführt, die Sie ändern können.
Kubelet-Konfigurationseinstellungen | Beschränkungen | Standardeinstellung | Beschreibung |
---|---|---|---|
cpuManagerPolicy |
Der Wert muss none oder static sein
|
none
|
Diese Einstellung steuert die CPU-Manager-Richtlinie von Kubelet. Der Standardwert ist none . Dies ist das Standard-CPU-Affinitätsschema und bietet keine Affinität, die über den Autoscaling-Planer hinaus automatisch erfolgt.Wenn Sie diesen Wert auf static setzen, kann Pods in der Klasse „Guaranteed QoS” mit ganzzahligen CPU-Anfragen die exklusive Verwendung von CPUs zugewiesen werden. |
cpuCFSQuota |
Der Wert muss true oder false sein
|
true
|
Diese Einstellung erzwingt das CPU-Limit des Pods. Wenn Sie diesen Wert auf false setzen, werden die CPU-Limits für Pods ignoriert.Das Ignorieren von CPU-Limits kann in bestimmten Szenarien, in denen Pods empfindlich auf CPU-Limits reagieren, wünschenswert sein. Das Risiko, cpuCFSQuota zu deaktivieren, bedeutet, dass ein zustandsorientierter Pod mehr CPU-Ressourcen verbrauchen kann als beabsichtigt.
|
cpuCFSQuotaPeriod | Der Wert muss eine Zeitdauer sein |
"100ms"
|
Mit dieser Einstellung wird der Wert des CPU-CFS-Kontingentbereichs cpu.cfs_period_us festgelegt, der angibt, wie oft der Zugriff einer Gruppe auf CPU-Ressourcen verteilt werden soll. Mit dieser Option können Sie das CPU-Drosselungsverhalten anpassen. |
podPidsLimit | Der Wert muss zwischen 1024 und 4194304 liegen. |
none
|
Mit dieser Einstellung wird die maximale Anzahl von Prozess-IDs (PIDs) festgelegt, die jeder Pod verwenden kann. |
Sysctl-Konfigurationsoptionen
Zur Optimierung der Leistung Ihres Systems können Sie die folgenden Kernel-Attribute ändern:
net.core.busy_poll
net.core.busy_read
net.core.netdev_max_backlog
net.core.rmem_max
net.core.wmem_default
net.core.wmem_max
net.core.optmem_max
net.core.somaxconn
net.ipv4.tcp_rmem
net.ipv4.tcp_wmem
net.ipv4.tcp_tw_reuse
net.ipv6.conf.all.disable_ipv6
net.ipv6.conf.default.disable_ipv6
vm.max_map_count
Unterschiedliche Linux-Namespaces können eindeutige Werte für ein bestimmtes sysctl
haben, während andere global für den gesamten Knoten gelten. Durch das Aktualisieren der sysctl
-Optionen mithilfe einer Knotensystemkonfiguration wird sichergestellt, dass sysctl
global auf den Knoten und in jedem Namespace angewendet wird. Dadurch hat jeder Pod identische sysctl
-Werte in jedem Linux-Namespace.
Linux-cgroup-Modus-Konfigurationsoptionen
Das Kubelet und die Containerlaufzeit verwenden Linux-Kernel-cgroups für die Ressourcenverwaltung, z. B. wie viel CPU oder Arbeitsspeicher auf jeden Container in einem Pod zugreifen kann. Es gibt zwei Versionen des cgroup-Subsystems im Kernel: cgroupv1
und cgroupv2
.
Die Kubernetes-Unterstützung für cgroupv2
wurde in Kubernetes Version 1.18 als Alphaversion, in 1.22 Beta und in 1.25 allgemein verfügbar. Weitere Informationen finden Sie in der Dokumentation zu cgroups v2 von Kubernetes.
Mit der Knotensystemkonfiguration können Sie die cgroup-Konfiguration Ihrer Knotenpools anpassen. Sie können cgroupv1
oder cgroupv2
verwenden. GKE verwendet cgroupv2
für neue Knotenpools mit Version 1.26 und höher und cgroupv1
für Versionen vor 1.26.
Mit der Knotensystemkonfiguration können Sie die Einstellung für einen Knotenpool so ändern, dass cgroupv1
oder cgroupv2
explizit verwendet wird. Durch das Upgrade eines vorhandenen Knotenpools auf 1.26 wird die Einstellung nicht auf cgroupv2
geändert, da vorhandene Knotenpools, die mit einer früheren Version als 1.26 erstellt wurden - ohne benutzerdefinierte cgroup-Konfiguration - weiterhin cgroupv1
vewenden, sofern Sie nichts anderes angeben.
Wenn Sie den Knotenpool beispielsweise für die Verwendung von cgroupv2
konfigurieren möchten, verwenden Sie eine Knotensystemkonfigurationsdatei wie die folgende:
linuxConfig:
cgroupMode: 'CGROUP_MODE_V2'
Die unterstützten cgroupMode
-Optionen sind:
CGROUP_MODE_V1
: Verwenden Siecgroupv1
für den Knotenpool.CGROUP_MODE_V2
: Verwenden Siecgroupv2
für den Knotenpool.CGROUP_MODE_UNSPECIFIED
: Verwende die standardmäßige GKE-cgroup-Konfiguration.
Für die Verwendung von cgroupv2
gelten die folgenden Anforderungen und Einschränkungen:
- Für einen Knotenpool, auf dem eine Version vor 1.26 ausgeführt wird, müssen Sie die gcloud CLI-Version 408.0.0 oder höher verwenden. Alternativ können Sie gcloud beta mit Version 395.0.0 oder höher verwenden.
- Ihre Cluster und Ihre Knotenpools müssen die GKE-Version 1.24.2-gke.300 oder höher ausführen.
- Sie müssen das Container-Optimized OS mit containerd-Knoten-Image verwenden.
- Wenn eine Ihrer Arbeitslasten vom Lesen des cgroup-Dateisystems (
/sys/fs/cgroup/...
) abhängt, sorgen Sie dafür, dass sie mit dercgroupv2
API kompatibel sind.- Prüfen Sie, ob alle Monitoring- oder Drittanbietertools mit
cgroupv2
kompatibel sind.
- Prüfen Sie, ob alle Monitoring- oder Drittanbietertools mit
- Wenn Sie JDK (Java-Arbeitslast) verwenden, empfehlen wir Versionen, die cgroupv2 vollständig unterstützen, einschließlich JDK
8u372
, JDK 11.0.16 oder höher oder JDK 15 oder höher.
cgroup-Konfiguration prüfen
Wenn Sie eine Knotensystemkonfiguration hinzufügen, muss GKE die Knoten neu erstellen, um die Änderungen zu implementieren. Nachdem Sie die Konfiguration zu einem Knotenpool hinzugefügt haben und die Knoten neu erstellt wurden, können Sie die neue Konfiguration prüfen.
Wählen Sie einen Knoten aus und stellen Sie so eine Verbindung zu ihm her, um die cgroup-Konfiguration für Knoten in diesem Knotenpool zu prüfen:
- Erstellen Sie eine interaktive Shell mit einem beliebigen Knoten im Knotenpool. Ersetzen Sie
mynode
im Befehl durch den Namen eines beliebigen Knotens im Knotenpool. - Ermitteln Sie die cgroup-Version auf Linux-Knoten.
Konfigurationsoptionen für große Linux-Seiten
Sie können die Konfigurationsdatei des Knotensystems verwenden, um die riesigen Seiten des Linux-Kernels zu nutzen.
Kubernetes unterstützt große Seiten auf Knoten als Ressourcentyp, ähnlich wie CPU oder Arbeitsspeicher. Mit den folgenden Parametern weisen Sie Ihre Kubernetes-Knoten an, im Voraus große Seiten für die Nutzung durch Pods zuzuweisen. Informationen zum Verwalten der Nutzung großer Seiten durch Ihre Pods finden Sie unter HugePages verwalten.
Wenn Sie große Seiten für Ihre Knoten im Voraus zuweisen möchten, geben Sie die Anzahl und die Größen an. Wenn Sie beispielsweise Ihre Knoten so konfigurieren möchten, dass drei große Seiten mit einer Größe von 1 Gigabyte und 1.024 große Seiten mit einer Größe von 2 Megabyte zugewiesen werden, verwenden Sie eine Knotensystemkonfiguration wie die folgende:
linuxConfig:
hugepageConfig:
hugepage_size2m: 1024
hugepage_size1g: 3
Für die Verwendung großer Seiten gelten die folgenden Beschränkungen und Anforderungen:
- Damit der Knoten nicht vollständig von großen Seiten belegt wird, darf die zugewiesene große Seitengröße 60% des Gesamtspeichers nicht überschreiten. Mit einer e2-standard-2-Maschine mit 8 GB Arbeitsspeicher können Sie beispielsweise für große Seiten nicht mehr als 4,8 GB zuweisen.
- Große Seiten in einer Größe von 1 Gigabtye sind nur auf den Maschinentypen A3, C2D, C3, C3A, C3D, C4, CT5E, CT5L, CT5LP, CT6E, H3, M2, M3 oder Z3 verfügbar.