Knotenpool erstellen und anpassen

Auf dieser Seite erfahren Sie, wie Sie einen Knotenpool in GKE on AWS erstellen und Ihre Knotenkonfiguration mithilfe einer Konfigurationsdatei anpassen.

Zum Erstellen eines Knotenpools müssen Sie die folgenden Ressourcen angeben:

  • Den Namen eines vorhandenen AWS-Clusters, in dem der Knotenpool erstellt werden soll
  • Ein IAM-Instanzprofil für Knotenpool-VMs
  • Ein Subnetz, in dem die Knotenpool-VMs ausgeführt werden

Sie können ein EC2-Schlüsselpaar erstellen, wenn Sie SSH-Zugriff auf Ihre Knoten benötigen.

Diese Seite richtet sich an IT-Administratoren und ‑Betreiber, die Cloud-Infrastrukturen einrichten, überwachen und verwalten möchten. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Google Cloud -Inhalten verweisen, finden Sie unter Häufig verwendete GKE Enterprise-Nutzerrollen und -Aufgaben.

Standard-Knotenpool erstellen

Sobald diese Ressourcen verfügbar sind, können Sie mit dem folgenden Befehl einen Knotenpool erstellen:

gcloud container aws node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --instance-type INSTANCE_TYPE \
    --root-volume-size ROOT_VOLUME_SIZE \
    --iam-instance-profile NODEPOOL_PROFILE \
    --node-version NODE_VERSION \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --max-pods-per-node MAX_PODS_PER_NODE \
    --location GOOGLE_CLOUD_LOCATION \
    --subnet-id NODEPOOL_SUBNET \
    --ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

