Controlla gli attributi dei nodi con scalabilità automatica con ComputeClass personalizzate


Questa pagina mostra come controllare l'infrastruttura di calcolo e il comportamento di scalabilità automatica dei cluster Google Kubernetes Engine (GKE) in base alle esigenze specifiche dei tuoi carichi di lavoro utilizzando ComputeClass personalizzate. Dovresti già avere familiarità con il concetto di ComputeClass personalizzate. Per maggiori dettagli, vedi Informazioni su ComputeClass personalizzate.

Questa pagina è destinata agli amministratori delle piattaforme che vogliono definire in modo dichiarativo i profili di scalabilità automatica per i nodi e agli operatori dei cluster che vogliono eseguire i propri carichi di lavoro su ComputeClass specifiche.

Informazioni su ComputeClass personalizzate

Le ComputeClass personalizzate sono risorse personalizzate di Kubernetes che consentono di definire le priorità che GKE deve seguire durante il provisioning dei nodi per eseguire i workload. Puoi utilizzare una ComputeClass personalizzata per eseguire le seguenti operazioni:

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

Per comprendere tutte le opzioni di configurazione e il modo in cui interagiscono tra loro e con la modalità GKE Autopilot e la modalità GKE Standard, consulta Informazioni sulle ComputeClass 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à, installala e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo gcloud components update.

Scenario di esempio per ComputeClasses

Questa pagina presenta uno scenario di esempio per il quale definisci una classe di calcolo personalizzata. In pratica, devi considerare i requisiti dei tuoi workload e della tua organizzazione specifici e definire ComputeClass che soddisfino questi requisiti. Per descrizioni complete di tutte le opzioni per ComputeClasses e per considerazioni speciali, consulta Informazioni su ComputeClasses personalizzate.

Considera il seguente scenario di esempio:

  • Il tuo obiettivo è ottimizzare i costi di esecuzione dei tuoi workload
  • I tuoi carichi di lavoro sono a tolleranza di errore e non richiedono un arresto controllato o un runtime esteso
  • Per un funzionamento ottimale, i tuoi workload richiedono almeno 64 vCPU
  • Sei limitato alla serie di macchine Compute Engine N4

In base allo scenario di esempio, decidi di creare una ComputeClass che faccia quanto segue:

  • Dà la priorità ai nodi spot N4 con almeno 64 vCPU
  • Consente a GKE di eseguire il failover su qualsiasi nodo spot N4, indipendentemente dalla capacità di calcolo
  • Se non sono disponibili nodi spot N4, consente a GKE di utilizzare nodi N4 on demand
  • Indica a GKE di spostare i carichi di lavoro sui nodi Spot non appena sono di nuovo disponibili.

Configura una ComputeClass in modalità Autopilot

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

Salva il seguente manifest come compute-class.yaml:

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

Configura una ComputeClass in modalità Standard

Nei cluster in modalità GKE Standard, definisci una classe di calcolo, dopodiché potresti dover eseguire la configurazione manuale per assicurarti che i pod ComputeClass vengano pianificati come previsto. La configurazione manuale dipende dal fatto che i pool di nodi vengano sottoposti a provisioning automatico, come segue:

Utilizzare ComputeClass con i node pool creati manualmente

Questa sezione mostra come definire una ComputeClass 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: n4
        spot: true
        minCores: 64
      - machineFamily: n4
        spot: true
      - machineFamily: n4
        spot: false
      activeMigration:
        optimizeRulePriority: true
    
  2. Crea un nuovo pool di nodi con scalabilità automatica che utilizza VM spot e associalo a ComputeClass:

    gcloud container node-pools create cost-optimized-pool \
        --location=LOCATION \
        --cluster=CLUSTER_NAME \
        --machine-type=n4-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 tuo cluster esistente.
  3. Crea un nuovo pool di nodi con scalabilità automatica con VM on demand e associalo a ComputeClass:

    gcloud container node-pools create on-demand-pool \
        --location=LOCATION \
        --cluster=CLUSTER_NAME \
        --machine-type=n4-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 ComputeClass 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 ulteriori dettagli su come i node pool creati manualmente interagiscono con le ComputeClass personalizzate, consulta Configurare i node pool creati manualmente per l'utilizzo di ComputeClass.

Utilizzare ComputeClass con i pool di nodi di cui è stato eseguito il provisioning automatico

Questa sezione mostra come definire una ComputeClass in un cluster che utilizza il provisioning automatico dei nodi.

Salva il seguente manifest come compute-class.yaml:

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

Quando esegui il deployment di pod che richiedono questa ComputeClass e devono essere creati nuovi nodi, GKE assegna la priorità alla creazione di nodi nell'ordine degli elementi nel campo priorities. Se necessario, GKE crea nuovi node pool che soddisfano i requisiti hardware di ComputeClass.

Puoi anche specificare un tipo di macchina personalizzata preciso nelle tue priorità. L'utilizzo di tipi di macchine personalizzati richiede GKE 1.33.2-gke.1111000 o versioni successive. Il seguente esempio configura una ComputeClass che assegna la priorità alle VM spot per il tipo di macchina personalizzata n4-custom-8-20480 e esegue il failover alle VM on demand dello stesso tipo se la capacità spot non è disponibile:

apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
  name: custom-machine-type
spec:
  priorities:
  - machineType: n4-custom-8-20480
    spot: true
  - machineType: n4-custom-8-20480
    spot: false
  nodePoolAutoCreation:
    enabled: true

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

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

Per impostazione predefinita, GKE rimuove i nodi sottoutilizzati e riprogramma i tuoi carichi di lavoro su altri nodi disponibili. Puoi personalizzare ulteriormente le soglie e la tempistica dopo la quale un nodo diventa un candidato per la rimozione utilizzando il campo autoscalingPolicy nella definizione di ComputeClass, come nel seguente esempio:

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

Questo esempio fa sì che un nodo diventi un candidato per la rimozione se è sottoutilizzato del 70% della sua capacità di CPU e memoria 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 ComputeClass in un cluster

Dopo aver definito una ComputeClass, eseguine il deployment nel cluster:

kubectl apply -f compute-class.yaml

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

Richiedere un ComputeClass in un workload

Per richiedere una ComputeClass in un carico di lavoro, aggiungi un selettore di nodi per quella classe di calcolo nel 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 workload, GKE aggiunge automaticamente una tolleranza ai pod che corrisponde al taint del nodo per la ComputeClass richiesta. Questa tolleranza garantisce che solo i pod che richiedono la classe di calcolo vengano eseguiti sui nodi ComputeClass.

Aggiorna una ComputeClass di cui è stato eseguito il deployment

Per aggiornare una ComputeClass di cui è stato eseguito il deployment, modifica il manifest YAML per la ComputeClass. Quindi, esegui il deployment del manifest modificato eseguendo questo comando:

kubectl apply -f PATH_TO_FILE

Sostituisci PATH_TO_FILE con il percorso del manifest modificato. Assicurati che il valore nel campo name rimanga invariato.

Quando esegui il deployment della ComputeClass aggiornata, GKE utilizza la configurazione aggiornata per creare nuovi nodi. GKE non modifica i nodi esistenti con la configurazione aggiornata.

Nel tempo, GKE potrebbe spostare i pod esistenti su nodi che utilizzano la configurazione aggiornata se ComputeClass utilizza la migrazione attiva e se i pod esistenti sono idonei alla migrazione.

Passaggi successivi