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

  1. 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 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 in modo che corrispondano a 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. È 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.

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

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

  1. Elenca i tuoi pod:

    kubectl get pods -o wide
    

    L'output è un elenco di pod in esecuzione e del 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 un failover migliore su più domini in errore, utilizza topologySpreadConstraints.

Passaggi successivi