Applica le classi di computing ai pod per impostazione predefinita


Questa pagina mostra come applicare le classi di calcolo per impostazione predefinita ai pod Google Kubernetes Engine (GKE) che non selezionano esplicitamente una classe di calcolo. Questa pagina contiene le istruzioni per impostare una classe di calcolo come predefinita in un namespace e per un intero cluster. Queste istruzioni sono destinate agli amministratori dei cluster che vogliono ridurre l'overhead manuale causato dalla configurazione dei singoli nodi e carichi di lavoro.

Prima di leggere questa pagina, acquisisci familiarità con le classi di computing personalizzate.

Informazioni sulle classi di computing predefinite

Puoi configurare i cluster GKE o spazi dei nomi specifici in modo che abbiano una classe di calcolo predefinita. La classe predefinita che configuri si applica a qualsiasi pod nel cluster o nello spazio dei nomi che non seleziona una classe di calcolo diversa. Quando esegui il deployment di un pod che non seleziona una classe di calcolo, GKE applica le classi di calcolo predefinite nel seguente ordine:

  1. Se lo spazio dei nomi ha una classe di calcolo predefinita, GKE modifica la specifica del pod per selezionare quella classe di calcolo.
  2. Se lo spazio dei nomi non ha una classe di calcolo predefinita, viene applicata la classe predefinita a livello di cluster. GKE non modifica la specifica del pod.

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à, installala e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo gcloud components update.

Requisiti

  • Per impostare una classe di calcolo come predefinita a livello di cluster, il cluster deve eseguire GKE versione 1.33.1-gke.1744000 o successive.
  • Per impostare una classe di computing come predefinita a livello di spazio dei nomi solo per i pod non DaemonSet, il cluster deve eseguire GKE versione 1.33.1-gke.1788000 o successive.

Ruoli e autorizzazioni richiesti

Per ottenere le autorizzazioni necessarie per configurare le classi di calcolo predefinite a livello di cluster o spazio dei nomi, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto Google Cloud :

Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per configurare le classi di computing predefinite a livello di cluster o spazio dei nomi. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per configurare e gestire le classi di computing predefinite a livello di cluster o spazio dei nomi sono necessarie le seguenti autorizzazioni:

  • container.customResourceDefinitions.create
  • container.customResourceDefinitions.update
  • container.customResourceDefinitions.get
  • container.customResourceDefinitions.list
  • container.namespaces.get
  • container.namespaces.list
  • container.pods.get
  • container.nodes.get
  • container.nodes.list
  • container.deployments.create
  • container.deployments.get
  • Aggiungi etichette agli spazi dei nomi: container.namespaces.update
  • Abilita la classe di computing predefinita a livello di cluster: container.clusters.update

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Configurare una classe di computing predefinita per uno spazio dei nomi

Puoi annotare qualsiasi spazio dei nomi Kubernetes nel tuo cluster con il nome di una classe di calcolo da utilizzare come predefinita. Se un pod di cui è stato eseguito il deployment in questo spazio dei nomi non seleziona già una classe di calcolo, GKE modifica la specifica del pod per selezionare la classe predefinita nello spazio dei nomi. Puoi impostare qualsiasi classe di calcolo personalizzata o integrata come predefinita.

  • Per applicare una classe di calcolo a tutti i pod in uno spazio dei nomi per impostazione predefinita, aggiungi l'etichetta cloud.google.com/default-compute-class a questo spazio dei nomi:

    kubectl label namespaces NAMESPACE_NAME \
        cloud.google.com/default-compute-class=COMPUTECLASS_NAME
    

    Sostituisci quanto segue:

    • NAMESPACE_NAME: il nome dello spazio dei nomi da aggiornare
    • COMPUTECLASS_NAME: il nome della classe di computing da impostare come predefinita per lo spazio dei nomi.

    Se il comando non va a buon fine e viene visualizzato il seguente messaggio di errore, lo spazio dei nomi ha già una classe di calcolo predefinita:

    error: 'cloud.google.com/default-compute-class' already has a value, and --overwrite is false
    

    Per risolvere questo errore, aggiorna la classe di calcolo predefinita per lo spazio dei nomi.

  • Per applicare una classe di calcolo a tutti i pod non DaemonSet in uno spazio dei nomi per impostazione predefinita, aggiungi l'etichetta cloud.google.com/default-compute-class-non-daemonset a questo spazio dei nomi:

    kubectl label namespaces NAMESPACE_NAME \
        cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME
    

    Se il comando non va a buon fine e viene visualizzato il seguente messaggio di errore, lo spazio dei nomi ha già una classe di calcolo predefinita per i pod non DaemonSet:

    error: 'cloud.google.com/default-compute-class-non-daemonset' already has a value, and --overwrite is false
    

    Per risolvere questo errore, aggiorna la classe di calcolo predefinita per lo spazio dei nomi.

