Mit einer Richtlinie für kompakte Platzierung können Sie steuern, ob sich die GKE-Knoten (Google Kubernetes Engine) relativ zueinander innerhalb einer Zone befinden.
Übersicht
Wenn Sie Knotenpools und Arbeitslasten in einem GKE-Cluster erstellen, können Sie eine kompakte Platzierungsrichtlinie definieren. Diese gibt an, dass diese Knoten oder Arbeitslasten innerhalb einer Zone näher beieinander platziert werden sollen. Wenn sich Knoten näher beieinander befinden, kann die Netzwerklatenz zwischen Knoten reduziert werden. Dies kann besonders für eng gekoppelte Batcharbeitslasten nützlich sein.
Kompakte Platzierung mit GKE Autopilot verwenden
Beschränkungen
- GKE stellt Arbeitslasten innerhalb einer kompakten Platzierung in derselben Zone bereit.
- Die kompakte Platzierung ist auf
Balanced
und A100 GPU verfügbar. Weitere Informationen finden Sie unter Maschinentypen. - Kompakte Platzierungen sind für Pods verfügbar, die auf bis zu 150 Knoten gruppiert werden.
- Live-Migration für Knoten wird nicht unterstützt.
Kompakte Platzierungsrichtlinie aktivieren
Fügen Sie der Pod-Spezifikation mit den folgenden Schlüsseln einen nodeSelector
hinzu, um die kompakte Platzierung für GKE Autopilot zu aktivieren:
cloud.google.com/gke-placement-group
ist die Kennung, die Sie der Gruppe von Pods zuweisen, die zusammen in derselben kompakten Placement-Gruppe ausgeführt werden sollen.Verwenden Sie einen der folgenden Schlüssel, um den Ressourcentyp zu definieren:
cloud.google.com/compute-class: "Balanced"
cloud.google.com/gke-accelerator: "nvidia-tesla-a100"
Das folgende Beispiel ist ein Auszug einer Pod-Spezifikation, die eine kompakte Platzierung ermöglicht. Die Kennung der Placement-Gruppe ist placement-group-1
und die Compute-Klasse ist Balanced
:
nodeSelector:
cloud.google.com/gke-placement-group: "placement-group-1"
cloud.google.com/compute-class: "Balanced"
Jede Placement-Gruppe ist auf 150 Knoten beschränkt. Sie sollten eine Placement-Gruppe nur auf die Arbeitslasten beschränken, die von der Gruppierung profitieren, und Ihre Arbeitslasten nach Möglichkeit auf separate Placement-Gruppen verteilen.
Kompakte Platzierung mit GKE Standard verwenden
Beschränkungen
Für die kompakte Platzierung in GKE Standard-Knotenpools gelten die folgenden Einschränkungen:
- Wird nur in neuen Knotenpools unterstützt. Für vorhandene Knotenpools können Sie die kompakte Platzierung nicht aktivieren oder deaktivieren.
- Nur für Knotenpools, die in einer einzelnen Zone ausgeführt werden, verfügbar.
- Nur für A2-, C2-, G2-, C2D-, C3D-. N2-, N2D- und C3-Maschinentypen verfügbar.
- Unterstützt bis zu 150 Compute Engine-VM-Instanzen in jeder Richtlinie. Jeder Knotenpool, der diesen Grenzwert überschreitet, wird während der Erstellung abgelehnt.
- Live-Migration für Knoten wird nicht unterstützt.
- Das Bereitstellen einer benutzerdefinierten Ressourcenrichtlinie mit dem Flag
placement-policy
wird bei Blau/Grün-Upgrades nicht unterstützt.
Kompakte Platzierungsrichtlinie erstellen
Zum Erstellen kompakter Platzierungsrichtlinien geben Sie im Google Cloud CLI die Option placement-type=COMPACT
während der Knotenpool- oder Clustererstellung an. Mit dieser Einstellung versucht GKE, Knoten innerhalb eines Knotenpools näher beieinander zu platzieren.
Wenn Sie eine vorhandene Ressourcenrichtlinie in Ihrem Cluster verwenden möchten, geben Sie den Speicherort Ihrer benutzerdefinierten Richtlinie für das Flag placement-policy
während der Knotenpool- oder Clustererstellung an. Dies ermöglicht die Verwendung von reservierten Placements, mehrere Knotenpools mit derselben Platzierungsrichtlinie und andere erweiterte Placement-Optionen. Sie erfordert jedoch auch mehr manuelle Vorgänge als die Angabe des Flags "--Placement-type=COMPACT". Beispielsweise müssen Sie benutzerdefinierte Ressourcenrichtlinien erstellen, löschen und verwalten. Achten Sie darauf, dass die maximale Anzahl von VM-Instanzen in allen Knotenpools mithilfe der Ressourcenrichtlinie eingehalten wird. Wenn dieses Limit erreicht wird, während einige Ihrer Knotenpools ihre maximale Größe nicht erreichen, schlägt das Hinzufügen weiterer Knoten fehl.
Wenn Sie die Flags placement-type
und placement-policy
nicht angeben, gibt es standardmäßig keine Anforderungen zur Knotenplatzierung.
Richtlinie für kompakte Platzierung in einem neuen Cluster erstellen
Wenn Sie einen neuen Cluster erstellen, können Sie eine kompakte Platzierungsrichtlinie angeben, die auf den Standardknotenpool angewendet wird. Bei allen nachfolgenden Knotenpools, die Sie für den Cluster erstellen, müssen Sie angeben, ob eine kompakte Platzierung angewendet werden soll.
Verwenden Sie den folgenden Befehl, um einen Cluster mit einem Standardknotenpool zu erstellen, auf den eine Richtlinie für kompakte Platzierung angewendet wird:
gcloud container clusters create CLUSTER_NAME \
--machine-type MACHINE_TYPE \
--placement-type COMPACT \
--max-surge-upgrade 0 \
--max-unavailable-upgrade MAX_UNAVAILABLE
Dabei gilt:
CLUSTER_NAME
: Der Name des neuen Clusters.MACHINE_TYPE
: Der Maschinentyp für Knoten; muss ein C2-Maschinentyp sein (z. B.c2-standard-4
).--placement-type COMPACT
: Wendet eine kompakte Platzierung auf die Knoten im Standardknotenpool an.MAX_UNAVAILABLE
: Maximale Anzahl von Knoten, die während eines Knotenpool-Upgrades gleichzeitig nicht verfügbar sein können. Für eine kompakte Platzierung empfehlen wir schnelle Surge-Upgrades, um die Wahrscheinlichkeit zu verbessern, dass sich Knoten während der Upgrades an einem anderen Ort befinden.
Richtlinie für kompakte Platzierung in einem vorhandenen Cluster erstellen
Auf einem vorhandenen Cluster können Sie einen Knotenpool erstellen, auf den eine Richtlinie für kompakte Platzierung angewendet wird.
Verwenden Sie den folgenden Befehl, um einen Knotenpool zu erstellen, auf den eine Richtlinie für kompakte Platzierung angewendet wird:
gcloud container node-pools create NODEPOOL_NAME \
--machine-type MACHINE_TYPE \
--cluster CLUSTER_NAME \
--placement-type COMPACT \
--max-surge-upgrade 0 \
--max-unavailable-upgrade MAX_UNAVAILABLE
Dabei gilt:
NODEPOOL_NAME
: Der Name des neuen Knotenpools.MACHINE_TYPE
: Der Maschinentyp für Knoten; muss ein C2-Maschinentyp sein (z. B.c2-standard-4
).CLUSTER_NAME
: Name Ihres vorhandenen Clusters.--placement-type COMPACT
: Gibt an, dass die kompakte Platzierung für die Knoten im neuen Knotenpool angewendet werden soll.MAX_UNAVAILABLE
: Maximale Anzahl von Knoten, die während eines Knotenpool-Upgrades gleichzeitig nicht verfügbar sein können. Für eine kompakte Platzierung empfehlen wir schnelle Surge-Upgrades, um die Wahrscheinlichkeit zu verbessern, dass sich Knoten während der Upgrades an einem anderen Ort befinden.
Knotenpools mit einer gemeinsamen benutzerdefinierten Platzierungsrichtlinie erstellen
Sie können manuell eine Ressourcenrichtlinie erstellen und in mehreren Knotenpools verwenden.
Erstellen Sie die Ressourcenrichtlinie in der Google Cloud-Region des Clusters:
gcloud compute resource-policies create group-placement POLICY_NAME \ --region REGION \ --collocation collocated
Ersetzen Sie Folgendes:
POLICY_NAME
: Der Name Ihrer Ressourcenrichtlinie.REGION
: Die Region Ihres Clusters.
Erstellen Sie mit der benutzerdefinierten Ressourcenrichtlinie einen Knotenpool:
gcloud container node-pools create NODEPOOL_NAME \ --machine-type MACHINE_TYPE \ --cluster CLUSTER_NAME \ --placement-policy POLICY_NAME \ --max-surge-upgrade 0 \ --max-unavailable-upgrade MAX_UNAVAILABLE
Ersetzen Sie Folgendes:
NODEPOOL_NAME
: Der Name des neuen Knotenpools.MACHINE_TYPE
: Der Maschinentyp für Knoten; muss ein C2-Maschinentyp sein (z. B.c2-standard-4
).CLUSTER_NAME
: Name Ihres vorhandenen Clusters.MAX_UNAVAILABLE
: Maximale Anzahl von Knoten, die während eines Knotenpool-Upgrades gleichzeitig nicht verfügbar sein können. Für eine kompakte Platzierung empfehlen wir schnelle Surge-Upgrades, um die Wahrscheinlichkeit zu verbessern, dass sich Knoten während der Upgrades an einem anderen Ort befinden.
Compute Engine-Reservierung mit einer Richtlinie für kompakte Platzierung verwenden
Mit Reservierungen können Sie dafür sorgen, dass Hardware in der angegebenen Zone verfügbar ist, um das Risiko von Fehlern bei der Knotenpoolerstellung aufgrund unzureichender Hardware zu verringern.
So erstellen Sie eine Reservierung, in der eine Richtlinie für kompakte Platzierungen angegeben ist:
gcloud compute reservations create RESERVATION_NAME \ --vm-count MACHINE_COUNT \ --machine-type MACHINE_TYPE \ --resource-policies policy=POLICY_NAME \ --zone ZONE \ --require-specific-reservation
Ersetzen Sie Folgendes:
RESERVATION_NAME
: Der Name Ihrer Reservierung.MACHINE_COUNT
: Die Anzahl der reservierten Knoten.MACHINE_TYPE
: Der Maschinentyp für Knoten muss ein C2-Maschinentyp sein. Wenn Sie beispielsweise einen vordefinierten C2-Maschinentyp mit 4 vCPUs verwenden möchten, geben Siec2-standard-4
an.POLICY_NAME
: Der Name Ihrer Ressourcenrichtlinie.ZONE
: Die Zone, in der Sie Ihre Reservierung erstellen möchten.
Erstellen Sie einen Knotenpool. Geben Sie dazu sowohl die Richtlinie für kompakte Platzierung als auch die Reservierung an, die Sie im vorherigen Schritt erstellt haben:
gcloud container node-pools create NODEPOOL_NAME \ --machine-type MACHINE_TYPE \ --cluster CLUSTER_NAME \ --placement-policy POLICY_NAME \ --reservation-affinity specific \ --reservation RESERVATION_NAME \ --max-surge-upgrade 0 \ --max-unavailable-upgrade MAX_UNAVAILABLE
Ersetzen Sie Folgendes:
NODEPOOL_NAME
: Der Name des neuen Knotenpools.MACHINE_TYPE
: Der Maschinentyp für Knoten; muss ein C2-Maschinentyp sein (z. B.c2-standard-4
).CLUSTER_NAME
: Name Ihres vorhandenen Clusters.
Arbeitslast auf Knoten mit kompakter Platzierung erstellen
Zum Ausführen von Arbeitslasten auf dedizierten Knoten mit kompakter Platzierung können Sie beispielsweise folgende Kubernetes-Mechanismen verwenden: Pods zu Knoten zuweisen und das Planen unerwünschter Pods für eine Gruppe von Knoten verhindern.
Im folgenden Beispiel fügen Sie den dedizierten Knoten eine Markierung und den Pods eine entsprechende Toleranz und Affinität hinzu.
Fügen Sie den Knoten im Knotenpool mit einer Richtlinie für kompakte Platzierung eine Markierung hinzu:
kubectl taint nodes -l cloud.google.com/gke-nodepool=NODEPOOL_NAME dedicated-pool=NODEPOOL_NAME:NoSchedule
Geben Sie in der Arbeitslastdefinition die erforderliche Toleranz und eine Knotenaffinität an. Hier ein Beispiel mit einem einzelnen Pod:
apiVersion: v1 kind: Pod metadata: ... spec: ... tolerations: - key: dedicated-pool operator: "Equal" value: "NODEPOOL_NAME" effect: "NoSchedule" affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: dedicated-pool operator: In values: - NODEPOOL_NAME
An einigen Standorten ist es möglicherweise nicht möglich, einen großen Knotenpool mithilfe einer Richtlinie für kompakte Platzierung zu erstellen. Wenn Sie die Größe solcher Knotenpools auf das Erforderliche beschränken möchten, sollten Sie einen Knotenpool pro Arbeitslast erstellen, der eine kompakte Platzierung erfordert.
Kompakte Platzierung für die automatische Knotenbereitstellung verwenden
Ab der GKE-Version 1.25 unterstützt die automatische Knotenbereitstellung die Richtlinie für kompakte Platzierung. Mit der automatischen Knotenbereitstellung stellt GKE Knotenpools automatisch basierend auf der Nachfrage der Clusterressourcen bereit. Weitere Informationen finden Sie unter Automatische Knotenbereitstellung verwenden.
Fügen Sie der Pod-Spezifikation mit den folgenden Schlüsseln einen nodeSelector
hinzu, um die kompakte Platzierung für die automatische Knotenbereitstellung zu aktivieren:
cloud.google.com/gke-placement-group
ist die Kennung, die Sie der Gruppe von Pods zuweisen, die zusammen in derselben kompakten Placement-Gruppe ausgeführt werden sollen.cloud.google.com/machine-family
ist der Name der Maschinenfamilie. Verwenden Sie eine der Maschinenfamilien, die die kompakte Platzierung unterstützen. Wir empfehlen die Verwendung von C2- oder C2D-Maschinenfamilien für Arbeitslasten mit Anforderungen an die Rechen- und Netzwerkleistung.
Das folgende Beispiel ist eine Pod-Spezifikation, die eine kompakte Platzierung ermöglicht:
apiVersion: v1
kind: Pod
metadata:
...
spec:
...
nodeSelector:
cloud.google.com/gke-placement-group: PLACEMENT_GROUP_IDENTIFIER
cloud.google.com/machine-family: MACHINE_FAMILY
Sie können den Schlüssel cloud.google.com/machine-family
weglassen, wenn in der Pod-Konfiguration bereits ein Maschinentyp definiert ist, der für die kompakte Platzierung unterstützt wird. Wenn die Pod-Spezifikation beispielsweise nvidia.com/gpu
enthält und der Cluster für die Verwendung von A100-GPUs konfiguriert ist, müssen Sie den Schlüssel cloud.google.com/machine-family
nicht angeben.
Das folgende Beispiel zeigt eine Pod-Spezifikation, die die Anfrage nvidia.com/gpu
definiert, und der Cluster ist für die Verwendung von A100-GPUs konfiguriert. Dieser Pod spec
enthält nicht den Schlüssel cloud.google.com/machine-family
:
apiVersion: v1
kind: Pod
metadata:
...
spec:
...
nodeSelector:
cloud.google.com/gke-placement-group: PLACEMENT_GROUP_IDENTIFIER
cloud.google.com/gke-accelerator: "nvidia-tesla-a100"
resources:
limits:
nvidia.com/gpu: 2
Weitere Informationen finden Sie unter Pods zur Nutzung von GPUs konfigurieren.
Größe der Placement-Gruppe optimieren
Da GKE die beste Platzierung für kleinere Bereitstellungen findet, empfehlen wir Ihnen, GKE anzuweisen, keine verschiedenen Pod-Typen in derselben Placement-Gruppe auszuführen. Fügen Sie einen Schlüssel für die Toleranz mit dem Schlüssel cloud.google.com/gke-placement-group
und der von Ihnen definierten Kennung für die kompakte Platzierung hinzu.
Das folgende Beispiel zeigt eine Pod-Spezifikation, die eine Pod-Toleranz mit kompakter Platzierung definiert:
apiVersion: v1
kind: Pod
metadata:
...
spec:
...
tolerations:
- key: cloud.google.com/gke-placement-group
operator: "Equal"
value: PLACEMENT_GROUP_IDENTIFIER
effect: "NoSchedule"
Weitere Informationen zur automatischen Knotenbereitstellung mit Pod-Toleranz finden Sie unter Arbeitslasttrennung.