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.

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:

  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 \
    --location=LOCATION \
    --system-config-from-file=SYSTEM_CONFIG_PATH

Dabei gilt:

  • CLUSTER_NAME ist der Name des Clusters
  • LOCATION: die Compute-Zone oder ‑Region 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 \
     --location=LOCATION \
     --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
  • LOCATION: die Compute-Zone oder ‑Region des Clusters.
  • 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 \
    --location=LOCATION \
    --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
  • LOCATION: die Compute-Zone oder ‑Region des Clusters.
  • 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.
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:

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 der cgroupv2 API kompatibel sind.
    • Prüfen Sie, ob alle Monitoring-Tools oder Drittanbieter-Tools mit cgroupv2 kompatibel sind.
  • 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:

  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. 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.

Nächste Schritte