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 le classi di calcolo personalizzate. Dovresti già avere familiarità con il concetto di classi di calcolo personalizzate. Per maggiori dettagli, vedi Informazioni sulle classi di calcolo 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 classi di calcolo specifiche.
Informazioni sulle classi di calcolo personalizzate
Le classi di calcolo personalizzate sono risorse personalizzate di Kubernetes che ti consentono di definire le priorità che GKE deve seguire durante il provisioning dei nodi per eseguire i tuoi carichi di lavoro. Puoi utilizzare una classe di calcolo personalizzata per fare quanto segue:
- 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 classi di calcolo personalizzate.
Prezzi
La risorsa personalizzata ComputeClass
è fornita senza costi aggiuntivi in
GKE. Si applicano le seguenti considerazioni sui prezzi:
Modalità GKE Autopilot: la fatturazione avviene in base ai nodi. Per i dettagli, consulta la sezione Prezzi della modalità Autopilot.
Modalità GKE Standard: consulta Prezzi della modalità Standard.
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
inizializzala. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo
gcloud components update
.
- Assicurati di avere un cluster GKE esistente che esegue la versione 1.30.3-gke.1451000 o successive. Per maggiori informazioni, consulta Creare un cluster Autopilot.
- Se utilizzi un cluster in modalità Standard, assicurati di avere almeno un pool di nodi con la scalabilità automatica abilitata o che il cluster utilizzi il provisioning automatico dei nodi.
Scenario di esempio per le classi di calcolo
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 classi di calcolo che soddisfino questi requisiti. Per descrizioni complete di tutte le opzioni per le classi di calcolo e per considerazioni speciali, consulta Informazioni sulle classi di calcolo personalizzate.
Considera il seguente scenario di esempio:
- Il tuo obiettivo è ottimizzare i costi di esecuzione dei tuoi carichi di lavoro
- 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
- Puoi utilizzare solo la serie di macchine Compute Engine N2
In base allo scenario di esempio, decidi di utilizzare una classe di computing che faccia quanto segue:
- Dà la priorità ai nodi N2 Spot con almeno 64 vCPU
- Consente a GKE di eseguire il failover su qualsiasi nodo spot N2, indipendentemente dalla capacità di calcolo
- Se non sono disponibili nodi spot N2, consente a GKE di utilizzare nodi N2 on demand
- Indica a GKE di spostare i carichi di lavoro sui nodi Spot non appena sono di nuovo disponibili.
Configura una classe di computing in modalità Autopilot
In GKE Autopilot, definisci una classe di computing, la esegui il deployment 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 taint.
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 computing 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 della classe di calcolo vengano pianificati come previsto. La configurazione manuale dipende dal fatto che i pool di nodi vengano sottoposti a provisioning automatico, come segue:
- Node pool gestiti dal provisioning automatico dei nodi: non è richiesta alcuna configurazione manuale. Il provisioning automatico dei nodi esegue automaticamente i passaggi di configurazione della classe di calcolo. Per maggiori dettagli, vedi Provisioning automatico dei nodi e classi di calcolo.
- Pool di nodi creati manualmente: è necessaria la configurazione manuale. Devi aggiungere etichette e taint dei nodi ai pool di nodi creati manualmente per associare i nodi a una classe di computing specifica. Per maggiori dettagli, vedi Configurare i pool di nodi creati manualmente per l'utilizzo della classe di calcolo.
Utilizzare le classi di computing con i node pool creati manualmente
Questa sezione mostra come definire una classe di calcolo in un cluster che utilizza solo pool di nodi creati manualmente.
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
Crea un nuovo pool di nodi con scalabilità automatica che utilizza VM spot e associalo alla classe di computing:
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.
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 nelpool di nodil on-demand-pool
.
Per maggiori dettagli su come i node pool creati manualmente interagiscono con le classi di calcolo personalizzate, vedi Configurare i node pool creati manualmente per l'utilizzo delle classi di calcolo.
Utilizzare le classi di computing con i node pool di cui è stato eseguito il provisioning automatico
Questa sezione mostra come definire una classe di calcolo 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: 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 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 della classe di calcolo.
Per maggiori dettagli su come funziona il provisioning automatico dei nodi con le classi di calcolo personalizzate, consulta Provisioning automatico dei nodi e classi di calcolo.
Personalizza le soglie di scalabilità automatica per il consolidamento dei nodi
Per impostazione predefinita, GKE rimuove i nodi sottoutilizzati e ripianifica i tuoi
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 nel seguente
esempio:
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
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 classe di computing in un cluster
Dopo aver definito una classe di computing, esegui il deployment nel cluster:
kubectl apply -f compute-class.yaml
Questa classe di calcolo è pronta per l'uso 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 computing predefinita per uno spazio dei nomi
Quando imposti una classe di calcolo predefinita per uno spazio dei nomi, GKE utilizza questa classe di calcolo per creare nodi per tutti i pod che distribuisci in questo spazio dei nomi. Se un pod richiede esplicitamente una classe di calcolo diversa, la richiesta a livello di pod override del valore predefinito dello spazio dei nomi.
Per impostare una classe di computing come predefinita per uno spazio dei nomi specifico:
Creare uno spazio dei nomi:
kubectl create namespace cost-optimized-ns
Etichetta lo spazio dei nomi con la classe di computing:
kubectl label namespaces cost-optimized-ns \ cloud.google.com/default-compute-class=cost-optimized
Richiedere una classe di computing in un workload
Per richiedere una classe di calcolo in un carico di lavoro, aggiungi un selettore di nodi per quella classe di calcolo nel manifest.
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"
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 classe di calcolo richiesta. Questa tolleranza garantisce che solo i pod che richiedono la classe di computing vengano eseguiti sui nodi della classe di computing.
Aggiorna una classe di computing di cui è stato eseguito il deployment
Per aggiornare una classe di computing di cui è stato eseguito il deployment, modifica il manifest YAML per 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 classe di calcolo 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 sui nodi che utilizzano la configurazione aggiornata se la classe di calcolo utilizza la migrazione attiva e se i pod esistenti sono idonei alla migrazione.