Knotensystemkonfiguration anpassen


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:

Knotensystemkonfiguration verwenden

So verwenden Sie eine Knotensystemkonfiguration:

  1. Erstellen Sie eine Konfigurationsdatei. Diese Datei enthält die Konfigurationen kubelet und sysctl.
  2. 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 konfiguriert kubelet so, dass die statische CPU-Verwaltungsrichtlinie verwendet wird.
  • net.core.somaxconn: '2048' begrenzt den Rückstand socket 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 Clusters
  • SYSTEM_CONFIG_PATH ist der Pfad zur Datei, die Ihre kubelet- und sysctl-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 Knotenpools
  • CLUSTER_NAME ist der Name des Clusters, dem Sie einen Knotenpool hinzufügen möchten
  • SYSTEM_CONFIG_PATH ist der Pfad zur Datei, die Ihre kubelet- und sysctl-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öchten
  • CLUSTER_NAME ist der Name des Clusters, den Sie aktualisieren möchten
  • SYSTEM_CONFIG_PATH ist der Pfad zur Datei, die Ihre kubelet- und sysctl-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:

  1. Erstellen Sie eine Konfigurationsdatei mit der gewünschten Konfiguration.
  2. Fügen Sie die Konfiguration einem neuen Knotenpool hinzu.
  3. Migrieren Sie Ihre Arbeitslasten zum neuen Knotenpool.
  4. 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:

  1. Erstellen Sie einen Knotenpool.
  2. Migrieren Sie Ihre Arbeitslasten zum neuen Knotenpool.
  3. 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:

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 Sie cgroupv1 für den Knotenpool.
  • CGROUP_MODE_V2: Verwenden Sie cgroupv2 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 der cgroupv2 API kompatibel sind.
    • Prüfen Sie, ob alle Monitoring- oder Drittanbietertools mit cgroupv2 kompatibel sind.
  • 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:

  1. Erstellen Sie eine interaktive Shell mit einem beliebigen Knoten im Knotenpool. Ersetzen Sie mynode im Befehl durch den Namen eines beliebigen Knotens im Knotenpool.
  2. 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.

Nächste Schritte