Questo documento mostra come applicare ComputeClass per impostazione predefinita ai pod Google Kubernetes Engine (GKE) che non selezionano esplicitamente una ComputeClass. Questa pagina contiene le istruzioni per impostare una ComputeClass come predefinita in un namespace e per un intero cluster. Questo documento è destinato agli amministratori di cluster che vogliono ridurre l'overhead manuale causato dalla configurazione dei singoli nodi e carichi di lavoro.
Dovresti già avere familiarità con le ComputeClass personalizzate.
Informazioni su ComputeClass predefinite
Puoi configurare i cluster GKE o spazi dei nomi specifici in modo che abbiano una ComputeClass predefinita. La classe predefinita che configuri si applica a qualsiasi pod nel cluster o nello spazio dei nomi che non seleziona una ComputeClass diversa. Quando esegui il deployment di un pod che non seleziona una ComputeClass, GKE applica le ComputeClass predefinite nel seguente ordine:
- Se lo spazio dei nomi ha un oggetto ComputeClass predefinito, GKE modifica la specifica del pod per selezionare ComputeClass.
- Se lo spazio dei nomi non ha una ComputeClass predefinita, viene applicata la classe predefinita a livello di cluster. GKE non modifica la specifica del pod.
Se il campo activeMigration.optimizeRulePriority
della tua ComputeClass predefinita è impostato su true
, questa impostazione potrebbe influire sui carichi di lavoro nei tuoi cluster. Per maggiori informazioni,
vedi Migrazione attiva in ComputeClasses predefinite.
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 il comando
gcloud components update
. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
- Avere un cluster GKE Autopilot o Standard che esegue una versione che supporta l'impostazione di una ComputeClass predefinita a livello di cluster o spazio dei nomi. Per maggiori informazioni, consulta la sezione Requisiti.
Se utilizzi un cluster in modalità Standard, assicurati di soddisfare uno dei seguenti requisiti:
- Abilita la scalabilità automatica in almeno un pool di nodi nel cluster.
- Se il tuo cluster Standard esegue una versione precedente alla 1.33.3-gke.1136000 e non è registrato al canale di rilascio rapido, attiva il provisioning automatico dei nodi a livello di cluster.
Se vuoi impostare una ComputeClass personalizzata come predefinita per uno spazio dei nomi, esegui il deployment di una ComputeClass personalizzata.
Requisiti
- Per impostare una ComputeClass come predefinita a livello di cluster, il cluster deve eseguire GKE versione 1.33.1-gke.1744000 o successive.
- Per impostare una ComputeClass 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 successiva.
Ruoli e autorizzazioni richiesti
Per ottenere le autorizzazioni necessarie per configurare ComputeClass predefinite a livello di cluster o spazio dei nomi, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto Google Cloud :
-
Sviluppatore Kubernetes Engine (
roles/container.developer
) -
Aggiorna la ComputeClass predefinita a livello di cluster:
Kubernetes Engine Cluster Admin (
roles/container.clusterAdmin
)
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 ComputeClass 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 le ComputeClass 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 ComputeClass predefinita a livello di cluster:
container.clusters.update
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Configura una risorsa ComputeClass predefinita per uno spazio dei nomi
Puoi annotare qualsiasi spazio dei nomi Kubernetes nel tuo cluster con il nome di una ComputeClass da utilizzare come predefinita. Se un pod di cui è stato eseguito il deployment in questo spazio dei nomi non seleziona già una ComputeClass, GKE modifica la specifica del pod per selezionare la classe predefinita nello spazio dei nomi. Puoi impostare qualsiasi ComputeClass personalizzata o integrata come predefinita.
Per applicare una ComputeClass a tutti i pod di 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 aggiornareCOMPUTECLASS_NAME
: il nome di ComputeClass 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 ComputeClass predefinita:
error: 'cloud.google.com/default-compute-class' already has a value, and --overwrite is false
Per risolvere questo errore, aggiorna ComputeClass predefinita per lo spazio dei nomi.
Per applicare una ComputeClass 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 ComputeClass 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 ComputeClass predefinita per lo spazio dei nomi.
Le modifiche si applicano a tutti i nuovi pod in quello spazio dei nomi. I Pod esistenti non sono interessati.
Aggiorna la ComputeClass predefinita esistente in uno spazio dei nomi
Per sovrascrivere la ComputeClass predefinita esistente per uno spazio dei nomi, esegui uno dei seguenti comandi:
Aggiorna ComputeClass 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 aggiornareCOMPUTECLASS_NAME
: il nome di ComputeClass da impostare come nuovo valore predefinito per lo spazio dei nomi.
Sovrascrivi la ComputeClass 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
Le modifiche si applicano a tutti i nuovi pod in quello spazio dei nomi. I Pod esistenti non sono interessati.
Configura una ComputeClass predefinita per un cluster
Questa sezione mostra come impostare una ComputeClass come predefinita per il tuo cluster. Per le ComputeClass 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 dei node pool con taint dei nodi per
ComputeClass. Se aggiungi manualmente un'etichetta per default
ComputeClass,
GKE può scalare il pool di nodi. Tuttavia, questa configurazione manuale
non è necessaria per utilizzare una ComputeClass predefinita a livello di cluster.
Per abilitare l'impostazione di una ComputeClass 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 esempious-central1
.
Puoi anche specificare questo flag quando crei un cluster Autopilot o Standard.
Salva il seguente manifest, che definisce un
ComputeClass
denominatodefault
: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, ComputeClass richiede invece istanze N2. Puoi configurare
default
ComputeClass con uno qualsiasi dei campi disponibili nella CustomResourceDefinition di ComputeClass.Applica il manifest al cluster:
kubectl apply -f PATH_TO_MANIFEST
Sostituisci
PATH_TO_MANIFEST
con il percorso del manifest per ComputeClass.
Dopo aver impostato una ComputeClass predefinita a livello di cluster, GKE scala i pool di nodi che soddisfano entrambi i seguenti requisiti:
- La configurazione del nodo è la stessa della configurazione di
default
ComputeClass. - Il pool di nodi non ha taint o etichette per una ComputeClass diversa.
GKE può scalare i pool di nodi con un taint e un'etichetta
per la
default
ComputeClass.
Ad esempio, se default
ComputeClass 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 ComputeClass diversa.
Le modifiche vengono applicate a tutti i nuovi pod nel cluster che non hanno già una ComputeClass. I pod esistenti potrebbero essere interessati a seconda delle impostazioni di migrazione attive della ComputeClass predefinita a livello di cluster. Per ulteriori informazioni, vedi Migrazione attiva in ComputeClasses predefinite.
Verifica il comportamento predefinito di ComputeClass
Per verificare se la ComputeClass predefinita che hai impostato per uno spazio dei nomi o per un cluster funziona come previsto, procedi nel seguente modo:
Esamina il seguente esempio di deployment:
Questo deployment non richiede esplicitamente una ComputeClass.
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 ComputeClass predefinita.
- Il nome di uno spazio dei nomi che non ha una ComputeClass predefinita.
GKE potrebbe impiegare un po' di tempo per creare nuovi nodi per eseguire i pod.
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>
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:- ComputeClass predefinita a livello di cluster:
default
per i nodi creati da GKE Autopilot o dalla creazione automatica del pool di nodi. I nodi nei pool di nodi esistenti creati manualmente potrebbero non avere l'etichettacloud.google.com/compute-class
. - ComputeClass predefinita a livello di spazio dei nomi: il nome di ComputeClass che hai configurato come predefinita per lo spazio dei nomi.
- ComputeClass predefinita a livello di cluster:
Disattiva la risorsa ComputeClass predefinita
Per disattivare ComputeClass predefinita in uno spazio dei nomi o in un cluster, esegui una delle seguenti operazioni:
Per disattivare la ComputeClass 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'oggettoNamespace
nell'API Kubernetes.Per disattivare ComputeClass 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 ComputeClass 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
- Scopri di più sulle ComputeClass personalizzate in GKE.