Questa pagina mostra come indicare a Google Kubernetes Engine (GKE) di eseguire i pod nodi in zone specifiche di Google Cloud utilizzando la topologia di zona. Questo tipo di posizionamento è utile in situazioni quali:
- I pod devono accedere ai dati archiviati in un disco permanente di Compute Engine zonale.
- I pod devono essere eseguiti insieme ad altre risorse di zona, come le istanze Cloud SQL.
Puoi anche utilizzare il posizionamento a livello di zona con il routing del traffico sensibile alla topologia per ridurre la latenza tra client e carichi di lavoro. Per maggiori dettagli su il routing del traffico sensibile alla topologia, vedi Routing sensibile alla topologia.
L'uso della topologia a livello di zona per controllare il posizionamento dei pod è un'esperienza Kubernetes che dovresti usare solo se la tua situazione richiede l'esecuzione dei pod in determinate zone. 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 in la specifica dei tuoi 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 nel campo Specifica dei pod per una singola zona Google Cloud.
Considerazioni
Il posizionamento di pod di zona con 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. Cluster Autopilot gestire automaticamente questo processo.
- I cluster standard devono essere cluster a livello di regione.
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 attività:
- 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 nello stesso la regione Google Cloud indicata come zone in cui posizionare i pod. Per creare un nuovo cluster, consulta Crea un cluster Autopilot.
Collocare 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 un'altra regione, modifica le zone nel campo dei valori del manifest in di 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. Più pod possono essere eseguiti 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 un'unica zona utilizzando un nodeSelector
Per posizionare i pod in un'unica zona, utilizza un nodeSelector nella specifica del pod. R
nodeSelector è equivalente a requiredDuringSchedulingIgnoredDuringExecution
regola nodeAffinity in cui è specificata una singola zona.
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 del 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 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