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ä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
: 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önnenGOOGLE_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.
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
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:
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-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 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.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önnenGOOGLE_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.