Dabei gilt:

  • NODE_POOL_NAME: ist der Name, den Sie für Ihren Knotenpool auswählen
  • CLUSTER_NAME: ist der Name des Clusters, an den der Knotenpool angehängt werden soll.
  • INSTANCE_TYPE: ist der gewünschte AWS-Maschineninstanztyp für diesen Knotenpool, z. B. m5.large
  • ROOT_VOLUME_SIZE: ist die gewünschte Größe für das Root-Volume jedes Knotens in Gb
  • NODEPOOL_PROFILE: das IAM-Instanzprofil für Knotenpool-VMs Weitere Informationen zum Aktualisieren eines IAM-Instanzprofils finden Sie unter AWS IAM-Instanzprofil aktualisieren.
  • NODE_VERSION: ist die Kubernetes-Version, die auf jedem Knoten im Knotenpool installiert werden soll (z. B. „1.31.6-gke.200“
  • MIN_NODES: ist die Mindestanzahl von Knoten, die der Knotenpool enthalten kann.
  • MAX_NODES: ist die maximale Anzahl an Knoten, die der Knotenpool enthalten darf.
  • MAX_PODS_PER_NODE: ist die maximale Anzahl von Pods, die auf einem einzelnen Knoten im Pool erstellt werden können
  • GOOGLE_CLOUD_LOCATION: ist der Name des Google Cloud Standorts, von dem dieser Knotenpool verwaltet wird.
  • NODEPOOL_SUBNET ist die ID des Subnetzes, in dem der Knotenpool ausgeführt wird.
    • Es darf keine Überschneidungen zwischen den Pod-/Dienst-IP-Bereichen des Clusters und dem Subnetzwerk des Knotenpools geben. Weitere Informationen zum Auswählen von Pod- und Dienst-IP-Bereichen für Ihren Cluster finden Sie unter CIDR-Bereiche für Ihren Cluster auswählen.
    • Wenn sich dieses Subnetz außerhalb des primären CIDR-Blocks der VPC befindet, sind einige zusätzliche Schritte erforderlich. Weitere Informationen finden Sie unter Sicherheitsgruppen.
  • SSH_KEY_PAIR_NAME ist der Name des AWS-SSH-Schlüsselpaars, das für den SSH-Zugriff erstellt wurde (optional).
  • CONFIG_KMS_KEY_ARN: ist der Amazon-Ressourcenname (ARN) des AWS KMS-Schlüssels, der Nutzerdaten verschlüsselt

Wenn vorhanden, wendet der Parameter --tags das angegebene Tag auf alle Knoten in Ihrem Knotenpool an. In diesem Beispiel werden alle Knoten im Pool mit den Namen des Clusters und des Knotenpools getaggt, zu dem der Knoten gehört.

Knotensystemkonfiguration anpassen

Sie können die Knotenkonfiguration mit verschiedenen Methoden anpassen. Sie können beispielsweise beim Erstellen eines Knotenpools Parameter wie das CPU-Limit des Pods angeben.

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.

kubelet-Agent konfigurieren

Wenn Sie die Knotenkonfiguration mit kubelet anpassen möchten, verwenden Sie die Google Cloud CLI oder Terraform.

gcloud

Sie können beim Erstellen Ihrer Knotenpools benutzerdefinierte Einstellungen für den Kubernetes-Knoten-Agent (kubelet) angeben. Wenn Sie beispielsweise kubelet so konfigurieren möchten, dass die statische CPU-Verwaltungsrichtlinie verwendet wird, führen Sie den folgenden Befehl aus:

  gcloud container aws node-pools create POOL_NAME \
       --cluster CLUSTER_NAME \
       --location=LOCATION \
       --kubelet_config_cpu_manager_policy=static

Ersetzen Sie Folgendes:

  • POOL_NAME: 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.

Eine vollständige Liste der Felder, die Sie dem Befehl hinzufügen können, finden Sie unter Kubelet-Konfigurationsoptionen.

Terraform

Weitere Informationen zu Terraform in einer AWS-Umgebung finden Sie in der Terraform-Knotenpoolreferenz.

  1. Legen Sie die Terraform-Variablen fest, indem Sie den folgenden Block in die Datei variables.tf einfügen:

    variable "node_pool_kubelet_config_cpu_manager" {
      default     = "none"
    }
    
    variable "node_pool_kubelet_config_cpu_cfs_quota" {
      default     = "true"
    }
    
    variable "node_pool_kubelet_config_cpu_cfs_quota_period" {
      default     = "100ms"
    }
    
    variable "node_pool_kubelet_config_pod_pids_limit" {
      default     = -1
    }
    
  2. Fügen Sie Ihrer Terraform-Konfiguration den folgenden Block hinzu:

    resource "google_container_aws_node_pool" "NODE_POOL_RESOURCE_NAME" {
     provider           = google
     cluster            = CLUSTER_NAME
     name               = POOL_NAME
     subnet_id          = SUBNET_ID
     version            = CLUSTER_VERSION
     location           = CLUSTER_LOCATION
    
     kubelet_config {
       cpu_manager_policy = var.node_pool_kubelet_config_cpu_manager
       cpu_cfs_quota = var.node_pool_kubelet_config_cpu_cfs_quota
       cpu_cfs_quota_period = var.node_pool_kubelet_config_cpu_cfs_quota_period
       pod_pids_limit = var.node_pool_kubelet_config_pod_pids_limit
     }
    }
    

    Ersetzen Sie Folgendes:

    • NODE_POOL_RESOURCE_NAME: Der Name der Knotenpoolressource in der Terraform-Vorlage.
    • CLUSTER_NAME den Namen des vorhandenen Clusters.
    • POOL_NAME ist der Name des Knotenpools, der angepasst werden soll.
    • SUBNET_ID: das Subnetz, das dem Knotenpool zugewiesen ist.
    • CLUSTER_VERSION: die Version für die Steuerungsebene und die Knoten des GKE on AWS-Clusters.
    • CLUSTER_LOCATION: die Compute Engine-Region oder ‑Zone des Clusters.

Dienstprogramm sysctl konfigurieren

Wenn Sie die Knotensystemkonfiguration mit sysctl anpassen möchten, senden Sie eine POST-Anfrage an die Methode awsClusters.awsNodePools.create. Mit dieser POST-Anfrage wird ein Knotenpool mit den angegebenen Anpassungen erstellt. Im folgenden Beispiel sind die Parameter busy_poll und busy_read auf jeweils 5.000 Mikrosekunden konfiguriert:

POST https://ENDPOINT/v1/projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/CLUSTER_NAME/awsNodePools

{
    "name": NODE_POOL_NAME,
    "version": CLUSTER_VERSION,
    "config": {
        "linuxNodeConfig": {
            "sysctls": {
                "net.core.busy_poll": "5000",
                "net.core.busy_read": "5000",
            }
        }
    }
}

Ersetzen Sie Folgendes:

  • ENDPOINT: Ihr Google Cloud Dienstendpunkt.
  • PROJECT_ID: Ihre Google Cloud -Projekt-ID.
  • GOOGLE_CLOUD_LOCATION: Google Cloud Standort für den Cluster.
  • CLUSTER_NAME ist der Name des Clusters, dem Sie einen Knotenpool hinzufügen möchten.
  • NODE_POOL_NAME: Der Name des Knotenpools.
  • CLUSTER_VERSION: die Versionsnummer Ihres Clusters, z. B. 1.31.0-gke.500.

Eine vollständige Liste der Schlüssel/Wert-Paare, die Sie der vorherigen JSON-Anfrage hinzufügen können, finden Sie unter Sysctl-Konfigurationsoptionen.

Konfigurationsoptionen für den kubelet-Agent

In der folgenden Tabelle sind die kubelet-Optionen aufgeführt, die Sie ändern können.

Kubelet-Konfigurationseinstellungen Beschränkungen Standardeinstellung Beschreibung
kubelet_config_cpu_manager_policy 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.
kubelet_config_cpu_cfs_quota 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.
kubelet_config_cpu_cfs_quota_period 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.
kubelet_config_pod_pids_limit Der Wert muss zwischen 1024 und 4194304 liegen. -1 Mit dieser Einstellung wird die maximale Anzahl von Prozess-IDs (PIDs) festgelegt, die jeder Pod verwenden kann. Wenn das Limit auf den Standardwert festgelegt ist, wird es automatisch anhand der Größe des zugrunde liegenden Computers skaliert.

Konfigurationsoptionen für das sysctl-Dienstprogramm

Zur Optimierung der Leistung Ihres Systems können Sie die folgenden Attribute ändern:

Knotenpools mit Spot-Instanzen

GKE on AWS unterstützt Knotenpools mit AWS-Speicherinstanzen als Vorschaufunktion. Knotenpools für Spot-Instanzen sind Pools von Amazon EC2-Spot-Instanzen, die zu niedrigeren Kosten auf AWS verfügbar sind.

Mit Spot-Instanzen lassen sich Kosten für zustandslose, fehlertolerante und flexible Anwendungen einsparen. Sie eignen sich jedoch nicht für Arbeitslasten, die starr, zustandsorientiert, fehleruntolerant oder eng zwischen Instanzknoten gekoppelt sind. Spot-Instanzen können von Amazon EC2 unterbrochen werden, wenn EC2 die Kapazität wieder benötigt. Sie unterliegen daher Schwankungen auf dem Spotmarkt. Wenn Ihre Arbeitslasten eine garantierte Kapazität erfordern und keine gelegentlichen Ausfälle tolerieren können, wählen Sie einen Standardknotenpool anstelle eines Knotenpools mit Spot-Instanzen.

Bei der Zuordnungsstrategie in GKE on AWS liegt der Schwerpunkt auf der Auswahl von Spot-Instanzenpools mit der höchsten Kapazitätsverfügbarkeit, um das Risiko von Unterbrechungen zu minimieren. Dieser Ansatz ist besonders vorteilhaft für Arbeitslasten mit höheren Unterbrechungskosten, z. B. Bild- und Medienrendering oder Deep Learning. Insbesondere wurde die capacityOptimized-Allokationsstrategie implementiert, wie unter Allokationsstrategien für Spot-Instanzen beschrieben.

Spot-Knotenpool erstellen

Führen Sie den folgenden Befehl aus, um einen Knotenpool mit Spot-Instanzen zu erstellen:

gcloud container aws node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --spot-instance-types INSTANCE_TYPE_LIST \
    --root-volume-size ROOT_VOLUME_SIZE \
    --iam-instance-profile NODEPOOL_PROFILE \
    --node-version NODE_VERSION \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --max-pods-per-node MAX_PODS_PER_NODE \
    --location GOOGLE_CLOUD_LOCATION \
    --subnet-id NODEPOOL_SUBNET \
    --ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

Ersetzen Sie Folgendes:

  • NODE_POOL_NAME: Der Name, den Sie diesem Knotenpool zuweisen möchten.
  • CLUSTER_NAME: Der Name des Clusters, dem Sie diesen Knotenpool zuordnen möchten.
  • INSTANCE_TYPE_LIST: eine durch Kommas getrennte Liste von AWS EC2-Instanztypen. Der Knotenpool stellt Spot-Instanzen mit diesen Instanztypen bereit. Die Instanztypen müssen dieselbe CPU-Architektur, dieselbe Anzahl von CPUs und dieselbe Speicherkapazität haben. Beispiel: "c6g.large,c6gd.large,c6gn.large,c7g.large,t4g.medium". Mit der Amazon EC2-Instanzauswahl können Sie Instanztypen mit identischen CPU- und Arbeitsspeicherkonfigurationen finden.
  • ROOT_VOLUME_SIZE: ist die gewünschte Größe für das Root-Volume jedes Knotens in Gb
  • NODEPOOL_PROFILE: ist das IAM-Instanzprofil für Knotenpool-VMs
  • NODE_VERSION: ist die Kubernetes-Version, die auf jedem Knoten im Knotenpool installiert werden soll (z. B. „1.31.6-gke.200“
  • MIN_NODES: ist die Mindestanzahl von Knoten, die der Knotenpool enthalten kann.
  • MAX_NODES: ist die maximale Anzahl an Knoten, die der Knotenpool enthalten darf.
  • MAX_PODS_PER_NODE: ist die maximale Anzahl von Pods, die auf einem einzelnen Knoten im Pool erstellt werden können
  • GOOGLE_CLOUD_LOCATION: ist der Name des Google Cloud Standorts, von dem dieser Knotenpool verwaltet wird.
  • NODEPOOL_SUBNET ist die ID des Subnetzes, in dem der Knotenpool ausgeführt wird.
    • Es darf keine Überschneidungen zwischen den Pod-/Dienst-IP-Bereichen des Clusters und dem Subnetzwerk des Knotenpools geben. Weitere Informationen zum Auswählen von Pod- und Dienst-IP-Bereichen für Ihren Cluster finden Sie unter CIDR-Bereiche für Ihren Cluster auswählen.
    • Wenn sich dieses Subnetz außerhalb des primären CIDR-Blocks der VPC befindet, sind einige zusätzliche Schritte erforderlich. Weitere Informationen finden Sie unter Sicherheitsgruppen.
  • SSH_KEY_PAIR_NAME ist der Name des AWS-SSH-Schlüsselpaars, das für den SSH-Zugriff erstellt wurde (optional).
  • CONFIG_KMS_KEY_ARN: ist der Amazon-Ressourcenname (ARN) des AWS KMS-Schlüssels, der Nutzerdaten verschlüsselt

Es empfiehlt sich, im Feld INSTANCE_TYPE_LIST mehrere Instanztypen anzugeben. Diese Best Practice ist wichtig, da für einen Knotenpool nur ein Instanztyp konfiguriert ist und dieser Instanztyp in keiner der gewünschten Verfügbarkeitszonen verfügbar ist. In diesem Fall können im Knotenpool keine neuen Knoten bereitgestellt werden. Dies kann sich auf die Verfügbarkeit Ihrer Anwendungen auswirken und zu Dienstunterbrechungen führen.

Das Feld spot-instance-types schließt das Feld instance-type aus. Sie können also nur eines dieser Felder angeben, nicht beide.