Aggiorna la classe di computing predefinita esistente in uno spazio dei nomi

Per sovrascrivere la classe di calcolo predefinita esistente per uno spazio dei nomi, esegui uno dei seguenti comandi:

  • Aggiorna la classe di computing predefinita per tutti i pod nello spazio dei nomi:

    kubectl label namespaces NAMESPACE_NAME   \
        cloud.google.com/default-compute-class=COMPUTECLASS_NAME \
        --overwrite
    

    Sostituisci quanto segue:

    • NAMESPACE_NAME: il nome dello spazio dei nomi da aggiornare
    • COMPUTECLASS_NAME: il nome della classe di computing da impostare come nuova predefinita per lo spazio dei nomi.
  • Sovrascrivi la classe di computing predefinita per i pod non DaemonSet nello spazio dei nomi:

    kubectl label namespaces NAMESPACE_NAME \
        cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME \
        --overwrite
    

Configurare una classe di computing predefinita per un cluster

Questa sezione mostra come impostare una classe di calcolo come predefinita per il cluster. Per le classi di calcolo predefinite a livello di cluster, non specificare manualmente i taint dei nodi e le etichette dei nodi per i node pool esistenti nel cluster. GKE non esegue lo scale up dei node pool con taint dei nodi per le classi di calcolo. Se aggiungi manualmente un'etichetta per la classe di calcolo default, GKE può scalare il pool di nodi. Tuttavia, questa configurazione manuale non è necessaria per utilizzare una classe di calcolo predefinita a livello di cluster.

  1. Per abilitare l'impostazione di una classe di computing predefinita a livello di cluster per un cluster, esegui il comando gcloud container clusters update con il flag --enable-default-compute-class:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-default-compute-class
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del tuo cluster.
    • CONTROL_PLANE_LOCATION: la posizione del control plane del cluster, ad esempio us-central1.

    Puoi anche specificare questo flag quando crei un cluster Autopilot o Standard.

  2. Salva il seguente manifest, che definisce un ComputeClass denominato default:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: default
    spec:
      priorities:
      - machineFamily: n4
      - machineFamily: n2
      whenUnsatisfiable: ScaleUpAnyway
      nodePoolAutoCreation:
        enabled: true
    

    Questo manifest di esempio richiede nodi che utilizzano istanze N4. Se le istanze N4 non sono disponibili, la classe di calcolo richiede istanze N2. Puoi configurare la classe di calcolo default con uno qualsiasi dei campi disponibili nella CustomResourceDefinition ComputeClass.

  3. Applica il manifest al cluster:

    kubectl apply -f PATH_TO_MANIFEST
    

    Sostituisci PATH_TO_MANIFEST con il percorso del manifest per la classe di calcolo.

Dopo aver impostato una classe di calcolo predefinita a livello di cluster, GKE scala i node pool che soddisfano entrambi i seguenti requisiti:

  • La configurazione del nodo è la stessa della configurazione della classe di calcolo default.
  • Il pool di nodi non ha taint o etichette per una classe di calcolo diversa. GKE può scalare i pool di nodi con un taint e un'etichetta per la classe di calcolo default.

