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.
Sie können DaemonSets auch verwenden, 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 \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
Dabei gilt:
CLUSTER_NAME
ist der Name des ClustersLOCATION
: die Compute-Zone oder ‑Region des Clusters.SYSTEM_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 \
--location=LOCATION \
--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öchtenLOCATION
: die Compute-Zone oder ‑Region des Clusters.SYSTEM_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 \
--location=LOCATION \
--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öchtenLOCATION
: die Compute-Zone oder ‑Region des Clusters.SYSTEM_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. |
insecureKubeletReadonlyPortEnabled |
Der Wert muss ein boolescher Wert (true oder false ) sein. |
true |
Mit dieser Einstellung wird der unsichere schreibgeschützte kubelet-Port 10255 für jeden neuen Knotenpool in Ihrem Cluster deaktiviert. Wenn Sie diese Einstellung in dieser Datei konfigurieren, können Sie die Einstellung nicht mit einem GKE API-Client auf Clusterebene ändern. |
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.
Konfigurationsoptionen für den Linux-cgroup-Modus
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 Version 1.22 als Betaversion und in Version 1.25 als allgemein verfügbar eingeführt. Weitere Informationen finden Sie in der Dokumentation zu Kubernetes cgroups v2.
Mit der Knotensystemkonfiguration können Sie die cgroup-Konfiguration Ihrer Knotenpools anpassen. Sie können cgroupv1
oder cgroupv2
verwenden. In GKE wird cgroupv2
für neue Standardknotenpools mit Version 1.26 und höher und cgroupv1
für Versionen vor 1.26 verwendet. Bei Knotenpools, die mit der automatischen Knotenbereitstellung erstellt wurden, hängt die cgroup-Konfiguration von der ursprünglichen Clusterversion ab, nicht von der Knotenpoolversion.
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 Ihren Knotenpool beispielsweise für die Verwendung von cgroupv2
konfigurieren möchten, verwenden Sie eine Knotensystemkonfigurationsdatei wie diese:
linuxConfig:
cgroupMode: 'CGROUP_MODE_V2'
Die unterstützten cgroupMode
-Optionen sind:
CGROUP_MODE_V1
:cgroupv1
für den Knotenpool verwenden.CGROUP_MODE_V2
:cgroupv2
für den Knotenpool verwenden.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-Tools oder Drittanbieter-Tools mit
cgroupv2
kompatibel sind.
- Prüfen Sie, ob alle Monitoring-Tools oder Drittanbieter-Tools mit
- Wenn Sie JDK (Java-Arbeitslast) nutzen, empfehlen wir Ihnen, Versionen zu verwenden, 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, müssen die Knoten in GKE neu erstellt werden, um die Änderungen zu implementieren. Nachdem Sie die Konfiguration einem Knotenpool hinzugefügt und die Knoten neu erstellt haben, können Sie die neue Konfiguration überprü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. - Cgroup-Version auf Linux-Knoten ermitteln.
Konfigurationsoptionen für Linux-Huge-Pages
Sie können die Konfigurationsdatei des Knotensystems verwenden, um die Linux-Kernelfunktion Huge Pages zu nutzen.
Kubernetes unterstützt Huge Pages auf Knoten als eine Art von Ressource, ähnlich wie CPU oder Arbeitsspeicher. Mit den folgenden Parametern können Sie Ihre Kubernetes-Knoten anweisen, Huge Pages für die Verwendung durch Pods vorab zuzuweisen. Informationen zum Verwalten des Verbrauchs von Huge Pages durch Ihre Pods finden Sie unter HugePages verwalten.
Wenn Sie Huge Pages für Ihre Knoten vorab zuweisen möchten, geben Sie die Anzahl und Größe an. Wenn Sie Ihre Knoten beispielsweise so konfigurieren möchten, dass drei Huge Pages mit einer Größe von 1 Gigabyte und 1.024 Huge Pages 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 von Huge Pages gelten die folgenden Einschränkungen und Anforderungen:
- Damit der Knoten nicht vollständig von Huge Pages belegt wird, darf die Gesamtgröße der zugewiesenen Huge Pages 60 % des gesamten Arbeitsspeichers nicht überschreiten. Bei einem e2-standard-2-Rechner mit 8 GB Arbeitsspeicher können Sie beispielsweise nicht mehr als 4,8 GB für Huge Pages 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.