Questa pagina mostra come indicare a Google Kubernetes Engine (GKE) di eseguire i pod su nodi in zone Google Cloud specifiche utilizzando la topologia zonale. Questo tipo di posizionamento è utile in situazioni come le seguenti:
- I pod devono accedere ai dati archiviati in un disco permanente di Compute Engine zonale.
- I pod devono essere eseguiti insieme ad altre risorse zonali, come le istanze Cloud SQL.
Puoi anche utilizzare il posizionamento zonale con il routing del traffico consapevole della topologia per ridurre la latenza tra i client e i carichi di lavoro. Per maggiori dettagli sul routing del traffico basato sulla topologia, consulta Routing basato sulla topologia.
L'utilizzo della topologia zonale per controllare il posizionamento dei pod è un meccanismo Kubernetes avanzato che devi utilizzare solo se la tua situazione richiede l'esecuzione dei pod in zone specifiche. Nella maggior parte degli ambienti di produzione, ti consigliamo di utilizzare le risorse regionali, che sono quelle predefinite di GKE, se possibile.
Metodi di posizionamento zonale
La topologia zonale è integrata in Kubernetes con l'etichetta del 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 un nodeSelector perché ti 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 zonali che utilizzano la topologia zonale presenta 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 node pool con nodi nelle zone richieste. I cluster Autopilot gestiscano automaticamente questo processo.
- I cluster standard devono essere cluster regionali.
Prezzi
La topologia zonale è una funzionalità di pianificazione di Kubernetes ed è offerta senza costi aggiuntivi in GKE.
Per i dettagli sui prezzi, consulta Prezzi di GKE.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installa e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo
gcloud components update
.
- Assicurati di avere un cluster GKE esistente nella stessa regione 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
L'attributo nodeAffinity di Kubernetes fornisce un meccanismo di controllo della pianificazione flessibile che supporta più selettori di etichette e operatori logici. Utilizza nodeAffinity se
vuoi consentire l'esecuzione dei pod in una di una serie di zone (ad esempio in
us-central1-a
o us-central1-f
).
Salva il seguente manifest come
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 in modo che corrispondano a 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. È possibile eseguire più pod sullo stesso nodo. Se vuoi, puoi utilizzare l'anti-affinità dei pod per indicare a GKE di posizionare ciascun pod su un nodo separato.
Posiziona i pod in una singola 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 requiredDuringSchedulingIgnoredDuringExecution
nodeAffinity con una singola zona specificata.
Salva il seguente manifest come
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 dei pod
Per verificare il posizionamento dei pod, elenca i pod e controlla le etichette dei nodi. È possibile eseguire più pod su un singolo nodo, pertanto potresti non vedere i pod distribuiti su più zone se hai utilizzato nodeAffinity.
Elenca i tuoi pod:
kubectl get pods -o wide
L'output è un elenco di pod in esecuzione e del 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 un failover migliore su più domini in errore, utilizza topologySpreadConstraints.
Passaggi successivi
- Separare i workload GKE l'uno dall'altro
- Mantieni il traffico di rete nella stessa topologia del nodo
- Distribuire i pod su più domini in errore