Ad esempio, se la classe di calcolo default specifica la serie di macchine N4, GKE può scalare un pool di nodi esistente che utilizza istanze N4 e non ha taint o etichette per una classe di calcolo diversa.

Verifica il comportamento della classe di computing predefinita

Per verificare se la classe di calcolo predefinita che hai impostato per uno spazio dei nomi o per un cluster funziona come previsto:

  1. Esamina il seguente esempio di deployment:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: helloweb
      labels:
        app: hello
    spec:
      selector:
        matchLabels:
          app: hello
          tier: web
      template:
        metadata:
          labels:
            app: hello
            tier: web
        spec:
          containers:
          - name: hello-app
            image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
            ports:
            - containerPort: 8080
            resources:
              requests:
                cpu: 200m

    Questo deployment non richiede esplicitamente una classe di computing.

  2. Crea il deployment:

    kubectl apply --namespace=NAMESPACE_NAME \
        -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/refs/heads/main/quickstarts/hello-app/manifests/helloweb-deployment.yaml
    

    Sostituisci NAMESPACE_NAME con uno dei seguenti valori, a seconda di ciò che vuoi verificare:

    • Il nome di uno spazio dei nomi con una classe di calcolo predefinita.
    • Il nome di uno spazio dei nomi che non ha una classe di calcolo predefinita.

    GKE potrebbe impiegare un po' di tempo per creare nuovi nodi per eseguire i pod.

  3. Identifica i nodi che eseguono i pod del deployment di esempio:

    kubectl get pods --namespace=NAMESPACE_NAME \
        --selector=app=hello -o=wide
    

    L'output è simile al seguente:

    NAME                        READY   STATUS    RESTARTS   AGE     IP          NODE                                                  NOMINATED NODE   READINESS GATES
    helloweb-7795fbf856-58n5l   1/1     Running   0          9m21s   10.52.2.3   gke-cluster-1-nap-n2-highcpu-2-3muqi8-f213e529-rx7d   <none>           <none>
    
  4. Recupera le etichette del nodo:

    kubectl get node NODE_NAME --show-labels \
        | grep "cloud.google.com/compute-class"
    

    Sostituisci NODE_NAME con il nome del nodo dall'output del passaggio precedente.

    L'output è simile al seguente:

    NODE_NAME   Ready    <none>   22m   v1.32.4-gke.1236007
    # lines are omitted from this output
    cloud.google.com/compute-class=COMPUTECLASS_NAME,cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd
    

    Il valore in COMPUTECLASS_NAME è uno dei seguenti:

    • Classe di computing predefinita a livello di cluster: default per i nodi creati da GKE Autopilot o dal provisioning automatico dei nodi. I nodi nei pool di nodi esistenti creati manualmente potrebbero non avere l'etichetta cloud.google.com/compute-class.
    • Classe di calcolo predefinita a livello di spazio dei nomi: il nome della classe di calcolo che hai configurato come predefinita per lo spazio dei nomi.

Disattiva la classe di computing predefinita

Per disattivare la classe di calcolo predefinita in uno spazio dei nomi o in un cluster, esegui una delle seguenti operazioni:

  • Per disattivare la classe di calcolo predefinita a livello di spazio dei nomi per tutti i pod, rimuovi l'etichetta cloud.google.com/default-compute-class dallo spazio dei nomi:

    kubectl label namespaces NAMESPACE_NAME \
      cloud.google.com/default-compute-class-
    

    Il carattere - alla fine della chiave dell'etichetta rimuove tutte le etichette con quella chiave dall'oggetto Namespace nell'API Kubernetes.

  • Per disattivare la classe di calcolo predefinita a livello di spazio dei nomi per i pod non DaemonSet, rimuovi l'etichetta cloud.google.com/default-compute-class-non-daemonset dallo spazio dei nomi:

    kubectl label namespaces NAMESPACE_NAME \
      cloud.google.com/default-compute-class-non-daemonset-
    
  • Per disattivare la classe di calcolo predefinita a livello di cluster, utilizza il comando gcloud container clusters update con il flag --no-enable-default-compute-class:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --no-enable-default-compute-class
    

Passaggi successivi