Controllare gli attributi dei nodi sottoposti a scalabilità automatica con classi di calcolo personalizzate


Questa pagina mostra come controllare l'infrastruttura di calcolo e il comportamento della scalabilità automatica dei cluster Google Kubernetes Engine (GKE) in base alle esigenze specifiche dei tuoi carichi di lavoro utilizzando le classi di calcolo personalizzate. Dovresti già conoscere il concetto di classi di calcolo personalizzate. Per maggiori dettagli, consulta Informazioni sui tipi di calcolo personalizzati.

Questa pagina è rivolta agli amministratori della piattaforma che vogliono definire in modo dichiarativo i profili di scalabilità automatica per i nodi e agli operatori di cluster che vogliono eseguire i propri carichi di lavoro su classi di calcolo specifiche.

Informazioni sulle classi di calcolo personalizzate

Le classi di calcolo personalizzate sono risorse personalizzate Kubernetes che ti consentono di definire le priorità da seguire per GKE durante il provisioning dei nodi per l'esecuzione dei tuoi carichi di lavoro. Puoi utilizzare una classe di calcolo personalizzata per:

  • Fornisci a GKE un insieme di priorità da seguire in sequenza durante il provisioning dei nodi, ciascuno con parametri specifici come una serie di macchine Compute Engine o una capacità di risorse minima
  • Definisci soglie e parametri di scalabilità automatica per rimuovere i nodi sottoutilizzati e consolidare in modo efficiente i carichi di lavoro sulla capacità di calcolo esistente
  • Indica a GKE di sostituire automaticamente le configurazioni dei nodi meno preferite con quelle più preferite per un rendimento ottimale del carico di lavoro

Per comprendere tutte le opzioni di configurazione e come interagiscono tra loro e con la modalità GKE Autopilot e la modalità GKE Standard, consulta Informazioni sulle classi di calcolo personalizzate.

Prezzi

La risorsa personalizzata ComputeClass è fornita senza costi aggiuntivi in GKE. Si applicano le seguenti considerazioni sui prezzi:

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.

Scenario di esempio per le classi di calcolo

Questa pagina presenta uno scenario di esempio per il quale viene definita una classe di calcolo personalizzata. In pratica, devi prendere in considerazione i requisiti specifici della tua organizzazione e dei tuoi carichi di lavoro e definire classi di calcolo che li soddisfino. Per descrizioni complete di tutte le opzioni per i classi di calcolo e per considerazioni speciali, consulta Informazioni sui classi di calcolo personalizzati.

Considera il seguente esempio di scenario:

  • Il tuo obiettivo è ottimizzare i costi di gestione dei tuoi workload
  • I carichi di lavoro sono a tolleranza di errore e non richiedono l'arresto graduale o il tempo di esecuzione esteso
  • I tuoi workload richiedono almeno 64 vCPU per funzionare in modo ottimale
  • Sei limitato alla serie di macchine N2 di Compute Engine

In base allo scenario di esempio, decidi di creare un gruppo di calcolo che:

  • Dà la priorità ai nodi N2 Spot con almeno 64 vCPU
  • Consente a GKE di eseguire il fallback su qualsiasi nodo N2 Spot, indipendentemente dalla capacità di calcolo
  • Se non sono disponibili nodi N2 Spot, consente a GKE di utilizzare i nodi N2 on demand
  • Indica a GKE di spostare i carichi di lavoro sui nodi Spot ogni volta che diventano di nuovo disponibili

Configurare una classe di calcolo in modalità Autopilot

In GKE Autopilot, definisci una classe di calcolo, la esegui nel cluster e la richiedi nei tuoi carichi di lavoro. GKE esegue per te tutti i passaggi di configurazione dei nodi, ad esempio l'applicazione di etichette e contaminazioni.

Salva il seguente manifest come compute-class.yaml:

apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
  name: cost-optimized
spec:
  priorities:
  - machineFamily: n2
    spot: true
    minCores: 64
  - machineFamily: n2
    spot: true
  - machineFamily: n2
    spot: false
  activeMigration:
    optimizeRulePriority: true
  nodePoolAutoCreation:
    enabled: true

Configurare una classe di calcolo in modalità Standard

Nei cluster in modalità GKE Standard, definisci una classe di calcolo, dopodiché potresti dover eseguire una configurazione manuale per assicurarti che i pod della classe di calcolo vengano pianificati come previsto. La configurazione manuale dipende dal fatto che il provisioning dei pool di nodi venga eseguito automaticamente, come segue:

Utilizzare le classi di calcolo con i pool di nodi creati manualmente

Questa sezione mostra come definire una classe di calcolo in un cluster che utilizza solo pool di nodi creati manualmente.

  1. Salva il seguente manifest come compute-class.yaml:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: cost-optimized
    spec:
      priorities:
      - machineFamily: n2
        spot: true
        minCores: 64
      - machineFamily: n2
        spot: false
      activeMigration:
        optimizeRulePriority: true
    
  2. Crea un nuovo pool di nodi con scalabilità automatica che utilizza VM spot e associalo alla classe di calcolo:

    gcloud container node-pools create cost-optimized-pool \
        --location=LOCATION \
        --cluster=CLUSTER_NAME \
        --machine-type=n2-standard-64 \
        --spot \
        --enable-autoscaling \
        --max-nodes=9 \
        --node-labels="cloud.google.com/compute-class=cost-optimized" \
        --node-taints="cloud.google.com/compute-class=cost-optimized:NoSchedule"
    

    Sostituisci quanto segue:

    • LOCATION: la posizione del cluster.
    • CLUSTER_NAME: il nome del cluster esistente.
  3. Crea un nuovo pool di nodi con scalabilità automatica con VM on demand e associalo alla classe di calcolo:

    gcloud container node-pools create on-demand-pool \
        --location=LOCATION \
        --cluster=CLUSTER_NAME \
        --machine-type=n2-standard-64 \
        --enable-autoscaling \
        --max-nodes=9 \
        --num-nodes=0 \
        --node-labels="cloud.google.com/compute-class=cost-optimized" \
        --node-taints="cloud.google.com/compute-class=cost-optimized:NoSchedule"
    

