Puoi controllare se i nodi di Google Kubernetes Engine (GKE) sono fisicamente situati l'uno rispetto all'altro all'interno di una zona utilizzando un criterio di posizionamento compatto.
Panoramica
Quando crei pool di nodi e workload in un cluster GKE, puoi definire un criterio di posizionamento compatto, che specifica che questi nodi o workload devono essere posizionati in una maggiore vicinanza fisica all'interno di una zona. Avere i nodi più vicini tra loro può ridurre la latenza di rete tra i nodi, il che può essere particolarmente utile per i carichi di lavoro batch ad accoppiamento stretto.
Utilizzare il posizionamento compatto con GKE Autopilot
Nei cluster Autopilot, puoi richiedere un posizionamento compatto per carichi di lavoro specifici aggiungendo selettori di nodi alla specifica del pod. Puoi utilizzare il criterio di posizionamento compatto Autopilot predefinito o un criterio di posizionamento compatto Compute Engine esistente che utilizza la serie di macchine N2 o la serie di macchine N2D.
Limitazioni
- GKE esegue il provisioning dei carichi di lavoro all'interno di un posizionamento compatto nella stessa zona.
- Il posizionamento compatto è disponibile sulle GPU
Balanced
e A100. Per approfondire, consulta i tipi di macchine. - Il posizionamento compatto è disponibile per i pod raggruppati su un massimo di 150 nodi.
- La migrazione live per i nodi non è supportata.
Attivare un criterio di posizionamento compatto
Per abilitare il posizionamento compatto per GKE Autopilot, aggiungi un
nodeSelector
alla specifica del pod con le seguenti chiavi:
cloud.google.com/gke-placement-group
: l'identificatore che assegni al gruppo di pod che deve essere eseguito insieme nello stesso gruppo di posizionamenti compatti. Ogni gruppo di posizionamenti è limitato a 150 nodi. Ti consigliamo di limitare un gruppo di posizionamento solo ai carichi di lavoro che beneficiano del raggruppamento e, se possibile, di distribuire i carichi di lavoro in gruppi di posizionamento distinti.Una delle seguenti chiavi per definire il tipo di risorsa:
cloud.google.com/compute-class: "Balanced"
cloud.google.com/gke-accelerator: "nvidia-tesla-a100"
cloud.google.com/placement-policy-name
: facoltativamente, il nome di un policy di posizionamento compatto Compute Engine esistente. Puoi specificare un criterio di posizionamento compatto personalizzato solo nella versione GKE 1.31.1-gke.2010000 e successive.Per istruzioni, consulta Creare un criterio di posizionamento compatto nella documentazione di Compute Engine.
L'esempio seguente di specifica del pod abilita il posizionamento compatto con un criterio di posizionamento compatto personalizzato:
apiVersion: v1
kind: Pod
metadata:
# lines omitted for clarity
spec:
nodeSelector:
cloud.google.com/gke-placement-group: "placement-group-1"
cloud.google.com/compute-class: "Balanced"
cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME
Sostituisci PLACEMENT_POLICY_NAME
con il nome di un
criterio di posizionamento compatto di Compute Engine esistente. Per utilizzare il
criterio di posizionamento compatto predefinito per Autopilot, ometti la
rigacloud.google.com/placement-policy-name
.
Utilizzare il posizionamento compatto con GKE Standard
Limitazioni
Il posizionamento compatto nei pool di nodi GKE Standard presenta le seguenti limitazioni:
- Supportato solo nei nuovi pool di nodi. Non puoi attivare o disattivare il posizionamento compatto per i pool di nodi esistenti.
- Disponibile solo per i node pool che operano in un'unica zona.
- Disponibile solo sui tipi di macchine A2, A3, C2, G2, C2D, C3D, N2, N2D e C3.
- Supporta fino a 150 istanze VM di Compute Engine in ciascun criterio. Qualsiasi pool di nodi che supera questo limite in qualsiasi momento viene rifiutato durante la creazione.
- La migrazione live per i nodi non è supportata.
- L'indicazione di un criterio relativo alle risorse personalizzate utilizzando il flag
placement-policy
non è supportata con gli upgrade blu/verde.
Crea un criterio di posizionamento compatto
Per creare criteri di posizionamento compatto, in Google Cloud CLI specifica l'opzione placement-type=COMPACT
durante la creazione del pool di nodi o del cluster. Con questa
impostazione, GKE tenta di posizionare i nodi all'interno di un pool di nodi in una maggiore
proximity fisica tra di loro.
Per utilizzare un
criterio relativo alle risorse esistente nel
cluster, specifica la posizione del criterio personalizzato per il flag placement-policy
durante la
creazione del pool di nodi o del cluster. In questo modo, puoi utilizzare la flessibilità dei posizionamenti riservati, più pool di nodi con lo stesso criterio di posizionamento e altre opzioni di posizionamento avanzate. Tuttavia, richiede anche più operazioni manuali rispetto alla specifica del flag --placement-type=COMPACT. Ad esempio, devi creare, eliminare e gestire i criteri delle risorse personalizzate. Assicurati che il numero massimo di istanze VM sia rispettato in tutti i pool di nodi che utilizzano il criterio delle risorse. Se questo limite viene raggiunto mentre alcuni dei tuoi pool di nodi non hanno raggiunto la dimensione massima, l'aggiunta di altri nodi non andrà a buon fine.
Se non specifichi i flag placement-type
e placement-policy
, per impostazione predefinita non sono previsti requisiti per il posizionamento dei nodi.
Creare un criterio di posizionamento compatto in un nuovo cluster
Quando crei un nuovo cluster, puoi specificare un criterio di posizionamento compatto che verrà applicato al pool di nodi predefinito. Per tutti i pool di nodi successivi che crei per il cluster, dovrai specificare se applicare il posizionamento compatto.
Per creare un nuovo cluster a cui è applicato un criterio di posizionamento compatto per il pool di nodi predefinito, utilizza il seguente comando:
gcloud container clusters create CLUSTER_NAME \
--machine-type MACHINE_TYPE \
--placement-type COMPACT \
--max-surge-upgrade 0 \
--max-unavailable-upgrade MAX_UNAVAILABLE
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del nuovo cluster.MACHINE_TYPE
: il tipo di macchina da utilizzare per i nodi, che deve essere un tipo di macchina C2 (ad esempioc2-standard-4
).--placement-type COMPACT
: applica il posizionamento compatto per i nodi nel pool di nodi predefinito.MAX_UNAVAILABLE
: numero massimo di nodi che possono non essere disponibili contemporaneamente durante un upgrade del pool di nodi. Per il posizionamento compatto, consigliamo upgrade rapidi senza picchi per ottimizzare la probabilità di trovare nodi in co-locazione durante gli upgrade.
Creare un criterio di posizionamento compatto in un cluster esistente
In un cluster esistente, puoi creare un pool di nodi a cui è applicata una norma di posizionamento compatto.
Per creare un pool di nodi a cui è applicato un criterio di posizionamento compatto, utilizza il comando seguente:
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
Sostituisci quanto segue:
NODEPOOL_NAME
: il nome del nuovo pool di nodi.MACHINE_TYPE
: il tipo di macchina da utilizzare per i nodi, che deve essere un tipo di macchina C2 (ad esempioc2-standard-4
).CLUSTER_NAME
: il nome del cluster esistente.--placement-type COMPACT
: indica di applicare il posizionamento compatto per i nodi del nuovo pool di nodi.MAX_UNAVAILABLE
: numero massimo di nodi che possono non essere disponibili contemporaneamente durante un upgrade del pool di nodi. Per il posizionamento compatto, consigliamo upgrade rapidi senza picchi per ottimizzare la probabilità di trovare nodi in co-locazione durante gli upgrade.
Creare pool di nodi utilizzando un criterio di posizionamento personalizzato condiviso
Puoi creare manualmente un criterio per le risorse e utilizzarlo in più pool di nodi.
Crea il criterio delle risorse nella regione Google Cloud del cluster:
gcloud compute resource-policies create group-placement POLICY_NAME \ --region REGION \ --collocation collocated
Sostituisci quanto segue:
POLICY_NAME
: il nome del criterio della risorsa.REGION
: la regione del cluster.
Crea un pool di nodi utilizzando il criterio delle risorse personalizzate:
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
Sostituisci quanto segue:
NODEPOOL_NAME
: il nome del nuovo pool di nodi.MACHINE_TYPE
: il tipo di macchina da utilizzare per i nodi, che deve essere un tipo di macchina C2 (ad esempioc2-standard-4
).CLUSTER_NAME
: il nome del cluster esistente.MAX_UNAVAILABLE
: numero massimo di nodi che possono non essere disponibili contemporaneamente durante un upgrade del pool di nodi. Per il posizionamento compatto, consigliamo upgrade rapidi senza picchi per ottimizzare la probabilità di trovare nodi in co-locazione durante gli upgrade.
Utilizzare una prenotazione Compute Engine con un criterio di posizionamento compatto
Le prenotazioni ti aiutano a garantire che l'hardware sia disponibile in una zona specificata, riducendo il rischio di errori di creazione del pool di nodi causati da hardware insufficiente.
Crea una prenotazione che specifichi un criterio di posizionamento compatto:
gcloud compute reservations create RESERVATION_NAME \ --vm-count MACHINE_COUNT \ --machine-type MACHINE_TYPE \ --resource-policies policy=POLICY_NAME \ --zone ZONE \ --require-specific-reservation
Sostituisci quanto segue:
RESERVATION_NAME
: il nome della prenotazione.MACHINE_COUNT
: il numero di nodi riservati.MACHINE_TYPE
: il tipo di macchina da utilizzare per i nodi, che deve essere un tipo di macchina C2. Ad esempio, per utilizzare un tipo di macchina C2 predefinito con 4 vCPU, specificac2-standard-4
.POLICY_NAME
: il nome del criterio della risorsa.ZONE
: la zona in cui creare la prenotazione.
Crea un pool di nodi specificando sia il criterio di posizionamento compatto sia la prenotazione creata nel passaggio precedente:
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
Sostituisci quanto segue:
NODEPOOL_NAME
: il nome del nuovo pool di nodi.MACHINE_TYPE
: il tipo di macchina da utilizzare per i nodi, che deve essere un tipo di macchina C2 (ad esempioc2-standard-4
).CLUSTER_NAME
: il nome del cluster esistente.
Creare un carico di lavoro sui nodi che utilizzano il posizionamento compatto
Per eseguire i carichi di lavoro su nodi dedicati che utilizzano il posizionamento compatto, puoi utilizzare diversi meccanismi Kubernetes, ad esempio l'assegnazione di pod ai nodi e l'impedire la pianificazione di pod indesiderati su un gruppo di nodi.
Nell'esempio seguente, aggiungiamo un'incompatibilità ai nodi dedicati e aggiungiamo una tolleranza e un'affinità corrispondenti ai pod.
Aggiungi un'incompatibilità ai nodi del pool di nodi con un criterio di posizionamento compatto:
kubectl taint nodes -l cloud.google.com/gke-nodepool=NODEPOOL_NAME dedicated-pool=NODEPOOL_NAME:NoSchedule
Nella definizione del carico di lavoro, specifica la tolleranza necessaria e un'affinità con i nodi. Ecco un esempio con un singolo 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
In alcune località, potrebbe non essere possibile creare un pool di nodi di grandi dimensioni utilizzando un criterio di posizionamento compatto. Per limitare le dimensioni di questi pool di nodi a quelle necessarie, ti consigliamo di creare un pool di nodi per ogni carico di lavoro che richiede un posizionamento compatto.
Utilizzare il posizionamento compatto per il provisioning automatico dei nodi
Con il provisioning automatico dei nodi, GKE esegue automaticamente il provisioning dei pool di nodi in base alla domanda di risorse del cluster. Per ulteriori informazioni, consulta Utilizzare il provisioning automatico dei nodi.
Per abilitare il posizionamento compatto per il provisioning automatico dei nodi, aggiungi un nodeSelector
alla specifica del pod come nell'esempio seguente:
apiVersion: v1
kind: Pod
metadata:
# lines omitted for clarity
spec:
nodeSelector:
cloud.google.com/gke-placement-group: PLACEMENT_GROUP_IDENTIFIER
cloud.google.com/machine-family: MACHINE_FAMILY
cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME
# lines omitted for clarity
Sostituisci quanto segue:
PLACEMENT_GROUP_IDENTIFIER
: l'identificatore assegnato al gruppo di pod da eseguire insieme nello stesso gruppo di posizionamento compatto.MACHINE_FAMILY
: il nome della famiglia di macchine. Utilizza una delle famiglie di macchine che supportano il posizionamento compatto. Ti consigliamo di utilizzare le famiglie di macchine C2 o C2D per i carichi di lavoro con requisiti di prestazioni di calcolo e rete.PLACEMENT_POLICY_NAME
: facoltativamente, il nome di un policy di posizionamento compatto di Compute Engine esistente. GKE utilizza il criterio di posizionamento compatto specificato quando il provisioning automatico dei nodi crea un nuovo pool di nodi per raggruppare i pod. Puoi specificare un criterio di posizionamento compatto personalizzato solo nella versione GKE 1.31.1-gke.2010000 e successive.Per istruzioni, consulta Creare un criterio di posizionamento compatto nella documentazione di Compute Engine.
Puoi omettere la chiave cloud.google.com/machine-family
se la configurazione del pod già
definisce un tipo di macchina supportato con il posizionamento compatto. Ad esempio, se la specifica del pod include nvidia.com/gpu
e il cluster è configurato per utilizzare GPU A100, non è necessario includere la chiave cloud.google.com/machine-family
.
L'esempio seguente è una specifica del pod che definisce la richiesta nvidia.com/gpu
e il cluster è configurato per utilizzare le GPU A100. Questo
pod spec
non include la chiave 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
Per scoprire di più, consulta la pagina su come configurare i pod per utilizzare le GPU.
Ottimizzare le dimensioni del gruppo di posizionamenti
Poiché GKE trova il posizionamento migliore per i deployment più piccoli, consigliamo di indicare a GKE di evitare di eseguire tipi diversi di pod nello stesso gruppo di posizionamento. Aggiungi una chiave di tolleranza con la chiave cloud.google.com/gke-placement-group
e l'identificatore del posizionamento compatto che hai definito.
L'esempio seguente è una specifica del pod che definisce una tolleranza del pod con posizionamento compatto:
apiVersion: v1
kind: Pod
metadata:
...
spec:
...
tolerations:
- key: cloud.google.com/gke-placement-group
operator: "Equal"
value: PLACEMENT_GROUP_IDENTIFIER
effect: "NoSchedule"
Per ulteriori informazioni sul provisioning automatico dei nodi con la tolleranza dei pod, consulta Separazione dei carichi di lavoro
Passaggi successivi
- Scopri di più sulla definizione dei criteri di posizionamento delle istanze in Compute Engine.