Auf dieser Seite erfahren Sie, wie Sie einen Knotenpool in GKE on AWS erstellen und wie Sie 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-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ählenCLUSTER_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 GbNODEPOOL_PROFILE
: ist 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.32.4-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önnenGOOGLE_CLOUD_LOCATION
: 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 gibt keine Überschneidungen zwischen den Pod-/Dienst-IP-Bereichen des Clusters und dem Subnetzwerk des Knotenpools. 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 benutzerdefinierte Einstellungen für den Kubernetes-Knoten-Agent (kubelet
) beim Erstellen Ihrer Knotenpools 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 vorherigen 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.
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 }
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
: Der Name des Knotenpools, der angepasst werden soll.SUBNET_ID
: Das dem Knotenpool zugewiesene Subnetz.CLUSTER_VERSION
ist die Version für die Steuerungsebene und die Knoten des GKE on AWS-Clusters.CLUSTER_LOCATION
: die Compute Engine-Region oder -Zone des Clusters.
sysctl
-Dienstprogramm konfigurieren
Wenn Sie Ihre 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 von Ihnen angegebenen Anpassungen erstellt. Im folgenden Beispiel sind die Parameter busy_poll
und busy_read
jeweils auf 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
: Der Google Cloud Standort des Clusters.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 der Standardwert festgelegt ist, wird das PID-Limit automatisch an die Größe der zugrunde liegenden Maschine angepasst. |
Konfigurationsoptionen für das sysctl
-Dienstprogramm
Zur Optimierung der Leistung Ihres Systems können Sie die folgenden 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
Knotenpools mit Spot-Instanzen
GKE on AWS unterstützt Knotenpools mit AWS-Spot-Instanzen als Vorschaufunktion. Spot-Instanz-Knotenpools sind Pools von Amazon EC2-Spot-Instanzen, die auf AWS zu einem niedrigeren Preis verfügbar sind.
Spot-Instanzen können Kosteneinsparungen für zustandslose, fehlertolerante und flexible Anwendungen ermöglichen. Sie eignen sich jedoch nicht gut für Arbeitslasten, die unflexibel, zustandsorientiert, nicht fehlertolerant oder zwischen Instanzknoten eng 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 Spot-Markt. Wenn Ihre Arbeitslasten garantierte Kapazität erfordern und gelegentliche Ausfallzeiten nicht tolerieren können, wählen Sie einen Standardknotenpool anstelle eines Knotenpools mit Spot-Instanzen aus.
Die in GKE on AWS verwendete Zuweisungsstrategie konzentriert sich auf die Auswahl von Spot-Instanz-Pools 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. für das Rendern von Bildern und Medien oder für Deep Learning.
Insbesondere wurde die Zuweisungsstrategie capacityOptimized
implementiert, wie unter Zuweisungsstrategien 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, an den Sie diesen Knotenpool anhängen möchten.
- INSTANCE_TYPE_LIST: Eine durch Kommas getrennte Liste von AWS EC2-Instanztypen. Im Knotenpool werden Spot-Instanzen mit diesen Instanztypen bereitgestellt. 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 dem Tool Amazon EC2 Instance Selector 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 GbNODEPOOL_PROFILE
: ist das IAM-Instanzprofil für Knotenpool-VMsNODE_VERSION
: ist die Kubernetes-Version, die auf jedem Knoten im Knotenpool installiert werden soll (z. B. "1.32.4-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önnenGOOGLE_CLOUD_LOCATION
: 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 gibt keine Überschneidungen zwischen den Pod-/Dienst-IP-Bereichen des Clusters und dem Subnetzwerk des Knotenpools. 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 eine Reihe von Instanztypen aufzulisten. Diese Best Practice ist wichtig, da in einem Knotenpool, der nur mit einem einzigen Instanztyp konfiguriert ist, keine neuen Knoten bereitgestellt werden können, wenn dieser Instanztyp in keiner der gewünschten Verfügbarkeitszonen verfügbar ist. 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. Das bedeutet, dass Sie nur eines dieser Felder angeben können, nicht beide.