Questa pagina descrive come utilizzare le classi di calcolo personalizzate per controllare le proprietà dei nodi di cui Google Kubernetes Engine (GKE) esegue il provisioning durante l'autoscaling del cluster. Questo documento è rivolto agli amministratori della piattaforma che vogliono definire in modo dichiarativo i profili di scalabilità automatica per i nodi, in modo che carichi di lavoro specifici vengano eseguiti su hardware che soddisfa i loro requisiti.
Panoramica delle classi di calcolo
In GKE, una classe di calcolo è un profilo costituito da un insieme di attributi dei nodi che GKE utilizza per eseguire il provisioning dei nodi su cui vengono eseguiti i carichi di lavoro. Le classi di calcolo possono avere come target ottimizzazioni specifiche, come il provisioning di nodi ad alte prestazioni o l'assegnazione della priorità alle configurazioni ottimizzate per i costi per ridurre i costi di gestione. Le classi di calcolo personalizzate ti consentono di definire profili che GKE utilizza poi per eseguire il provisioning di nodi che soddisfano strettamente i requisiti di carichi di lavoro specifici.
Le classi di calcolo personalizzate sono disponibili per l'utilizzo nella modalità GKE Autopilot e nella modalità GKE Standard nella versione 1.30.3-gke.1451000 e successive e offrono un approccio dichiarativo per definire gli attributi dei nodi e le priorità di scalabilità automatica. Per impostazione predefinita, le classi di calcolo personalizzate sono disponibili per la configurazione e l'utilizzo in tutti i cluster GKE idonei.
Vantaggi delle classi di calcolo personalizzate
Le classi di calcolo personalizzate offrono i seguenti vantaggi:
- Priorità di calcolo di riserva: definisci una gerarchia di configurazioni dei nodi in ogni classe di calcolo per consentire a GKE di dare la priorità. Se la configurazione più preferita non è disponibile, GKE sceglie automaticamente la configurazione successiva nella gerarchia. Questo modello di riserva garantisce che anche quando le risorse di calcolo non sono disponibili, i carichi di lavoro vengano comunque eseguiti su hardware ottimizzato con ritardi di pianificazione minimi.
- Controllo granulare della scalabilità automatica: definisci le configurazioni dei nodi più adatte per carichi di lavoro specifici. GKE dà la priorità a queste configurazioni quando crea i nodi durante la scalabilità.
- Configurazione dell'infrastruttura dichiarativa: adotta un approccio dichiarativo alla gestione dell'infrastruttura in modo che GKE crei automaticamente i nodi in base ai requisiti specifici del tuo carico di lavoro.
- Migrazione attiva: se nella tua località diventano disponibili risorse di calcolo per una configurazione della macchina più preferita, GKE esegue automaticamente la migrazione dei tuoi workload a nuovi nodi che utilizzano la configurazione preferita.
- Ottimizzazione dei costi: dai la priorità ai tipi di nodi a basso costo, come le VM spot, per ridurre le spese del cluster.
- Classi di calcolo predefinite per gli spazi dei nomi: imposta una classe di calcolo predefinita in ogni spazio dei nomi Kubernetes in modo che i carichi di lavoro in quel determinato spazio dei nomi vengano eseguiti su hardware ottimizzato anche se non richiedono una classe di calcolo specifica.
- Soglie di consolidamento dei nodi personalizzate: definisci soglie di utilizzo delle risorse personalizzate per i nodi. Se l'utilizzo delle risorse di un nodo specifico scende al di sotto della soglia, GKE tenta di consolidare i carichi di lavoro in un nodo simile e disponibile e riduce il numero di nodi sottoutilizzati.
Casi d'uso per le classi di calcolo personalizzate
Valuta la possibilità di utilizzare classi di calcolo personalizzate in scenari come i seguenti:
- Vuoi eseguire i tuoi carichi di lavoro AI/ML su configurazioni GPU specifiche.
- Vuoi impostare configurazioni hardware predefinite per i carichi di lavoro eseguiti da team specifici, eliminando il sovraccarico per gli operatori delle applicazioni.
- Esegui carichi di lavoro che hanno un rendimento ottimale su configurazioni hardware o su serie di macchine Compute Engine specifiche.
- Vuoi dichiarare configurazioni hardware che soddisfino requisiti aziendali specifici, ad esempio alte prestazioni, ottimizzazione dei costi o alta disponibilità.
- Vuoi che GKE torni gerarchicamente all'utilizzo di configurazioni hardware specifiche durante la mancata disponibilità delle risorse di calcolo, in modo che i tuoi carichi di lavoro vengano sempre eseguiti su macchine adatte ai loro requisiti.
- Vuoi decidere in modo centralizzato le configurazioni ottimali per il parco risorse della tua azienda, in modo che i costi siano più prevedibili e i workload vengano eseguiti in modo più affidabile.
- Vuoi specificare in modo centralizzato quali prenotazioni di capacità di Compute Engine deve utilizzare GKE per eseguire il provisioning di nuovi nodi per carichi di lavoro specifici.
Come funzionano i classi di calcolo personalizzati
Le classi di calcolo personalizzate sono risorse personalizzate Kubernetes che eseguono il provisioning dell'infrastruttura Google Cloud. Definisci un oggetto ComputeClass
nel
cluster, quindi richiedi la classe di calcolo nei carichi di lavoro o impostala come predefinita per uno spazio dei nomi Kubernetes. Quando esegui il deployment di un carico di lavoro che richiede la classe di calcolo, GKE tenta di posizionare i pod su nodi che soddisfano i requisiti della classe di calcolo.
Per assicurarti che le classi di calcolo personalizzate siano ottimizzate per il tuo parco risorse, considera le seguenti linee guida:
- Comprendi i requisiti di calcolo del tuo parco, inclusi eventuali requisiti hardware specifici dell'applicazione.
- Scegli un tema che guidi la progettazione di ogni classe di calcolo. Ad esempio, una classe di calcolo ottimizzata per le prestazioni potrebbe avere una strategia di riserva che utilizza solo tipi di macchine con potenza CPU elevata.
- Scegli la famiglia e la serie di macchine Compute Engine più adatte ai tuoi carichi di lavoro. Per maggiori dettagli, consulta la guida alle risorse e al confronto per le famiglie di macchine.
- Pianifica una strategia di riserva all'interno di ogni classe di calcolo in modo che i workload vengano sempre eseguiti su nodi che utilizzano configurazioni di macchine simili. Ad esempio, se la serie di macchine N4 non è disponibile, puoi utilizzare le macchine N2.
Visualizza la definizione completa della risorsa personalizzata
Per visualizzare la definizione completa della risorsa personalizzata (CRD) per la risorsa personalizzata ComputeClass
, esegui il seguente comando:
kubectl describe crd computeclasses.cloud.google.com
L'output mostra l'intero CRD, inclusi tutti i campi supportati e le relazioni tra i campi. Per comprendere meglio le classi di calcolo personalizzate, consulta questa definizione mentre leggi il documento.
Pianificare una classe di calcolo personalizzata
Per pianificare, implementare e utilizzare efficacemente una classe di calcolo personalizzata nel cluster, segui questi passaggi:
- Scegli le priorità di calcolo di riserva: definisci una serie di regole che regolano le proprietà dei nodi creati da GKE per la classe di calcolo.
- Configura i pool di nodi e le classi di calcolo GKE Standard: per i cluster in modalità Standard, esegui i passaggi di configurazione richiesti per utilizzare la classe di calcolo con i pool di nodi.
- Definire il comportamento di scalabilità quando non vengono applicate regole di priorità: se vuoi, puoi indicare a GKE cosa fare se non è possibile eseguire il provisioning dei nodi che soddisfano le tue regole di priorità.
- Imposta i parametri di scalabilità automatica per il consolidamento dei nodi: indica a GKE quando consolidare i carichi di lavoro e rimuovere i nodi sottoutilizzati.
- Configura la migrazione attiva a nodi di priorità più elevata: facoltativamente, puoi chiedere a GKE di spostare i carichi di lavoro sui nodi più preferiti man mano che l'hardware diventa disponibile.
- Utilizza le prenotazioni Compute Engine: facoltativamente, invita GKE a utilizzare le prenotazioni zonali Compute Engine esistenti quando crei nuovi nodi.
Scegli le priorità di calcolo di riserva
Il vantaggio principale dell'utilizzo di una classe di calcolo personalizzata è avere il controllo sulla strategia di riserva quando i tuoi nodi preferiti non sono disponibili a causa di fattori come l'esaurimento delle risorse e le limitazioni di quota.
Puoi creare una strategia di riserva definendo un elenco di regole di priorità nella classe di calcolo personalizzata. Quando un cluster deve essere scalato, GKE dà la priorità alla creazione di nodi corrispondenti alla prima regola di priorità. Se GKE non riesce a creare questi nodi, passa alla regola di priorità successiva, ripetendo questa procedura finché GKE non esegue correttamente l'aumento di scala del cluster o non esaurisce tutte le regole. Se tutte le regole sono esaurite, GKE crea i nodi in base al comportamento predefinito o specificato descritto in Definire il comportamento di scalabilità quando non vengono applicate regole di priorità.
Regole di priorità
Definisci le regole di priorità nel campo spec.priorities
della risorsa personalizzata ComputeClass
. Ogni regola nel campo priorities
descrive le proprietà dei nodi da eseguire il provisioning. GKE elabora il campo priorities
in ordine, il che significa che il primo elemento del campo ha la priorità più alta per il provisioning dei nodi.
A seconda del tipo di regola di priorità, puoi specificare proprietà aggiuntive della macchina, come VM spot o capacità CPU minima, da utilizzare da GKE durante il provisioning dei nodi. Il campo priorities
supporta i seguenti tipi di regole di priorità:
machineFamily
: definisce i nodi utilizzando una serie di macchine Compute Engine, ad esempion2
oc3
.machineType
: definisce i nodi utilizzando un tipo di macchina Compute Engine predefinito, ad esempion2-standard-4
.nodepools
: nei cluster GKE Standard, fornisce un elenco di pool di nodi creati manualmente associati alla classe di calcolo in cui GKE deve eseguire il provisioning dei nodi.
Tipo di regola machineFamily
Il campo machineFamily
accetta una
serie di macchine Compute Engine come
n2
o c3
. Se non specificato, il valore predefinito è e2
. Puoi utilizzare i seguenti campi insieme al tipo di regola machineFamily
:
spot
: VM spot. Il valore predefinito èfalse
.minCores
: numero minimo di vCPU per nodo. Il valore predefinito è0
.minMemoryGb
: memoria minima per nodo. Il valore predefinito è0
.storage.bootDiskKMSKey
: percorso della chiave Cloud Key Management Service da utilizzare per la crittografia del disco di avvio.
L'esempio seguente mostra la regola di priorità machineFamily
:
priorities:
- machineFamily: n2
spot: true
minCores: 16
minMemoryGb: 64
storage:
bootDiskKMSKey: projects/example/locations/us-central1/keyRings/example/cryptoKeys/key-1
Tipo di regola machineType
Il campo machineType
accetta un tipo di macchina predefinito di Compute Engine, ad esempio n2-standard-32
. Il tipo di macchina deve supportare tutte le GPU specificate.
Puoi utilizzare i seguenti campi insieme al tipo di regola machineType
:
spot
: utilizza le VM spot. Il valore predefinito èfalse
.storage
: configura lo spazio di archiviazione del nodo.storage.bootDiskType
: tipo di disco di avvio.storage.bootDiskKMSKey
: percorso della chiave Cloud KMS da utilizzare per la crittografia del disco di avvio.storage.bootDiskSize
: dimensioni in GB del disco di avvio del nodo.storage.localSSDCount
: numero di SSD locali da collegare al nodo. Se specificato, deve essere almeno1
.
gpu
: configura le GPU.gpu.type
: un tipo di GPU, ad esempionvidia-l4
. Per maggiori dettagli, consulta Eseguire il deployment dei carichi di lavoro GPU in Autopilot.gpu.count
: il numero di GPU da collegare. Per le quantità supportate per tipo di GPU, consulta Quantità di GPU supportate.
L'esempio seguente mostra una regola machineType
per i tipi di macchine n2-standard-32
:
priorities:
- machineType: n2-standard-32
spot: true
storage:
bootDiskType: pd-balanced
bootDiskSize: 250
localSSDCount: 2
bootDiskKMSKey: projects/example/locations/us-central1/keyRings/example/cryptoKeys/key-1
L'esempio seguente mostra una regola machineType
per le GPU:
priorities:
- machineType: g2-standard-16
spot: false
gpu:
type: nvidia-l4
count: 1
Tipo di regola nodepools
Il campo nodepools
accetta un elenco di pool di nodi esistenti su cui GKE tenta di creare pod in attesa. GKE non elabora i valori in questo campo in ordine. Non puoi specificare altre proprietà della macchina accanto a questo campo nello stesso elemento della regola di priorità. Questo campo è supportato solo in modalità GKE Standard. Per maggiori dettagli sull'utilizzo, consulta Scegliere come target pool di nodi specifici in una definizione di classe di calcolo.
In che modo GKE crea i nodi utilizzando le regole di priorità
Quando esegui il deployment di un carico di lavoro che richiede una classe di calcolo e occorre un nuovo nodo, GKE elabora l'elenco di regole nel campo priorities
della specifica ComputeClass
in ordine.
Ad esempio, considera la seguente specifica:
spec:
...
priorities:
- machineFamily: n2
spot: true
minCores: 64
- machineFamily: n2
spot: true
- machineFamily: n2
spot: false
Quando esegui il deployment di un carico di lavoro che richiede una classe di calcolo con queste regole di priorità, GKE abbina i nodi come segue:
- GKE posiziona i pod su tutti i nodi esistenti associati a questa classe di calcolo.
- Se i nodi esistenti non possono ospitare i pod, GKE esegue il provisioning di nuovi nodi che utilizzano la serie di macchine N2, sono VM a spot e dispongono di almeno 64 vCPU.
- Se nella regione non sono disponibili VM N2 Spot con almeno 64 vCPU, GKE esegue il provisioning di nuovi nodi che utilizzano VM N2 Spot in grado di adattarsi ai pod, indipendentemente dal numero di core.
- Se nella regione non sono disponibili VM N2 spot, GKE esegue il provisioning di nuove VM N2 on demand.
- Se nessuna delle regole precedenti può essere soddisfatta, GKE segue la logica descritta nella sezione Definire il comportamento di scalabilità quando non vengono applicate regole di priorità.
Pool di nodi e classi di calcolo GKE Standard
Se utilizzi la modalità GKE Standard, potresti dover eseguire una configurazione manuale per assicurarti che la pianificazione dei pod della classe di calcolo avvenga come previsto.
- 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, consulta Provisioning automatico dei nodi e classi di calcolo.
- Pool di nodi creati manualmente: è necessaria la configurazione manuale. Devi aggiungere etichette e contaminazioni dei nodi ai pool di nodi creati manualmente per associare i nodi a una classe di calcolo specifica. Per maggiori dettagli, consulta Configurare pool di nodi creati manualmente per l'utilizzo della classe di calcolo.
Configurare i pool di nodi creati manualmente per l'utilizzo della classe di calcolo
Se i tuoi cluster GKE Standard hanno pool di nodi creati manualmente senza il provisioning automatico dei nodi, devi configurarli per associarli a classi di calcolo specifiche. GKE pianifica solo i pod che richiedono una classe di calcolo specifica sui nodi dei pool di nodi associati a quella classe di calcolo. I pool di nodi in modalità GKE Autopilot e GKE Standard creati tramite il provisioning automatico dei nodi eseguono automaticamente questa configurazione per te.
Per associare un pool di nodi creato manualmente a una classe di calcolo, aggiungi etichette dei nodi e contaminazioni dei nodi al pool di nodi durante la creazione o durante un aggiornamento specificando il flag --node-labels
e il flag --node-taints
, come segue:
- Etichetta del nodo:
cloud.google.com/compute-class=COMPUTE_CLASS
- Contaminati:
cloud.google.com/compute-class=COMPUTE_CLASS:NoSchedule
In questi attributi, COMPUTE_CLASS
è il nome della classe di calcolo personalizzata.
Ad esempio, il seguente comando aggiorna un pool di nodi esistente e lo associa alla classe di calcolo dev-class
:
gcloud container node-pools update dev-pool \
--cluster=example-cluster \
--node-labels="cloud.google.com/compute-class=dev-class" \
--node-taints="cloud.google.com/compute-class=dev-class:NoSchedule"
Puoi associare ogni pool di nodi del cluster a una classe di calcolo personalizzata. I pod pianificati da GKE su questi node pool creati manualmente attivano la creazione di nodi al loro interno solo durante gli eventi di scalabilità automatica.
Provisioning automatico dei nodi e classi di calcolo
Puoi utilizzare il provisioning automatico dei nodi con una classe di calcolo personalizzata per consentire a GKE di creare ed eliminare automaticamente i node pool in base alle tue regole di priorità.
Per utilizzare il provisioning automatico dei nodi con una classe di calcolo, devi eseguire i seguenti passaggi:
- Assicurati che il provisioning automatico dei nodi sia abilitato nel cluster.
- Aggiungi il campo
nodePoolAutoCreation
con il valoreenabled: true
alla specificaComputeClass
.
GKE può quindi posizionare i pod che utilizzano classi di calcolo che configurano il provisioning automatico dei nodi nei nuovi pool di nodi. GKE decide se eseguire lo scale up di un pool di nodi esistente o crearne uno nuovo in base a fattori come le dimensioni dei cluster e i requisiti dei pod. I pod con classi di calcolo che non configurano il provisioning automatico dei nodi continuano a eseguire lo scale up solo dei node pool esistenti.
Puoi utilizzare classi di calcolo che interagiscono con l'autoprovisioning dei nodi insieme a classi di calcolo che interagiscono con i pool di nodi creati manualmente nello stesso cluster.
Considera le seguenti interazioni con il provisioning automatico dei nodi:
- Non puoi utilizzare i selettori di nodi Famiglia di macchine o VM Spot perché sono in conflitto con il comportamento della classe di calcolo. GKE rifiuta tutti i pod che richiedono una classe di calcolo e anche VM spot o serie di macchine specifiche.
- Puoi configurare il provisioning automatico dei nodi per le classi di calcolo che utilizzano il campo
nodepools
per fare riferimento ai pool di nodi esistenti. Il provisioning automatico dei nodi elabora le priorità in ordine e tenta di eseguire lo scale up dei pool di nodi esistenti per posizionare i pod.
Prendi in considerazione il seguente esempio di un cluster con pool di nodi creati manualmente e provisioning automatico dei nodi:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: my-class
spec:
priorities:
- nodepools: [manually-created-pool]
- machineFamily: n2
- machineFamily: n2d
nodePoolAutoCreation:
enabled: true
In questo esempio, GKE tenta di eseguire le seguenti operazioni:
- Crea nuovi nodi nel pool di nodi
manually-created-pool
. - Esegui il provisioning dei nodi N2 nei pool di nodi N2 esistenti o creando un nuovo pool di nodi.
- Se GKE non riesce a creare nodi N2, tenta di eseguire lo scaling up dei pool di nodi N2D esistenti o di creare nuovi pool di nodi N2D.
Scegli come target pool di nodi specifici in una definizione di classe di calcolo
Il campo priorities.nodepools
consente di specificare un elenco di node pool creati manualmente su cui GKE tenta di pianificare i pod senza un ordine specifico nei cluster GKE Standard che utilizzano l'autoscaling del cluster. Questo campo supporta solo un elenco di pool di nodi. Non puoi specificare proprietà aggiuntive della macchina, come la serie di macchine, nella stessa regola di priorità.
Quando esegui il deployment di un carico di lavoro che richiede una classe di calcolo con pool di nodi denominati, GKE tenta di pianificare i pod in attesa in questi pool di nodi. GKE potrebbe creare nuovi nodi in questi pool di nodi per posizionare i pod.
I pool di nodi specificati nel campo priorities.nodepools
devono essere associati a quella classe di calcolo utilizzando le etichette dei nodi e gli elementi di contaminazione dei nodi, come descritto nella sezione Configurare i pool di nodi creati manualmente per le classi di calcolo.
L'elenco dei pool di nodi specificato nel campo nodepools
non ha priorità. Per configurare un ordine di riserva per i pool di nodi denominati, devi specificare più elementi priorities.nodepools
separati. Ad esempio, considera la seguente specifica:
spec:
...
priorities:
- nodepools: [pool1, pool2]
- nodepools: [pool3]
In questo esempio, GKE tenta innanzitutto di posizionare i pod in attesa che richiedono questa classe di calcolo sui nodi esistenti nei pool di nodi etichettati con la classe di calcolo. Se i nodi esistenti non sono disponibili, GKE tenta di eseguire il provisioning di nuovi nodi in pool1
o pool2
. Se GKE non riesce a eseguire il provisioning di nuovi nodi in questi pool di nodi, tenta di eseguire il provisioning di nuovi pod in pool3
.
Definire il comportamento di scalabilità quando non vengono applicate regole di priorità
La risorsa personalizzata ComputeClass
ti consente di specificare cosa deve fare GKE se non sono presenti nodi che possono soddisfare una delle regole di priorità. Il
campo whenUnsatisfiable
nella specifica supporta i seguenti valori:
ScaleUpAnyway
: crea un nuovo nodo che utilizzi la configurazione predefinita della macchina del cluster. Questo è il comportamento standard.- Nei cluster Autopilot, GKE posiziona il pod su un nodo nuovo o esistente, indipendentemente dalla configurazione della macchina del nodo.
- Nei cluster standard che non utilizzano il provisioning automatico dei nodi, GKE tenta di aumentare la scalabilità di qualsiasi pool di nodi creato manualmente che definisce un'etichetta e un'alterazione corrispondente a una determinata classe di calcolo.
- Nei cluster standard che utilizzano il provisioning automatico dei nodi, GKE potrebbe creare un nuovo pool di nodi che utilizza la serie di macchine E2 predefinita per posizionare il pod.
DoNotScaleUp
: lascia il pod nello statoPending
finché non è disponibile un nodo che soddisfa i requisiti della classe di calcolo.
Imposta i parametri di scalabilità automatica per il consolidamento dei nodi
Per impostazione predefinita, GKE rimuove i nodi sottoutilizzati dall'esecuzione di carichi di lavoro, consolidandoli su altri nodi con capacità. Per tutti i classi di calcolo, questo è il comportamento predefinito perché tutti i cluster che li utilizzano devono utilizzare il gestore della scalabilità automatica dei cluster o essere cluster Autopilot. Durante il consolidamento dei nodi, GKE svuota un nodo sottoutilizzato, ricrea i carichi di lavoro su un altro nodo e poi elimina il nodo svuotato.
I tempi e i criteri per la rimozione dei nodi dipendono dal
profilo di scalabilità automatica.
Puoi perfezionare le soglie di sottoutilizzo delle risorse che attivano la rimozione dei nodi e il consolidamento dei carichi di lavoro utilizzando la sezione autoscalingPolicy
nella definizione della classe di calcolo personalizzata. Puoi ottimizzare i seguenti parametri:
consolidationDelayMinutes
: il numero di minuti dopo i quali GKE rimuove i nodi sottoutilizzaticonsolidationThreshold
: la soglia di utilizzo per la CPU e la memoria come percentuale delle risorse disponibili del nodo. GKE prende in considerazione la rimozione dei nodi solo se l'utilizzo delle risorse è inferiore a questa soglia.gpuConsolidationThreshold
: la soglia di utilizzo della GPU come percentuale delle risorse disponibili del nodo. GKE prende in considerazione la rimozione dei nodi solo se l'utilizzo delle risorse è inferiore a questa soglia. Valuta la possibilità di impostare questo valore su100
o0
in modo che GKE consoli tutti i nodi che non hanno un utilizzo del 100% delle GPU collegate.
Considera l'esempio seguente:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: my-class
spec:
priorities:
- machineFamily: n2
- machineFamily: n2d
autoscalingPolicy:
consolidationDelayMinutes: 5
consolidationThreshold: 70
In questa configurazione, GKE rimuove i nodi inutilizzati dopo cinque minuti e i nodi diventano candidati per il consolidamento solo se sia l'utilizzo della CPU sia quello della memoria sono inferiori al 70%.
Configura la migrazione attiva a nodi con priorità più elevata
La migrazione attiva è una funzionalità facoltativa di scalabilità automatica nelle classi di calcolo personalizzate che sostituisce automaticamente i nodi esistenti più in basso nell'elenco di priorità di riserva di una classe di calcolo con nuovi nodi più in alto nell'elenco di priorità. In questo modo, tutti i pod in esecuzione verranno eseguiti sui nodi più preferiti per la classe di calcolo, anche se inizialmente GKE doveva eseguire questi pod su nodi meno preferiti.
Quando si verifica una migrazione attiva, GKE crea nuovi nodi in base alle regole di priorità della classe di calcolo, quindi estrae ed elimina i nodi obsoleti di priorità inferiore. La migrazione avviene gradualmente per ridurre al minimo l'interruzione del carico di lavoro. La migrazione attiva presenta le seguenti considerazioni:
- Se hai attivato il provisioning automatico dei nodi sui tuoi cluster standard, la migrazione attiva potrebbe attivare la creazione di nuovi pool di nodi se quelli esistenti non soddisfano i criteri di priorità più elevata definiti nella classe di calcolo personalizzata.
- Per evitare interruzioni del carico di lavoro critico, la migrazione attiva non sposta i seguenti pod:
- Pod che hanno impostato un PodDisruptionBudget, se il trasferimento supererebbe il valore del PodDisruptionBudget.
- Pod con l'annotazione
cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
.
Considera l'esempio seguente di specifica della classe di calcolo, che dà la priorità ai nodi N2 rispetto ai nodi N2D:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: my-class
spec:
priorities:
- machineFamily: n2
- machineFamily: n2d
activeMigration:
optimizeRulePriority: true
Se i nodi N2 non erano disponibili quando hai eseguito il deployment di un pod con questa classe di calcolo, GKE avrebbe utilizzato i nodi N2D come opzione di riserva. Se i nodi N2 diventano disponibili per il provisioning in un secondo momento, ad esempio se la tua quota aumenta o se le VM N2 diventano disponibili nella tua località, GKE crea un nuovo nodo N2 e esegue gradualmente la migrazione del pod dal nodo N2D esistente al nuovo nodo N2. GKE elimina quindi il nodo N2D obsoleto.
Utilizzare le prenotazioni Compute Engine
Disponibile in GKE 1.31.1-gke.2105000 e versioni successive
Se utilizzi le prenotazioni della capacità di Compute Engine per ottenere un livello più elevato di garanzia della disponibilità dell'hardware in determinate zone Google Cloud, puoi configurare ogni priorità di riserva nella tua classe di calcolo personalizzata in modo che GKE consumi le prenotazioni quando crea nuovi nodi.
L'utilizzo delle prenotazioni nei classi di calcolo personalizzati prevede i seguenti requisiti:
- I cluster in modalità standard devono utilizzare il provisioning automatico dei nodi affinché GKE possa utilizzare le prenotazioni per creare nuovi nodi. Per maggiori dettagli, consulta la sezione Provisioning automatico dei nodi e classi di calcolo. Puoi anche continuare a utilizzare le prenotazioni quando crei manualmente i pool di nodi nel cluster.
- I classi Compute che configurano le unità SSD locali devono utilizzare la regola di priorità
machineType
, nonmachineFamily
. Per maggiori dettagli, consulta la sezione Tipo di regola machineType.
Considera l'esempio seguente di specifica della classe di calcolo, che seleziona una prenotazione condivisa specifica da utilizzare durante il provisioning delle istanze n2
per i nodi:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: shared-specific-reservations
spec:
nodePoolAutoCreation:
enabled: true
priorities:
- machineFamily: n2
reservations:
specific:
- name: n2-shared-reservation
project: reservation-project
affinity: Specific
- machineFamily: n2
spot: true
- machineFamily: n2
whenUnsatisfiable: DoNotScaleUp
Se esegui il deployment di un pod che utilizza la classe di calcolo shared-specific-reservations
, GKE tenta di utilizzare la prenotazione n2-shared-reservation
quando crea nuove istanze n2
per eseguire il pod. Se la prenotazione non ha capacità disponibili, l'operazione di ridimensionamento in aumento non va a buon fine.
Puoi utilizzare i seguenti tipi di prenotazioni:
Prenotazioni specifiche per un singolo progetto: configura i seguenti campi:
reservations.specific.name
: il nome della prenotazione.reservations.affinity
: deve essereSpecific
.
Prenotazioni condivise specifiche: configura i seguenti campi:
reservations.specific.name
: il nome della prenotazione.reservations.specific.project
: l'ID del progetto proprietario della prenotazione.reservations.affinity
: deve essereSpecific
.
Tutte le prenotazioni corrispondenti: configura i seguenti campi:
reservations.affinity
: deve essereAnyBestEffort
.- Non impostare un nome per la prenotazione o il progetto.
Se GKE non riesce a trovare nella prenotazione la capacità disponibile che corrisponde a una regola di priorità specifica, prova la regola di priorità successiva nella classe di calcolo. Se GKE non è in grado di soddisfare i requisiti di alcuna delle regole di priorità per la classe di calcolo, si verifica il comportamento quando non vengono applicate regole.
Richiedi classi di calcolo nei carichi di lavoro
Per utilizzare una classe di calcolo personalizzata dopo aver completato la progettazione, il pod deve richiederla esplicitamente nella specifica del pod. Se vuoi, puoi impostare facoltativamente una classe di calcolo come predefinita in uno spazio dei nomi Kubernetes specifico. In questo caso, i pod in quel determinato spazio dei nomi utilizzeranno quella classe di calcolo, a meno che i pod non richiedano una classe di calcolo diversa.
Per istruzioni su come richiedere e utilizzare le classi di calcolo in GKE, consulta Controllare gli attributi dei nodi con scalabilità automatica con classi di calcolo personalizzate.