Posiziona i pod GKE in zone specifiche


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).

  1. 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 o us-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.

  2. 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.

  1. 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.

  2. 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.

  1. Elenca i tuoi pod:

    kubectl get pods -o wide
    

    L'output è un elenco dei pod in esecuzione e il nodo GKE corrispondente.

  2. 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