Questa pagina mostra come indicare a Google Kubernetes Engine (GKE) di eseguire i pod su nodi in zone Google Cloud specifiche utilizzando la topologia a livello di zona. Questo tipo di posizionamento è utile in situazioni come le seguenti:
- I pod devono accedere ai dati archiviati in un disco permanente di Compute Engine a livello di zona.
- I pod devono essere eseguiti insieme ad altre risorse di zona, come le istanze Cloud SQL.
Puoi inoltre utilizzare il posizionamento a livello di zona con routing del traffico sensibile alla topologia per ridurre la latenza tra client e carichi di lavoro. Per maggiori dettagli sul routing del traffico sensibile alla topologia, consulta Routing sensibile alla topologia.
L'uso della topologia a livello di zona per controllare il posizionamento dei pod è un meccanismo Kubernetes avanzato che dovresti utilizzare solo se la tua situazione richiede che i pod vengano eseguiti in zone specifiche. Nella maggior parte degli ambienti di produzione, consigliamo di utilizzare le risorse regionali, ossia l'impostazione predefinita di GKE, quando possibile.
Metodi di posizionamento a livello di zona
La topologia di zona è incorporata in Kubernetes con l'etichetta nodo topology.kubernetes.io/zone: ZONE
. Per indicare a GKE di posizionare un pod in una zona specifica, utilizza uno dei seguenti metodi:
- nodeAffinity: specifica una regola nodeAffinity nella specifica del pod per una o più zone Google Cloud. Questo metodo è più flessibile di nodeSelector perché consente di posizionare i pod in più zone.
- nodeSelector: specifica un nodeSelector nella specifica del pod per una singola zona Google Cloud.
Considerazioni
Il posizionamento dei pod di zona utilizzando la topologia a livello di zona prevede le seguenti considerazioni:
- Il cluster deve trovarsi nella stessa regione Google Cloud delle zone richieste.
- Nei cluster Standard, devi utilizzare il provisioning automatico dei nodi o creare pool di nodi con nodi nelle zone richieste. I cluster Autopilot gestiscono automaticamente questo processo.
- I cluster standard devono essere cluster a livello di regione.
Prezzi
La topologia di zona è una funzionalità di pianificazione di Kubernetes e viene offerta senza costi aggiuntivi in GKE.
Per i dettagli sui prezzi, vedi Prezzi di GKE.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività, installa e initialize gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente eseguendo
gcloud components update
.
- Assicurati di avere un cluster GKE esistente nella stessa regione di Google Cloud delle zone in cui vuoi posizionare i pod. Per creare un nuovo cluster, consulta Creare un cluster Autopilot.
Posiziona i pod in più zone utilizzando nodeAffinity
Kubernetes nodeAffinity offre un meccanismo di controllo flessibile della pianificazione che
supporta più selettori di etichette e operatori logici. Utilizza nodeAffinity se
vuoi consentire l'esecuzione dei pod in un insieme di zone (ad esempio, in
us-central1-a
o us-central1-f
).
Salva il seguente manifest con il nome
multi-zone-affinity.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx-multi-zone template: metadata: labels: app: nginx-multi-zone spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - us-central1-a - us-central1-f
Questo manifest crea un deployment con tre repliche e posiziona i pod in
us-central1-a
ous-central1-f
in base alla disponibilità dei nodi.Assicurati che il cluster si trovi nella regione
us-central1
. Se il cluster si trova in un'altra regione, modifica le zone nel campo dei valori del manifest impostandole su zone valide nella regione del cluster.Crea il deployment:
kubectl create -f multi-zone-affinity.yaml
GKE crea i pod nei nodi di una delle zone specificate. Sullo stesso nodo possono essere eseguiti più pod. Facoltativamente, puoi utilizzare l'anti-affinità dei pod per indicare a GKE di posizionare ogni pod su un nodo separato.
Collocare i pod in un'unica zona utilizzando un nodeSelector
Per posizionare i pod in un'unica zona, utilizza un nodeSelector nella specifica del pod. Un
nodeSelector è equivalente a una regola di NodeAffinity requiredDuringSchedulingIgnoredDuringExecution
in cui è specificata una singola zona.
Salva il seguente manifest con il nome
single-zone-selector.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-singlezone spec: replicas: 3 selector: matchLabels: app: nginx-singlezone template: metadata: labels: app: nginx-singlezone spec: nodeSelector: topology.kubernetes.io/zone: "us-central1-a" containers: - name: nginx image: nginx:latest ports: - containerPort: 80
Questo manifest indica a GKE di posizionare tutte le repliche nel deployment nella zona
us-central1-a
.Crea il deployment:
kubectl create -f single-zone-selector.yaml
Verifica il posizionamento del pod
Per verificare il posizionamento dei pod, elenca i pod e controlla le etichette dei nodi. Più pod possono essere eseguiti in un singolo nodo, quindi potresti non vedere pod distribuiti in più zone se utilizzassi nodeAffinity.
Elenca i tuoi pod:
kubectl get pods -o wide
L'output è un elenco dei pod in esecuzione e il nodo GKE corrispondente.
Descrivi i nodi:
kubectl describe node NODE_NAME | grep "topology.kubernetes.io/zone"
Sostituisci
NODE_NAME
con il nome del nodo.L'output è simile al seguente:
topology.kubernetes.io/zone: us-central1-a
Se vuoi che GKE distribuisca i pod in modo uniforme su più zone per migliorare il failover su più domini in errore, utilizza topologySpreadConstraints.
Passaggi successivi
- Separa i carichi di lavoro GKE l'uno dall'altro
- Mantieni il traffico di rete nella stessa topologia del nodo
- Distribuire i pod su più domini in errore