Quando esegui il deployment di pod che richiedono questa classe di calcolo e devono essere creati nuovi nodi, GKE dà la priorità alla creazione di nodi nel pool di nodi cost-optimized-pool. Se non è possibile creare nuovi nodi, GKE crea nodi nel pool di nodi on-demand-pool.

Per maggiori dettagli su come i pool di nodi creati manualmente interagiscono con i classi di calcolo personalizzati, consulta Configurare i pool di nodi creati manualmente per l'utilizzo dei classi di calcolo.

Utilizzare le classi di calcolo con i pool di nodi di cui è stato eseguito il provisioning automatico

Questa sezione mostra come definire una classe di calcolo in un cluster che utilizza l'autoprovisioning dei nodi.

Salva il seguente manifest come compute-class.yaml:

apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
  name: cost-optimized
spec:
  priorities:
  - machineFamily: n2
    spot: true
    minCores: 64
  - machineFamily: n2
    spot: true
  - machineFamily: n2
    spot: false
  activeMigration:
    optimizeRulePriority: true
  nodePoolAutoCreation:
    enabled: true

Quando esegui il deployment di pod che richiedono questa classe di calcolo e devono essere creati nuovi nodi, GKE dà la priorità alla creazione di nodi negli elementi dell'ordine nel campo priorities. Se necessario, GKE crea nuovi pool di nodi chesoddisfano i requisiti hardware della classe di calcolo.

Per ulteriori dettagli su come funziona il provisioning automatico dei nodi con le classi di calcolo personalizzate, consulta Provisioning automatico dei nodi e classi di calcolo.

Personalizzare le soglie di scalabilità automatica per il consolidamento dei nodi

Per impostazione predefinita, GKE rimuove i nodi sottoutilizzati e riprogramma i carichi di lavoro su altri nodi disponibili. Puoi personalizzare ulteriormente le soglie e i tempi dopo i quali un nodo diventa un candidato per la rimozione utilizzando il campo autoscalingPolicy nella definizione della classe di calcolo, come nell'esempio seguente:

apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
  name: cost-optimized
spec:
  priorities:
  - machineFamily: n2
    spot: true
    minCores: 64
  - machineFamily: n2
    spot: true
  - machineFamily: n2
    spot: false
  activeMigration:
    optimizeRulePriority: true
  autoscalingPolicy:
    consolidationDelayMinutes : 5
    consolidationThreshold    : 70

In questo esempio, un nodo diventa un candidato alla rimozione se è sottoutilizzato per il 70% della sua capacità di memoria e CPU disponibile per più di cinque minuti. Per un elenco dei parametri disponibili, consulta Impostare i parametri di scalabilità automatica per il consolidamento dei nodi.

Esegui il deployment di una classe di calcolo in un cluster

Dopo aver definito una classe di calcolo, esegui il deployment nel cluster:

kubectl apply -f compute-class.yaml

Questa classe di calcolo è pronta per essere utilizzata nel cluster. Puoi richiedere la classe di calcolo nelle specifiche del pod o, facoltativamente, impostarla come classe di calcolo predefinita in uno spazio dei nomi specifico.

Impostare una classe di calcolo predefinita per uno spazio dei nomi

Quando imposti una classe di calcolo predefinita per uno spazio dei nomi, GKE la utilizza per creare i nodi per tutti i pod di cui esegui il deployment nello spazio dei nomi. Se un pod richiede esplicitamente una classe di calcolo diversa, la richiesta a livello di pod sostituisce quella predefinita dello spazio dei nomi.

Per impostare una classe di calcolo come predefinita per uno spazio dei nomi specifico:

  1. Crea uno spazio dei nomi:

    kubectl create namespace cost-optimized-ns
    
  2. Etichetta lo spazio dei nomi con la classe di calcolo:

    kubectl label namespaces cost-optimized-ns \
        cloud.google.com/default-compute-class=cost-optimized
    

Richiedere una classe di calcolo in un workload

Per richiedere una classe di calcolo in un carico di lavoro, aggiungi un selettore di nodi per la classe di calcolo nel file manifest.

  1. Salva il seguente manifest come cc-workload.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: custom-workload
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: custom-workload
      template:
        metadata:
          labels:
            app: custom-workload
        spec:
          nodeSelector:
            cloud.google.com/compute-class: cost-optimized
          containers:
          - name: test
            image: gcr.io/google_containers/pause
            resources:
              requests:
                cpu: 1.5
                memory: "4Gi"
    
  2. Esegui il deployment del carico di lavoro:

    kubectl apply -f cc-workload.yaml
    

Quando esegui il deployment di questo carico di lavoro, GKE aggiunge automaticamente ai pod una tolleranza che corrisponde al taint del nodo per la classe di calcolo richiesta. Questa tolleranza garantisce che solo i pod che richiedono la classe di calcolo vengano eseguiti sui nodi della classe di calcolo.

Passaggi successivi