Questa pagina mostra come applicare le classi di calcolo per impostazione predefinita ai pod Google Kubernetes Engine (GKE) che non selezionano esplicitamente una classe di calcolo. Questa pagina contiene le istruzioni per impostare una classe di calcolo come predefinita in un namespace e per un intero cluster. Queste istruzioni sono destinate agli amministratori dei cluster che vogliono ridurre l'overhead manuale causato dalla configurazione dei singoli nodi e carichi di lavoro.
Prima di leggere questa pagina, acquisisci familiarità con le classi di computing personalizzate.
Informazioni sulle classi di computing predefinite
Puoi configurare i cluster GKE o spazi dei nomi specifici in modo che abbiano una classe di calcolo predefinita. La classe predefinita che configuri si applica a qualsiasi pod nel cluster o nello spazio dei nomi che non seleziona una classe di calcolo diversa. Quando esegui il deployment di un pod che non seleziona una classe di calcolo, GKE applica le classi di calcolo predefinite nel seguente ordine:
- Se lo spazio dei nomi ha una classe di calcolo predefinita, GKE modifica la specifica del pod per selezionare quella classe di calcolo.
- Se lo spazio dei nomi non ha una classe di calcolo predefinita, viene applicata la classe predefinita a livello di cluster. GKE non modifica la specifica del pod.
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
.
Avere un cluster GKE Autopilot o Standard che esegue una versione che supporta l'impostazione di una classe di computing predefinita a livello di cluster o spazio dei nomi. Per maggiori informazioni, consulta la sezione Requisiti.
Per i cluster Standard, attiva il provisioning automatico dei nodi o il gestore della scalabilità automatica del cluster.
Se vuoi impostare una classe di computing personalizzata come predefinita per uno spazio dei nomi, implementa una classe di computing personalizzata.
Requisiti
- Per impostare una classe di calcolo come predefinita a livello di cluster, il cluster deve eseguire GKE versione 1.33.1-gke.1744000 o successive.
- Per impostare una classe di computing 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 successive.
Ruoli e autorizzazioni richiesti
Per ottenere le autorizzazioni necessarie per configurare le classi di calcolo 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 classe di calcolo predefinita a livello di cluster:
Amministratore cluster Kubernetes Engine (
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 le classi di computing 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 e gestire le classi di computing 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 la classe di computing predefinita a livello di cluster:
container.clusters.update
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Configurare una classe di computing predefinita per uno spazio dei nomi
Puoi annotare qualsiasi spazio dei nomi Kubernetes nel tuo cluster con il nome di una classe di calcolo da utilizzare come predefinita. Se un pod di cui è stato eseguito il deployment in questo spazio dei nomi non seleziona già una classe di calcolo, GKE modifica la specifica del pod per selezionare la classe predefinita nello spazio dei nomi. Puoi impostare qualsiasi classe di calcolo personalizzata o integrata come predefinita.
Per applicare una classe di calcolo a tutti i pod in 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 della classe di computing 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 classe di calcolo predefinita:
error: 'cloud.google.com/default-compute-class' already has a value, and --overwrite is false
Per risolvere questo errore, aggiorna la classe di calcolo predefinita per lo spazio dei nomi.
Per applicare una classe di calcolo 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 classe di calcolo 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 la classe di calcolo predefinita per lo spazio dei nomi.
Aggiorna la classe di computing predefinita esistente in uno spazio dei nomi
Per sovrascrivere la classe di calcolo predefinita esistente per uno spazio dei nomi, esegui uno dei seguenti comandi:
Aggiorna la classe di computing 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 della classe di computing da impostare come nuova predefinita per lo spazio dei nomi.
Sovrascrivi la classe di computing 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
Configurare una classe di computing predefinita per un cluster
Questa sezione mostra come impostare una classe di calcolo come predefinita per il cluster. Per le classi di calcolo 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 up dei node pool con taint dei nodi per le classi di calcolo. Se aggiungi manualmente un'etichetta per la classe di calcolo default
,
GKE può scalare il pool di nodi. Tuttavia, questa configurazione manuale
non è necessaria per utilizzare una classe di calcolo predefinita a livello di cluster.
Per abilitare l'impostazione di una classe di computing 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, la classe di calcolo richiede istanze N2. Puoi configurare la classe di calcolo
default
con uno qualsiasi dei campi disponibili nella CustomResourceDefinition ComputeClass.Applica il manifest al cluster:
kubectl apply -f PATH_TO_MANIFEST
Sostituisci
PATH_TO_MANIFEST
con il percorso del manifest per la classe di calcolo.
Dopo aver impostato una classe di calcolo predefinita a livello di cluster, GKE scala i node pool che soddisfano entrambi i seguenti requisiti:
- La configurazione del nodo è la stessa della configurazione della classe di calcolo
default
. - Il pool di nodi non ha taint o etichette per una classe di calcolo diversa.
GKE può scalare i pool di nodi con un taint e un'etichetta
per la classe di calcolo
default
.
Ad esempio, se la classe di calcolo default
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 classe di calcolo diversa.
Verifica il comportamento della classe di computing predefinita
Per verificare se la classe di calcolo predefinita che hai impostato per uno spazio dei nomi o per un cluster funziona come previsto:
Esamina il seguente esempio di deployment:
Questo deployment non richiede esplicitamente una classe di computing.
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 classe di calcolo predefinita.
- Il nome di uno spazio dei nomi che non ha una classe di calcolo 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:- Classe di computing predefinita a livello di cluster:
default
per i nodi creati da GKE Autopilot o dal provisioning automatico dei nodi. I nodi nei pool di nodi esistenti creati manualmente potrebbero non avere l'etichettacloud.google.com/compute-class
. - Classe di calcolo predefinita a livello di spazio dei nomi: il nome della classe di calcolo che hai configurato come predefinita per lo spazio dei nomi.
- Classe di computing predefinita a livello di cluster:
Disattiva la classe di computing predefinita
Per disattivare la classe di calcolo predefinita in uno spazio dei nomi o in un cluster, esegui una delle seguenti operazioni:
Per disattivare la classe di calcolo 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 la classe di calcolo 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 la classe di calcolo 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 classi di computing personalizzate in GKE.