Dopo aver creato un cluster, puoi modificare alcuni aspetti della sua configurazione. Ad esempio, puoi:
- Aggiungi, rimuovi o sostituisci i nodi.
- Aggiungi o rimuovi annotazioni al cluster.
- Modifica i valori dei campi modificabili nelle risorse del cluster e del pool di nodi.
- Modifica altre risorse personalizzate.
Puoi utilizzare bmctl o Google Cloud CLI per apportare aggiornamenti a un cluster. Se hai
creato un cluster amministratore o utente utilizzando Terraform, puoi utilizzare Terraform per
aggiornare il cluster. Tieni presente quanto segue:
Molti aspetti della configurazione del cluster sono immutabili e non possono essere aggiornati dopo la creazione del cluster. Per un elenco completo dei campi modificabili e immutabili, consulta il riferimento per il campo di configurazione del cluster. Il riferimento al campo è una tabella ordinabile. Fai clic sulle intestazioni delle colonne per modificare l'ordine di ordinamento. Fai clic sul nome di un campo per visualizzarne la descrizione.
gcloud CLI e Terraform supportano solo l'aggiornamento dei cluster di amministrazione e utente. Devi utilizzare
bmctlper aggiornare altri tipi di cluster.gcloud CLI e Terraform supportano solo le modifiche alle risorse del cluster e del pool di nodi. Devi utilizzare
kubectlobmctlper aggiornare altre risorse personalizzate che influiscono sul cluster.
Questa pagina è rivolta ad amministratori, architetti e operatori che gestiscono il ciclo di vita dell'infrastruttura tecnologica sottostante. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti, consulta Ruoli e attività comuni degli utenti di GKE Enterprise. Google Cloud
Come aggiornare i cluster
In genere, per aggiornare un cluster esegui la seguente sequenza di azioni:
bmctl
Modifica i valori dei campi applicabili nel file di configurazione del cluster, che per impostazione predefinita si trova qui:
bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yamlAggiorna il cluster eseguendo il comando
bmctl update:bmctl update cluster -c CLUSTER_NAME --kubeconfig=KUBECONFIGSostituisci quanto segue:
CLUSTER_NAME: il nome del cluster da aggiornare.KUBECONFIG: per i cluster di amministrazione, ibridi o autonomi, inserisci il percorso del file kubeconfig del cluster. Per un cluster utente, inserisci il percorso del file kubeconfig del cluster admin.
Interfaccia a riga di comando gcloud
Specifica solo i flag per la configurazione che vuoi modificare.
Esegui il comando di aggiornamento applicabile:
Cluster di amministrazione:
gcloud container bare-metal admin-clusters updateCluster di utenti:
gcloud container bare-metal clusters update.Pool di nodi in un cluster utente:
gcloud container bare-metal node-pools update
Terraform
Modifica i valori dei campi applicabili nel file di configurazione Terraform che hai utilizzato per creare il cluster o il pool di nodi. Per descrizioni dettagliate dei campi, consulta la documentazione di riferimento di Terraform:
Aggiorna la configurazione eseguendo il comando
terraform apply.
Le sezioni seguenti descrivono alcuni esempi comuni per l'aggiornamento di un cluster esistente.
Aggiungere o rimuovere nodi in un cluster
Un node pool è un gruppo di nodi all'interno di un cluster che condividono la stessa configurazione. Tieni presente che un nodo appartiene sempre a un pool di nodi. Per aggiungere un nuovo nodo a un cluster, devi aggiungerlo a un determinatopool di nodil. La rimozione di un nodo da un pool di nodi equivale alla rimozione del nodo dal cluster.
In Google Distributed Cloud sono disponibili tre tipi di node pool: control plane, bilanciatore del carico e worker. Le sezioni seguenti descrivono come aggiungere o rimuovere nodi da ogni tipo di pool di nodi.
bmctl
Aggiungi o rimuovi un nodo da un pool di nodi aggiungendo o rimuovendo l'indirizzo IP del nodo in una sezione specifica del file di configurazione del cluster. L'elenco seguente mostra la sezione da modificare per un determinatopool di nodil:
- Pool di nodi worker: aggiungi o rimuovi l'indirizzo IP del nodo nella sezione
spec.nodesdella specificaNodePool. - Pool di nodi del control plane: aggiungi o rimuovi l'indirizzo IP del nodo nella sezione
spec.controlPlane.nodePoolSpec.nodesdella specificaCluster. - Pool di nodi del bilanciatore del carico: aggiungi o rimuovi l'indirizzo IP del nodo nella sezione
spec.loadBalancer.nodePoolSpec.nodesdella specificaCluster.
Esempio: rimuovere un nodo worker
Ecco un file di configurazione del cluster di esempio che mostra le specifiche di due nodi worker:
---
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
name: nodepool1
namespace: cluster-cluster1
spec:
clusterName: cluster1
nodes:
- address: 192.0.2.1
- address: 192.0.2.2
Per rimuovere un nodo:
(Facoltativo) Se il nodo che stai rimuovendo esegue pod critici, metti prima il nodo in modalità di manutenzione.
Puoi monitorare il processo di svuotamento dei nodi per i nodi di lavoro visualizzando i campi
status.nodesDrainedestatus.nodesDrainingnella risorsaNodePool.Modifica il file di configurazione del cluster per eliminare la voce dell'indirizzo IP per il nodo.
Aggiorna il cluster:
bmctl update cluster1 \ --kubeconfig=ADMIN_KUBECONFIG
Interfaccia a riga di comando gcloud
Utilizzi un comando update per aggiungere o rimuovere nodi. Il comando update che utilizzi e il flag in cui specifichi l'indirizzo IP dipendono dal tipo di pool di nodi che vuoi aggiornare:
Pool di nodi worker: esegui
gcloud container bare-metal node-pools updatee specifica l'indirizzo IP nel flag--node-configs 'node-ip=IP_ADDRESS'.Pool di nodi del control plane su un cluster di amministrazione: esegui
gcloud container bare-metal admin-clusters updatee specifica l'indirizzo IP nel flag--control-plane-node-configs 'node-ip=IP_ADDRESS'.Pool di nodi del control plane su un cluster utente: esegui
gcloud container bare-metal clusters updatee specifica l'indirizzo IP nel flag--control-plane-node-configs 'node-ip=IP_ADDRESS'.Pool di nodi del bilanciatore del carico: esegui
gcloud container bare-metal clusters updatee specifica l'indirizzo IP nel flag--metal-lb-load-balancer-node-configs 'node-ip=IP_ADDRESS'o
--bgp-load-balancer-node-configs 'node-ip=IP_ADDRESS'
Il flag in cui specifichi l'indirizzo IP accetta un solo node-ip. Includi il flag per ogni indirizzo IP nel pool di nodi.
I comandi update sostituiscono tutti gli indirizzi IP con quelli che
specifichi. Per aggiungere un nodo, includi gli indirizzi IP dei nodi esistenti e l'indirizzo IP del nuovo nodo nel comando update. Analogamente,
rimuovi i nodi includendo solo gli indirizzi IP dei nodi che
vuoi conservare.
Esempio: rimuovere un nodo worker
Questa sezione mostra come rimuovere un nodo worker da un pool di nodi utilizzando dati di esempio. Nei passaggi seguenti sono inclusi anche altri comandi gcloud CLI che potresti trovare utili.
(Facoltativo) Se il nodo che stai rimuovendo esegue pod critici, metti prima il nodo in modalità di manutenzione.
Puoi monitorare il processo di svuotamento dei nodi per i nodi di lavoro visualizzando i campi
status.nodesDrainedestatus.nodesDrainingnella risorsaNodePool.Esegui il comando
listper elencare tutti i pool di nodi nel cluster:gcloud container bare-metal node-pools list \ --cluster=abm-user-cluster1 \ --project=example-project-12345 \ --location=us-central1L'output è simile al seguente:
NAME LOCATION STATE node-pool-1 us-central1 RUNNING node-pool-2 asia-east1 RUNNINGEsegui il comando
describeper elencare tutti gli indirizzi IP nel pool di nodi:gcloud container bare-metal node-pools describe node-pool-1 \ --cluster=abm-user-cluster1 \ --project=example-project-12345 \ --location=us-central1L'output di esempio riportato di seguito è troncato per una migliore leggibilità:
annotations: ... baremetal.cluster.gke.io/version: 1.33 ... name: projects/example-project-12345/locations/us-central1/bareMetalClusters/abm-user-cluster1/bareMetalNodePools/node-pool-1 nodePoolConfig: nodeConfigs: - nodeIp: 192.0.2.1 - nodeIp: 192.0.2.2 operatingSystem: LINUX state: RUNNING ...Nell'output di esempio, nota quanto segue:
Il campo
namecontiene il nome completo del pool di nodi. Quando specifichi il nome del pool di nodi in un comando, puoi specificare il nome completo o il nome del pool di nodi, ad esempionode-pool-1, insieme ai flag--cluster,--projecte--location.La sezione
nodeConfigscontiene due campinodeIpcon gli indirizzi IP dei nodi.
Esegui questo comando per rimuovere il nodo con l'indirizzo IP 192.0.2.1:
gcloud container bare-metal node-pools update node-pool-1 \ --cluster=abm-user-cluster1 \ --project=example-project-12345 \ --location=us-central1 \ --node-configs='node-ip=192.0.2.2'Il comando
updatesostituisce tutti gli indirizzi IP con quelli che specifichi. Poiché 192.0.2.1 non è incluso, il nodo viene rimosso.L'output di questo comando è simile al seguente:
Waiting for operation [projects/example-project-12345/locations/us-central1/operations/operation-1697154681749-6078d9def4030-76686d6e-9fcb1de9] to completeNell'output di esempio, la stringa
operation-1697154681749-6078d9def4030-76686d6e-9fcb1de9è l'OPERATION_IDdell'operazione a lunga esecuzione. Puoi scoprire lo stato dell'operazione eseguendo questo comando in un'altra finestra del terminale:gcloud container bare-metal operations describe operation-1697154681749-6078d9def4030-76686d6e-9fcb1de9 \ --project= example-project-12345 \ --location=us-central1Puoi eseguire di nuovo il comando di tanto in tanto per controllare lo stato.
Se la rimozione del nodo non va a buon fine, puoi forzarne la rimozione dal cluster. Per maggiori dettagli, vedi Reimpostare un nodo non riuscito in Google Distributed Cloud.
Sostituisci i nodi del control plane HA
bmctl
Puoi utilizzare bmctl per sostituire i nodi del control plane ad alta disponibilità in tutti i tipi di cluster.
Per sostituire un nodo in un cluster:
- Rimuovi l'indirizzo IP del nodo dal file di configurazione del cluster.
- Aggiorna il cluster.
- Controlla lo stato dei nodi nel cluster.
- Aggiungi l'indirizzo IP di un nuovo nodo allo stesso file di configurazione del cluster.
- Aggiorna il cluster.
Esempio: sostituisci un nodo del control plane HA
Ecco un file di configurazione del cluster di esempio che mostra tre nodi del control plane in un cluster utente:
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: user-cluster
namespace: cluster-user-cluster
spec:
controlPlane:
nodePoolSpec:
nodes:
- address: 192.0.2.11
- address: 192.0.2.12
- address: 192.0.2.13
Per sostituire l'ultimo nodo elencato nella sezione spec.controlPlane.nodePoolSpec.nodes, segui questi passaggi:
Rimuovi il nodo eliminando la voce dell'indirizzo IP nel file di configurazione del cluster. Dopo aver apportato questa modifica, il file di configurazione del cluster dovrebbe essere simile al seguente:
--- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-cluster namespace: cluster-user-cluster spec: controlPlane: nodePoolSpec: nodes: - address: 192.0.2.11 - address: 192.0.2.12Aggiorna il cluster eseguendo il seguente comando:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=KUBECONFIG
Apporta le seguenti modifiche:
- Sostituisci CLUSTER_NAME con il nome del cluster da aggiornare.
- Se il cluster è un cluster autogestito (ad esempio un cluster di amministrazione o autonomo), sostituisci KUBECONFIG con il percorso del file kubeconfig del cluster. Se il cluster è un cluster utente, come in questo esempio, sostituisci KUBECONFIG con il percorso del file kubeconfig del cluster amministrativo.
Una volta eseguito correttamente il comando
bmctl update, è necessario un po' di tempo per completare i jobmachine-preflightemachine-init. Puoi visualizzare lo stato dei nodi e dei rispettivi pool di nodi eseguendo i comandi descritti nella sezione Verifica gli aggiornamenti di questo documento. Una volta che il pool di nodi e i nodi sono in stato di pronto, puoi procedere al passaggio successivo.Aggiungi un nuovo nodo del control plane al pool di nodi aggiungendo l'indirizzo IP del nuovo nodo del control plane alla sezione
spec.controlPlane.nodePoolSpec.nodesdel file di configurazione del cluster. Dopo aver apportato questa modifica, il file di configurazione del cluster dovrebbe essere simile al seguente:--- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-cluster namespace: cluster-user-cluster spec: controlPlane: nodePoolSpec: nodes: - address: 192.0.2.11 - address: 192.0.2.12 - address: 192.0.2.14Aggiorna il cluster eseguendo il seguente comando:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=KUBECONFIG
Interfaccia a riga di comando gcloud
Puoi utilizzare la gcloud CLI per sostituire i nodi del control plane ad alta disponibilità (HA) nei cluster di amministrazione e utente.
Per sostituire un nodo in un cluster:
Rimuovi l'indirizzo IP del nodo eseguendo il comando
updateapplicabile:- Cluster utente:
gcloud container bare-metal clusters update - Cluster di amministrazione:
gcloud container bare-metal admin-clusters update
- Cluster utente:
Controlla lo stato della rimozione del nodo nel cluster eseguendo
gcloud container bare-metal operations describe OPERATION_ID.Aggiungi l'indirizzo IP del nuovo nodo eseguendo il comando
updateapplicabile.
Esempio: sostituisci un nodo del control plane HA
Questa sezione mostra come sostituire un control plane da un cluster utilizzando dati di esempio. Nei passaggi seguenti sono inclusi anche altri comandi gcloud CLI che potresti trovare utili.
Esegui il comando
listper elencare tutti i cluster utente in un progettoGoogle Cloud :gcloud container bare-metal clusters list \ --project=example-project-12345 \ --location=-Quando imposti
--location=-, significa elencare tutti i cluster in tutte le regioni. Se devi ridurre l'elenco, imposta--locationsu una regione specifica.L'output è simile al seguente:
NAME LOCATION VERSION ADMIN_CLUSTER STATE abm-user-cluster1a us-central1 1.33 abm-admin-cluster1 RUNNING abm-user-cluster1b europe-west1 1.33 abm-admin-cluster1 RUNNINGEsegui il comando
describesul cluster:gcloud container bare-metal clusters describe abm-user-cluster1 \ --project=example-project-12345 \ --location=us-central1L'output di esempio è troncato per una migliore leggibilità:
... controlPlane: controlPlaneNodePoolConfig: nodePoolConfig: nodeConfigs: - nodeIp: 192.0.2.11 - nodeIp: 192.0.2.12 - nodeIp: 192.0.2.13 operatingSystem: LINUX ... name: projects/example-project-1234567/locations/us-central1/bareMetalClusters/abm-user-cluster1a ...Nell'output di esempio, nota quanto segue:
Il campo
namecontiene il nome completo del cluster. Quando specifichi il nome del cluster in un comando, puoi specificare il nome completo o il nome del cluster, ad esempioabm-user-cluster1a, insieme a--projecte--location flags.La sezione
nodeConfigscontiene tre campinodeIpcon gli indirizzi IP dei nodi del control plane.
Rimuovi il nodo con l'indirizzo IP
192.0.2.13:gcloud container bare-metal cluster update abm-user-cluster1a \ --project=example-project-12345 \ --location=us-central1 \ --control-plane-node-configs 'node-ip=192.0.2.11' --control-plane-node-configs 'node-ip=192.0.2.12'L'output di questo comando è simile al seguente:
Waiting for operation [projects/example-project-12345/locations/us-central1/operations/operation-1956154681749-6078d9def4030-76686d6e-9fcb1d7] to completeNell'output di esempio, la stringa
operation-1956154681749-6078d9def4030-76686d6e-9fcb1de7è l'OPERATION_IDdell'operazione a lunga esecuzione. Puoi scoprire lo stato dell'operazione eseguendo questo comando in un'altra finestra del terminale:gcloud container bare-metal operations describe operation-1956154681749-6078d9def4030-76686d6e-9fcb1de7 \ --project= example-project-12345 \ --location=us-central1Puoi eseguire di nuovo il comando di tanto in tanto per controllare lo stato.
Aggiungi il nuovo nodo con l'indirizzo IP
192.0.2.14:gcloud container bare-metal cluster update abm-user-cluster1a \ --project=example-project-12345 \ --location=us-central1 \ --control-plane-node-configs 'node-ip=192.0.2.11' --control-plane-node-configs 'node-ip=192.0.2.12' --control-plane-node-configs 'node-ip=192.0.2.14'
Verificare gli aggiornamenti
kubectl
Puoi visualizzare lo stato dei nodi e dei rispettivi pool di nodi con il comando
kubectl get.
Ad esempio, il seguente comando mostra lo stato dei pool di nodi nello spazio dei nomi del cluster cluster-my-cluster:
kubectl -n cluster-my-cluster get nodepools.baremetal.cluster.gke.io
Il sistema restituisce risultati simili ai seguenti:
NAME READY RECONCILING STALLED UNDERMAINTENANCE UNKNOWN
cluster-my-cluster 3 0 0 0 0
cluster-my-cluster-lb 2 0 0 0 0
np1 3 0 0 0 0
Reconciling=1 indica che il passaggio di riconciliazione è ancora in corso. Devi
attendere che lo stato cambi in Reconciling=0.
Puoi anche controllare lo stato dei nodi in un cluster eseguendo il seguente comando:
kubectl get nodes --kubeconfig=KUBECONFIG
Interfaccia a riga di comando gcloud
Come descritto in precedenza, dopo aver eseguito un comando update, puoi
controllare lo stato dell'operazione utilizzando gcloud container bare-metal
operations describe OPERATIONS_ID. L'output del comando
mostra lo stato dei nodi, ad esempio:
...
metrics:
- intValue: '1'
metric: NODES_RECONCILING
- intValue: '2'
metric: NODES_HEALTHY
- intValue: '0'
metric: NODES_FAILED
- intValue: '0'
metric: NODES_IN_MAINTENANCE
- intValue: '3'
metric: NODES_TOTAL
stage: HEALTH_CHECK
...
Indipendentemente dallo strumento utilizzato per aggiornare un pool di nodi, puoi ottenere lo stato attuale di un pool di nodi eseguendo il comando describe applicabile come mostrato in precedenza.
Se hai bisogno di ulteriori informazioni su come diagnosticare i cluster, consulta la pagina Creazione di snapshot per la diagnosi dei cluster.
Pool di indirizzi del bilanciatore del carico
bmctl
La sezione addressPools
contiene campi per specificare i pool di bilanciamento del carico per i bilanciatori del carico in bundle MetalLB
e Border Gateway Protocol (BGP). Puoi aggiungere altri pool di indirizzi di bilanciamento del carico in qualsiasi momento, ma non puoi rimuovere i pool di indirizzi esistenti. A partire dalla versione 1.16.0 di Google Distributed Cloud, puoi
modificare i valori di addressPools.avoidBuggyIPs e
addressPools.manualAssign in qualsiasi momento.
addressPools:
- name: pool1
addresses:
- 198.51.100.0-198.51.100.4
- 198.51.100.240/28
- name: pool2
addresses:
- 198.51.100.224/28
Interfaccia a riga di comando gcloud
Puoi aggiungere altri pool di indirizzi di bilanciamento del carico in qualsiasi momento per i bilanciatori del carico in bundle, ma non puoi rimuovere i pool di indirizzi esistenti. Il flag che
specifichi in gcloud container bare-metal clusters update per aggiungere un pool di indirizzi
dipende dal tipo di bilanciatore del carico in bundle:
- MetalLB (livello 2): utilizza il flag
--metal-lb-address-pools. - Border Gateway Protocol (BGP): utilizza il flag
--bgp-address-pools.
Il valore dei flag ha il seguente formato:
'pool=NAME,avoid-buggy-ips=True|False,manual-assign=True|False,addresses=IP_ADDRESS_RANGE_1;IP_ADDRESS_RANGE_2;...' \
Il valore ha segmenti che iniziano con le parole chiave pool,
avoid-buggy-ip, manual-assign e addresses. Separa ogni segmento
con una virgola.
pool: un nome a tua scelta per il pool.avoid-buggy-ips: se imposti questo valore suTrue, il controller di gestione degli indirizzi IP (IPAM) non assegnerà indirizzi IP che terminano con.0o.255ai servizi. In questo modo si evita il problema di dispositivi di consumo con bug che eliminano per errore il traffico inviato a questi indirizzi IP speciali. Se non specificato, il valore predefinito èFalse. A partire dalla versione 1.16.0 di Google Distributed Cloud, puoi modificare questo valore in un pool di indirizzi esistente.manual-assign: se non vuoi che il controller IPAM assegni automaticamente gli indirizzi IP da questo pool ai servizi, imposta questo valore suTrue. Poi uno sviluppatore può creare un servizio di tipoLoadBalancere specificare manualmente uno degli indirizzi del pool. Se non specificato,manual-assignè impostato suFalse. A partire dalla versione 1.16.0 di Google Distributed Cloud, puoi modificare questo valore in un pool di indirizzi esistente.Nell'elenco di
addresses: ogni indirizzo deve essere un intervallo in formato CIDR o con trattino. Per specificare un singolo indirizzo IP in un pool (ad esempio per il VIP Ingress), utilizza/32nella notazione CIDR (ad esempio, 192.0.2.1/32).
Tieni presente le seguenti regole di sintassi:
- Racchiudi l'intero valore tra virgolette singole.
- Gli spazi vuoti non sono consentiti.
- Separa ogni intervallo di indirizzi IP con un punto e virgola.
Puoi specificare più di un'istanza del flag, come mostrato nell'esempio seguente:
--metal-lb-address-pools='pool=pool2,avoid-buggy-ips=False,manual-assign=True,addresses=198.51.100.0/30;198.51.100.64-198.51.100.72' --metal-lb-address-pools='pool=pool3,avoid-buggy-ips=True,manual-assign=True,addresses=203.0.113.0/28'
Per saperne di più sui pool di indirizzi del bilanciatore del carico, vedi loadBalancer.addressPools in Configura il bilanciamento del carico in bundle.
Impedisci l'eliminazione involontaria del cluster
bmctl
Se aggiungi l'annotazione baremetal.cluster.gke.io/prevent-deletion: "true"
al file di configurazione del cluster, non puoi eliminare il
cluster. Ad esempio, l'esecuzione di kubectl delete cluster o bmctl reset
cluster genera un errore.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: ci-10c3c6f4d9c698e
namespace: cluster-ci-10c3c6f4d9c698e
annotations:
baremetal.cluster.gke.io/prevent-deletion: "true"
spec:
clusterNetwork:
Interfaccia a riga di comando gcloud
Se specifichi il flag --add-annotations con il valore
baremetal.cluster.gke.io/prevent-deletion="true", non puoi
eliminare il cluster. Ad esempio:
Aggiungi l'annotazione per impedire l'eliminazione accidentale del cluster:
gcloud container bare-metal clusters update abm-user-cluster1a \ --project=example-project-12345 \ --location=us-central1 \ --add-annotations=baremetal.cluster.gke.io/prevent-deletion="true"Tenta di eliminare il cluster utente:
gcloud container bare-metal clusters delete abm-user-cluster1a \ --project=example-project-12345 \ --location=us-central1 \ --force \ --allow-missingLa risposta del comando è simile alla seguente:
ERROR: (gcloud.container.bare-metal.clusters.delete) INVALID_ARGUMENT: invalid request: admission webhook "vcluster.kb.io" denied the request: annotations[baremetal.cluster.gke.io/prevent-deletion]: Invalid value: "true": Annotation "baremetal.cluster.gke.io/prevent-deletion" should be removed in order to delete this clusterPer rimuovere l'annotazione, specifica
--remove-annotations=baremetal.cluster.gke.io/prevent-deletion="true"nel comandoupdate.
Ignorare i controlli preliminari
Questa funzionalità è disponibile solo con bmctl update.
Il valore predefinito del campo
bypassPreflightCheck
è false. Se imposti questo campo su true nel file di configurazione del cluster, i controlli preflight interni vengono ignorati quando applichi le risorse ai cluster esistenti.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
annotations:
baremetal.cluster.gke.io/private-mode: "true"
spec:
bypassPreflightCheck: true
Aggiungere o rimuovere amministratori del cluster
bmctl
Puoi aggiungere o rimuovere un utente o un account di servizio come amministratore del cluster
per un cluster utente specificando gli indirizzi email nella sezione clusterSecurity.authorization.clusterAdmin.gcpAccounts
del file di configurazione del cluster. Agli account viene concesso il ruolo cluster-admin sul cluster, che permette di avere l'accesso completo al cluster.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
spec:
clusterSecurity:
authorization:
clusterAdmin:
gcpAccounts:
- alex@example.com
- hao@example.com
- my-sa@example-project-12345.iam.gserviceaccount.com
Quando aggiorni un cluster di utenti per aggiungere un account, assicurati di includere tutti
gli account nell'elenco (sia quelli esistenti sia quelli nuovi) perché bmctl update
sovrascrive l'elenco con ciò che specifichi nel file di configurazione. Per
rimuovere un account, rimuovilo dal file di configurazione del cluster ed esegui
bmctl update.
Interfaccia a riga di comando gcloud
Puoi aggiungere o rimuovere un utente o un account di servizio come amministratore del cluster
specificando un indirizzo email nel flag --admin-users. Il flag
accetta un solo indirizzo email. Per aggiungere più utenti, specifica un account
in ogni flag, ad esempio:
gcloud container bare-metal clusters update abm-user-cluster1a \
--project=example-project-12345 \
--location=us-central1 \
--admin-users=alex@example.com \
--admin-users=hao@example.com
--admin-users=my-sa@example-project-12345.iam.gserviceaccount.com
Il comando update sovrascrive l'intero elenco di concessioni. Specifica tutti gli utenti esistenti e
nuovi che vuoi che siano amministratori del cluster.
Impostare un utente di accesso
Puoi specificare un nome utente non root che vuoi utilizzare per l'accesso alle funzionalità sudo
senza password alle macchine dei nodi nel tuo cluster. La chiave SSH,
sshPrivateKeyPath,
deve funzionare per l'utente specificato. Le operazioni di creazione e aggiornamento del cluster verificano
che sia possibile accedere alle macchine dei nodi con l'utente e la chiave SSH specificati.
bmctl
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
annotations:
baremetal.cluster.gke.io/private-mode: "true"
spec:
nodeAccess:
loginUser: abm
Interfaccia a riga di comando gcloud
Specifica l'utente che vuoi utilizzare per accedere alle macchine dei nodi nel
flag --login-user, ad esempio:
gcloud container bare-metal clusters update abm-user-cluster1a \
--project=example-project-12345 \
--location=us-central1 \
--login-user=abm
Per attivare l'accesso sudo senza password per un utente, segui questi passaggi su ogni
macchina del nodo del cluster:
Utilizza
sudo visudoper aprire il file sudoers per la modifica:sudo visudo -f /etc/sudoersIl comando
visudoblocca il file sudoers per impedire modifiche simultanee e ne convalida la sintassi al momento del salvataggio.Per l'utente di accesso, aggiungi una voce al file sudoers come la seguente:
USERNAME ALL=(ALL) NOPASSWD: ALLChiudi e salva il file.
Per eseguire i comandi con i privilegi dell'utente di accesso, esegui questo comando:
su - USERNAMEPer verificare che non sia necessaria una password per l'utente di accesso per eseguire i comandi
sudo, esegui questo comandosudo:sudo ip a
Networking avanzato
Configura le funzionalità di networking avanzate in varie risorse personalizzate dopo la creazione del cluster. Per utilizzare le risorse personalizzate e le funzionalità di rete correlate, devi abilitare la rete avanzata quando crei il cluster.
bmctl
Imposta clusterNetwork.advancedNetworking
su true nella configurazione del cluster quando crei il cluster:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
spec:
clusterNetwork:
...
advancedNetworking: true
...
Interfaccia a riga di comando gcloud
Includi il flag --enable-advanced-networking nel comando gcloud container bare-metal clusters create quando crei il cluster.
Dopo aver creato il cluster con la funzionalità di rete avanzata abilitata, puoi configurare le risorse personalizzate descritte in questa sezione utilizzando kubectl apply.
NetworkGatewayGroup
La risorsa personalizzata NetworkGatewayGroup viene utilizzata per fornire indirizzi IP
mobili per funzionalità di networking avanzate, come il
gateway NAT in uscita o la
funzionalità di bilanciamento del carico in bundle con BGP.
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
name: default
namespace: cluster-bm
spec:
floatingIPs:
- 10.0.1.100
- 10.0.2.100
Bilanciamento del carico BGP
Configura il bilanciamento del carico BGP (Border Gateway Protocol) nella risorsa cluster e in altre risorse personalizzate. I comandi gcloud container bare-metal clusters
create e update supportano la configurazione di BGP nella risorsa cluster, ma non nelle risorse personalizzate.
Quando configuri i bilanciatori del carico integrati con BGP, il bilanciamento del carico del data plane utilizza, per impostazione predefinita, gli stessi peer esterni specificati per il peering del control plane. In alternativa, puoi configurare il bilanciamento del carico del data plane separatamente, utilizzando la risorsa personalizzata BGPLoadBalancer e la risorsa personalizzata BGPPeer. Per ulteriori informazioni, vedi
Configurazione di bilanciatori del carico integrati con BGP.
BGPLoadBalancer
apiVersion: networking.gke.io/v1
kind: BGPLoadBalancer
metadata:
name: default
namespace: cluster-bm
spec:
peerSelector:
cluster.baremetal.gke.io/default-peer: "true"
BGPPeer
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm
labels:
cluster.baremetal.gke.io/default-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
Aumentare l'intervallo di rete del servizio
Per creare più servizi rispetto al limite iniziale, puoi ridurre la maschera CIDR del servizio IPv4 per aumentare la rete di servizi del cluster. La riduzione della maschera (il valore dopo "/") comporta un intervallo di rete più ampio. Puoi solo aumentare l'intervallo del CIDR del servizio IPv4. L'intervallo di rete non può essere ridotto, il che significa che la maschera (il valore dopo "/") non può essere aumentata.
bmctl
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
spec:
...
clusterNetwork:
services:
cidrBlocks:
- 192.0.2.0/14
...
Interfaccia a riga di comando gcloud
Per aumentare l'intervallo del CIDR del servizio IPv4 in un cluster utente, specifica
il nuovo intervallo nel flag --island-mode-service-address-cidr-blocks.
gcloud container bare-metal clusters update cluster1 \
--project=example-project-12345 \
--location=us-central1 \
--island-mode-service-address-cidr-blocks=192.0.2.0/14
Configura le impostazioni di pull delle immagini kubelet
Kubelet viene eseguito su ciascun nodo del cluster. Kubelet è responsabile del monitoraggio dei container su un nodo e di assicurarsi che siano integri. Se necessario, kubelet esegue query ed estrae le immagini da Artifact Registry.
Aggiornare manualmente le configurazioni di kubelet e mantenerle sincronizzate in tutti i nodi del cluster può essere difficile. A peggiorare le cose, le modifiche manuali alla configurazione di kubelet sui nodi vengono perse quando esegui l'upgrade del cluster.
Per semplificare e rendere persistenti gli aggiornamenti sincronizzati, Google Distributed Cloud ti consente di specificare alcune impostazioni di kubelet per ciascuno dei node pool del cluster: nodi del control plane, nodi del bilanciatore del carico e nodi worker. Le impostazioni si applicano a tutti i nodi di un determinato pool e vengono mantenute durante gli upgrade del cluster. I campi per queste impostazioni sono modificabili, quindi puoi aggiornarli in qualsiasi momento, non solo durante la creazione del cluster.
bmctl
I seguenti campi supportati controllano le operazioni pull di Artifact Registry per kubelet:
registryBurst(valore predefinito: 10)registryPullQPS(valore predefinito: 5)serializeImagePulls(valore predefinito: true)
Per ulteriori informazioni su ciascuno dei campi di configurazione di kubelet, consulta il riferimento per il campo di configurazione del cluster.
Puoi specificare questi campi nelle sezioni kubeletConfig della specifica del cluster e
della specifica NodePool per i seguenti pool di nodi:
- Specifica del cluster:
- Nodi del control plane
spec.controlPlane.nodePoolSpec.kubeletConfig - Nodi del bilanciatore del carico
spec.loadBalancer.nodePoolSpec.kubeletConfig - Specifica NodePool:
- Nodi worker
spec.kubeletConfig
L'esempio seguente mostra i campi aggiunti con i relativi valori predefiniti nel file di configurazione del cluster. Tieni presente che l'annotazione preview.baremetal.cluster.gke.io/custom-kubelet: "enable" è obbligatoria.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
annotations:
preview.baremetal.cluster.gke.io/custom-kubelet: "enable"
spec:
...
controlPlane:
nodePoolSpec:
kubeletConfig:
registryBurst: 10
registryPullQPS: 5
serializeImagePulls: true
...
loadBalancer:
nodePoolSpec:
kubeletConfig:
registryBurst: 10
registryPullQPS: 5
serializeImagePulls: true
...
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
name: node-pool-new
namespace: cluster-cluster1
spec:
clusterName: cluster1
...
kubeletConfig:
registryBurst: 10
registryPullQPS: 5
serializeImagePulls: true
In ogni caso, l'impostazione si applica a tutti i nodi del pool.
Interfaccia a riga di comando gcloud
I seguenti flag controllano le operazioni di pull di Artifact Registry per kubelet:
Nodi del control plane
Nodi del bilanciatore del carico
- --bgp-load-balancer-registry-burst
- --bgp-load-balancer-registry-pull-qps
- --disable-bgp-load-balancer-serialize-image-pulls
- --enable-bgp-load-balancer-serialize-image-pulls
- --metal-lb-load-balancer-registry-burst
- --metal-lb-load-balancer-registry-pull-qps
- --disable-metal-lb-load-balancer-serialize-image-pull
- --enable-metal-lb-load-balancer-serialize-image-pulls
Nodi worker
Come utilizzarlo
Ecco alcune considerazioni per la regolazione dei pull di immagini:
Poiché le immagini vengono estratte in serie per impostazione predefinita, un'estrazione di immagini che richiede molto tempo può ritardare tutte le altre estrazioni di immagini pianificate su un nodo. Il pull ritardato delle immagini può bloccare la procedura di upgrade (soprattutto quando è necessario eseguire il deployment di nuove immagini Google Distributed Cloud su un nodo). Se riscontri ritardi nel pull delle immagini, puoi disattivare il pull seriale delle immagini per consentire il pull parallelo delle immagini.
Se riscontri errori di limitazione del pull delle immagini, ad esempio
pull QPS exceeded, potresti voler aumentare*-registry-pull-qpse*-registry-burstper aumentare la velocità effettiva del pull delle immagini. Questi due campi regolano la velocità di pull e le dimensioni della coda e possono contribuire a risolvere altri problemi correlati alla limitazione. Non sono consentiti valori negativi.
Personalizzazione di Keepalived
A partire dalla versione 1.32, Google Distributed Cloud offre alcune personalizzazioni della configurazione di Keepalived. Con il bilanciamento del carico in bundle, il bilanciatore del carico del control plane gestisce l'indirizzo IP virtuale (VIP) del control plane. Google Distributed Cloud esegue Keepalived e HAProxy come pod statici di Kubernetes sui nodi del bilanciatore del carico per annunciare il VIP del control plane. Keepalived utilizza il Virtual Router Redundancy Protocol (VRRP) sui nodi del bilanciatore del carico per l'alta disponibilità.
I cluster versione 1.32 e successive presentano le seguenti personalizzazioni di Keepalived:
Per i piani di controllo ad alta disponibilità, Google Distributed Cloud configura automaticamente la configurazione VRRP di Keepalived per rendere deterministico il comportamento di failover e impedire l'interleaving delle risposte ARP con diversi indirizzi MAC:
Ogni istanza di Keepalived viene configurata automaticamente con un valore
prioritydiverso nel router VRRP.Ogni istanza Keepalived viene configurata automaticamente con
nopreemptper evitare le elezioni quando viene riavviata un'istanza non master.
Google Distributed Cloud ti consente di specificare il numero di messaggi ARP gratuiti (GARP) da inviare contemporaneamente dopo che un nodo del control plane passa al ruolo di server master. Per modificare il numero di messaggi GARP da inviare, aggiungi il campo
controlPlane.loadBalancer.keepalivedVRRPGARPMasterRepeatal file di configurazione del cluster, impostalo sul nuovo valore e aggiorna il cluster. Questo valore è mappato all'impostazionevrrp_garp_master_repeatper Keepalived. Il valore predefinito è 5.L'esempio seguente mostra come specificare
keepalivedVRRPGARPMasterRepeatnel file di configurazione del cluster:apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: hybrid-ha-lb namespace: cluster-hybrid-ha-lb spec: type: hybrid profile: default anthosBareMetalVersion: 1.33 gkeConnect: projectID: project-fleet controlPlane: loadBalancer: keepalivedVRRPGARPMasterRepeat: 1 nodePoolSpec: nodes: - address: 10.200.0.2 - address: 10.200.0.3 - address: 10.200.0.4 ...
Installare o disinstallare l'operatore GPU NVIDIA incluso
L'operatore GPU NVIDIA consente di eseguire carichi di lavoro correlati alla GPU nei cluster. A partire dalla versione 1.33.0 di Google Distributed Cloud, i cluster vengono forniti in bundle con uno stack completo dell'operatore GPU NVIDIA per fornire una soluzione gestita per la gestione dei componenti software NVIDIA necessari per il provisioning delle GPU sui nodi worker del cluster.
Prerequisiti
Prima di installare l'operatore GPU NVIDIA in bundle, assicurati che il tuo ambiente soddisfi i seguenti requisiti:
Cluster operativo: hai creato un cluster bare metal funzionale con Google Distributed Cloud.
GPU NVIDIA: le GPU NVIDIA sono installate sui nodi worker del cluster. La seguente sezione per l'installazione dell'operatore GPU NVIDIA include i passaggi per verificare che le GPU siano installate correttamente e riconosciute dal sistema operativo.
Versione del driver NVIDIA compatibile: la versione del driver NVIDIA che utilizzi deve essere compatibile con la GPU, il sistema operativo e la versione di CUDA utilizzata dalle tue applicazioni. Per ulteriori informazioni, vedi Informazioni sulla versione.
Hai le seguenti opzioni di installazione del driver NVIDIA:
Utilizza il driver NVIDIA preinstallato nell'immagine del sistema operativo.
Segui le istruzioni della guida rapida all'installazione del driver NVIDIA per installare manualmente il driver NVIDIA.
Il driver GPU NVIDIA deve essere installato e pronto prima di attivare l'operatore GPU NVIDIA in bundle.
Informazioni sulla versione
Questa sezione contiene informazioni sulla versione software dell'operatore GPU NVIDIA incluso nel bundle.
Versioni dei componenti software
La versione 1.33 di Google Distributed Cloud include la versione 25.3.1 dell'operatore GPU NVIDIA. In Google Distributed Cloud, il bundle contiene le seguenti immagini:
- NVIDIA Container Toolkit versione v1.17.8
- NVIDIA DCGM Exporter v3.3.9-3.6.1
- Plug-in per dispositivi NVIDIA Kubernetes v0.17.1
- Node Feature Discovery v0.17.2
Le versioni delle immagini incluse nella release 1.33 di Google Distributed Cloud potrebbero non corrispondere esattamente alle versioni dei componenti software elencate nelle note di rilascio 25.3.1.
Compatibilità dei driver
Consulta Supporto delle piattaforme per la versione 25.3.1 nell'hub di documentazione NVIDIA per informazioni sulla compatibilità dei driver.
Aggiornamento dell'operatore GPU NVIDIA incluso
Se hai installato NVIDIA GPU Operator sul tuo cluster, quando esegui l'upgrade a una nuova versione secondaria, viene installata l'ultima versione in bundle di NVIDIA GPU Operator.
Installa l'operatore incluso
Mentre l'operatore GPU NVIDIA in bundle è in anteprima, installalo utilizzando
bmctl update per aggiungere la seguente annotazione al cluster con nodi GPU:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
annotations:
preview.baremetal.cluster.gke.io/nvidia-gpu-operator: "enable"
spec:
...
Lo stack dell'operatore GPU NVIDIA viene installato nel cluster quando viene applicata l'annotazione.
Disinstallare l'operatore incluso
Mentre l'operatore GPU NVIDIA in bundle è in anteprima, puoi disinstallarlo utilizzando
bmctl update per rimuovere la seguente annotazione dal cluster con nodi GPU:
preview.baremetal.cluster.gke.io/nvidia-gpu-operator: "enable"
Tutti i componenti dello stack dell'operatore GPU NVIDIA vengono rimossi dal cluster quando viene rimossa l'annotazione.
Attivare l'allocazione dinamica delle risorse
L'allocazione dinamica delle risorse è un'API Kubernetes che ti consente di richiedere e condividere risorse generiche, come le GPU, tra pod e container. I driver di terze parti gestiscono queste risorse. Questa funzionalità ti aiuta a eseguire carichi di lavoro di AI allocando in modo dinamico e preciso le risorse GPU all'interno dei cluster bare metal, migliorando l'utilizzo delle risorse e le prestazioni per i carichi di lavoro più impegnativi.
L'allocazione dinamica delle risorse è disponibile in anteprima per i cluster versione 1.33 e successive. Le istruzioni seguenti descrivono come configurare il cluster per utilizzare l'allocazione dinamica delle risorse. Una volta attivata, puoi configurare i tuoi workload GPU in modo che utilizzino l'allocazione dinamica delle risorse.
Configura il cluster per attivare l'allocazione dinamica delle risorse:
Modifica il file di configurazione del cluster per includere l'annotazione di anteprima
preview.baremetal.cluster.gke.io/dynamic-resource-allocation: "enable"e aggiungiDynamicResourceAllocation: trueinfeatureGatesnella sezionekubeletConfig:apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: dra namespace: cluster-dra annotations: preview.baremetal.cluster.gke.io/dynamic-resource-allocation: "enable" spec: controlPlane: nodePoolSpec: kubeletConfig: featureGates: DynamicResourceAllocation: true # ... other cluster configurationAggiorna il cluster eseguendo il comando
bmctl update:bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIGSostituisci quanto segue:
CLUSTER_NAME: il nome del cluster di utenti che stai aggiornando.ADMIN_KUBECONFIG: il percorso del file kubeconfig del cluster di amministrazione.
Dopo aver applicato questa configurazione, il campo
READYper le tue macchine bare metal potrebbe passare daTrueaFalsepiù volte. Attendi che il campoREADYsi stabilizzi suTrueprima di procedere.Per abilitare il gate funzionalità
DynamicResourceAllocationnei node pool che hanno nodi con GPU, impostaDynamicResourceAllocationsutruenella sezionefeatureGatesdella sezionekubeletConfigdella specifica NodePool:Per istruzioni su come aggiungere e aggiornare un pool di nodi, vedi Gestire i node pool in un cluster.
apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool metadata: name: np namespace: cluster-dra spec: clusterName: dra kubeletConfig: featureGates: DynamicResourceAllocation: true nodes: # ... other node pool configurationDopo aver aggiunto o aggiornato il pool di nodi, attendi che tutte le macchine bare metal nel pool di nodi raggiungano lo stato
Ready.Per controllare lo stato delle macchine bare metal del cluster, utilizza il seguente comando:
kubectl get baremetalmachines --kubeconfig ADMIN_KUBECONFIG -AQuando le macchine bare metal sono pronte, la risposta dovrebbe essere simile alla seguente risposta di esempio:
NAMESPACE NAME CLUSTER READY INSTANCEID MACHINE ABM VERSION DESIRED ABM VERSION cluster-admin 10.200.0.2 dra true baremetal://10.200.0.2 10.200.0.2 1.33.0-gke.793 1.33.0-gke.793 cluster-user-dra 10.200.0.6 user-dra true baremetal://10.200.0.6 10.200.0.6 1.33.0-gke.793 1.33.0-gke.793 cluster-user-dra 10.200.0.7 user-dra true baremetal://10.200.0.7 10.200.0.7 1.33.0-gke.793 1.33.0-gke.793 cluster-user-dra 10.200.0.8 user-dra true baremetal://10.200.0.8 10.200.0.8 1.33.0-gke.793 1.33.0-gke.793
Limitazioni
L'operatore GPU NVIDIA incluso presenta le seguenti limitazioni:
L'operatore GPU NVIDIA incluso supporta solo i seguenti componenti software NVIDIA:
- NVIDIA Container Toolkit
- NVIDIA DCGM Exporter
- Plug-in per dispositivi Kubernetes NVIDIA
- NVIDIA MIG Manager per Kubernetes.
Durante l'anteprima, la configurazione dell'operatore GPU NVIDIA è fissa. Se tenti di personalizzare le impostazioni, queste vengono ripristinate in base alle impostazioni di installazione originali.
L'operatore GPU NVIDIA incluso non può essere utilizzato per installare i driver GPU NVIDIA.
Durante l'anteprima, questa funzionalità utilizza il gruppo API
resource.k8s.io/v1beta1, che differisce dal gruppo API Kubernetes open source per questa funzionalità,resource.k8s.io/v1. Il gruppo di API open sourcev1offre più funzionalità e una migliore stabilità rispetto al gruppo di APIv1beta1.
Passaggi successivi
Per utilizzare l'allocazione dinamica delle risorse con i carichi di lavoro GPU, consulta Gestire i dispositivi GPU con l'allocazione dinamica delle risorse.
Per saperne di più sull'allocazione dinamica delle risorse, consulta Allocazione dinamica delle risorse nella documentazione di Kubernetes.