Dopo aver creato un cluster con bmctl
, puoi modificare alcuni aspetti della configurazione del cluster eseguendo la sequenza di azioni seguente:
Modifica i valori di alcuni campi nel file di configurazione del cluster, che per impostazione predefinita si trova qui:
bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yaml
.Aggiorna il cluster eseguendo il comando
bmctl update
.
In questo modo, puoi, ad esempio, aggiungere o rimuovere nodi in un cluster oppure sostituire i nodi in un cluster. Questo documento descrive come eseguire questi e altri aggiornamenti a un cluster.
Tuttavia, è importante notare che molti aspetti della configurazione del cluster sono immutabili e non possono essere aggiornati dopo aver creato il cluster. Per un elenco completo dei campi modificabili e immutabili, consulta il riferimento sui campi di configurazione del cluster. Il riferimento del campo è una tabella ordinabile. Fai clic sulle intestazioni delle colonne per modificare l'ordine. Fai clic sul nome di un campo per visualizzarne la descrizione.
Aggiungi o rimuovi nodi in un cluster
Un pool di nodi è un gruppo di nodi all'interno di un cluster con 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 determinato pool di nodi. La rimozione di un nodo da un pool di nodi equivale alla rimozione completa del nodo dal cluster.
Esistono tre tipi di pool di nodi in GDCV per Bare Metal: piano di controllo, bilanciatore del carico e pool di nodi worker.
Puoi aggiungere o rimuovere 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. Il seguente elenco mostra la sezione da modificare per un determinato pool di nodi:
- Pool di nodi worker: aggiungi o rimuovi l'indirizzo IP del nodo nella sezione
spec.nodes
della specificaNodePool
. - Pool di nodi del piano di controllo: aggiungi o rimuovi l'indirizzo IP del nodo nella sezione
spec.controlPlane.nodePoolSpec.nodes
della specificaCluster
. - Pool di nodi del bilanciatore del carico: aggiungi o rimuovi l'indirizzo IP del nodo nella sezione
spec.loadBalancer.nodePoolSpec.nodes
della specificaCluster
.
Esempio: come 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: 172.18.0.5
- address: 172.18.0.6
Per rimuovere un nodo:
(Facoltativo) Se il nodo che stai rimuovendo esegue pod critici, imposta prima il nodo in modalità di manutenzione.
Puoi monitorare il processo di svuotamento dei nodi per i nodi worker visualizzando i campi
status.nodesDrained
estatus.nodesDraining
nella risorsaNodePool
.Modifica il file di configurazione del cluster per eliminare la voce dell'indirizzo IP per il nodo.
Aggiorna il cluster:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del cluster che vuoi aggiornare.ADMIN_KUBECONFIG
: il percorso del file kubeconfig del cluster di amministrazione.
Dopo la corretta esecuzione del comando
bmctl update
, occorre un po' di tempo per completare i jobmachine-preflight
emachine-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.
Forzare la rimozione di un nodo
Se il comando bmctl update
non è in grado di rimuovere un nodo, potresti dover forzarne
la rimozione dal cluster. Per maggiori dettagli, consulta
Forzare la rimozione dei nodi rotti.
Sostituisci i nodi del piano di controllo ad alta disponibilità
Puoi sostituire i nodi del piano di controllo ad alta disponibilità nei cluster di amministrazione, utente, autonomi e ibridi.
Per sostituire un nodo in un cluster, segui questi passaggi:
- 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.
Il resto di questa sezione illustra un esempio.
Ecco un file di configurazione del cluster di esempio che mostra tre nodi del piano di controllo 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: 10.200.0.11
- address: 10.200.0.12
- address: 10.200.0.13
Per sostituire l'ultimo nodo elencato nella sezione spec.controlPlane.nodePoolSpec.nodes
, segui questi passaggi:
Rimuovi il nodo eliminando la relativa voce di indirizzo IP nel file di configurazione del cluster. Dopo aver apportato questa modifica, il file di configurazione del cluster dovrebbe avere un aspetto simile a questo:
--- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-cluster namespace: cluster-user-cluster spec: controlPlane: nodePoolSpec: nodes: - address: 10.200.0.11 - address: 10.200.0.12
Aggiorna il cluster eseguendo questo comando:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=KUBECONFIG
Apporta le seguenti modifiche:
- Sostituisci CLUSTER_NAME con il nome del cluster che vuoi aggiornare.
- Se il cluster è a gestione autonoma (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 admin.
Dopo la corretta esecuzione del comando
bmctl update
, il completamento dei jobmachine-preflight
emachine-init
richiede un po' di tempo. Puoi visualizzare lo stato dei nodi e dei rispettivi pool di nodi eseguendo i comandi descritti nella sezione Verifica i tuoi aggiornamenti di questo documento. Quando il pool di nodi e i nodi sono in stato Pronto, puoi andare al passaggio successivo.Aggiungi un nuovo nodo del piano di controllo al pool di nodi aggiungendo l'indirizzo IP del nuovo nodo del piano di controllo alla sezione
spec.controlPlane.nodePoolSpec.nodes
del file di configurazione del cluster. Dopo aver apportato questa modifica, il file di configurazione del cluster dovrebbe avere il seguente aspetto:--- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-cluster namespace: cluster-user-cluster spec: controlPlane: nodePoolSpec: nodes: - address: 10.200.0.11 - address: 10.200.0.12 - address: 10.200.0.14
Aggiorna il cluster eseguendo questo comando:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=KUBECONFIG
Apporta le seguenti modifiche:
- Sostituisci CLUSTER_NAME con il nome del cluster che vuoi aggiornare.
- Se il cluster è a gestione autonoma (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 admin.
Verificare gli aggiornamenti
Puoi visualizzare lo stato dei nodi e dei rispettivi pool di nodi con il comando kubectl get
.
Ad esempio, il comando seguente 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
significa che il passaggio di riconciliazione è ancora in corso. Devi attendere che lo stato passi a Reconciling=0
.
Puoi anche controllare lo stato dei nodi in un cluster eseguendo questo comando:
kubectl get nodes --kubeconfig=KUBECONFIG
Se hai bisogno di ulteriori informazioni su come diagnosticare i cluster, consulta Creare snapshot per la diagnostica dei cluster.
Funzionalità che puoi modificare con un aggiornamento
Oltre ad aggiungere, rimuovere o sostituire nodi, puoi utilizzare il comando bmctl update
per modificare determinati valori di campi modificabili, risorse personalizzate (CR) e annotazioni nel file di configurazione del cluster.
Per aggiornare una risorsa cluster, modifica il file di configurazione del cluster e utilizza bmctl update
per applicare le modifiche.
Le seguenti sezioni descrivono alcuni esempi comuni per l'aggiornamento di un cluster esistente mediante la modifica di un valore di campo, di una RP o di un'annotazione.
loadBalancer.addressPools
La sezione addressPools
contiene i campi per specificare i pool di bilanciamento del carico per i bilanciatori del carico in bundle. Puoi aggiungere altri pool di indirizzi di bilanciamento del carico in qualsiasi momento, ma non puoi rimuovere o modificare alcun pool di indirizzi esistente.
addressPools:
- name: pool1
addresses:
- 192.168.1.0-192.168.1.4
- 192.168.1.240/28
- name: pool2
addresses:
- 192.168.1.224/28
Impedisci l'eliminazione involontaria del cluster
Se aggiungi l'annotazione baremetal.cluster.gke.io/prevent-deletion: "true"
al file di configurazione del cluster, non potrai 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:
bypassPreflightCheck
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 se applichi 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
loginUser
Puoi impostare il campo loginUser
nella configurazione dell'accesso al nodo. Questo campo supporta la funzionalità sudo
senza password per l'accesso alle macchine.
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
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.
Per utilizzare la risorsa personalizzata NetworkGatewayGroup
e le relative funzionalità di networking, devi impostare clusterNetwork.advancedNetworking
su true
quando crei i cluster.
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
name: default
namespace: cluster-bm
spec:
floatingIPs:
- 10.0.1.100
- 10.0.2.100
BGPLoadBalancer
Quando configuri i bilanciatori del carico in bundle con BGP, il bilanciamento del carico del piano dati utilizza, per impostazione predefinita, gli stessi peer esterni specificati per il peering del piano di controllo. In alternativa, puoi configurare separatamente il bilanciamento del carico del piano dati utilizzando la risorsa personalizzata BGPLoadBalancer
(e la risorsa personalizzata BGPPeer
). Per ulteriori informazioni, consulta Configurare i bilanciatori del carico in bundle con BGP.
apiVersion: networking.gke.io/v1
kind: BGPLoadBalancer
metadata:
name: default
namespace: cluster-bm
spec:
peerSelector:
cluster.baremetal.gke.io/default-peer: "true"
BGPPeer
Quando configuri i bilanciatori del carico in bundle con BGP, il bilanciamento del carico del piano dati utilizza, per impostazione predefinita, gli stessi peer esterni specificati per il peering del piano di controllo. In alternativa, puoi configurare separatamente il bilanciamento del carico del piano dati utilizzando la risorsa personalizzata BGPPeer
(e la risorsa personalizzata BGPLoadBalancer
). Per ulteriori informazioni, consulta Configurare i bilanciatori del carico in bundle con BGP.
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
NetworkAttachmentDefinition
Puoi utilizzare il comando bmctl update
per modificare NetworkAttachmentDefinition
risorse personalizzate che corrispondono alla rete.
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: gke-network-1
namespace: cluster-my-cluster
spec:
config: '{
"type": "ipvlan",
"master": "enp2342",
"mode": "l2",
"ipam": {
"type": "whereabouts",
"range": "172.120.0.0/24"
Aumenta il raggio d'azione della rete di servizi
Per creare più servizi rispetto al limite iniziale, puoi ridurre la maschera CIDR del servizio IPv4 per aumentare la rete di servizi del tuo cluster. La riduzione della maschera (il valore dopo "/") determina un intervallo di rete più ampio.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
spec:
...
clusterNetwork:
services:
cidrBlocks:
- 172.26.0.0/14
...
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.
Configura le impostazioni pull dell'immagine kubelet
kubelet viene eseguito su ciascun nodo del cluster. kubelet è responsabile del monitoraggio dei container su un nodo e assicurarsi che siano integri. Se necessario, kubelet esegue query ed estrae le immagini da Container Registry.
Aggiornare manualmente le configurazioni kubelet e mantenerle sincronizzate su tutti i nodi del cluster può essere difficile. Inoltre, le modifiche manuali alla configurazione di kubelet sui nodi andranno perse quando esegui l'upgrade del cluster.
Per rendere gli aggiornamenti sincronizzati più semplici e permanenti, GKE su Bare Metal consente di specificare alcune impostazioni kubelet per ciascuno dei tuoi pool di nodi cluster: nodi del piano di controllo, del bilanciatore del carico e nodi worker. Le impostazioni si applicano a tutti i nodi in 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.
I seguenti campi supportati controllano le operazioni di pull di Container Registry per kubelet:
registryBurst
(valore predefinito: 10)registryPullQPS
(valore predefinito: 5)serializeImagePulls
(valore predefinito: true)
Per saperne di più su ciascuno dei campi di configurazione kubelet, consulta la sezione Riferimento sui campi di configurazione del cluster.
Puoi specificare questi campi in kubeletConfig
sezioni della specifica del cluster e
nella specifica del pool di nodi per i seguenti pool di nodi:
- Specifica del cluster:
- Nodi del piano di controllo
spec.controlPlane.nodePoolSpec.kubeletConfig
- Nodi del bilanciatore del carico
spec.loadBalancer.nodePoolSpec.kubeletConfig
- Nodi del piano di controllo
- Specifiche del pool di nodi:
- Nodi worker
spec.kubeletConfig
- Nodi worker
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 nel pool.
Come utilizzarlo
Ecco alcune considerazioni per ottimizzare i pull delle immagini:
Poiché le immagini vengono estratte in serie per impostazione predefinita, un pull di immagini che richiede molto tempo può ritardare tutti gli altri pull di immagini pianificati su un nodo. Il ritardo di pull delle immagini può bloccare il processo di upgrade (soprattutto quando è necessario eseguire il deployment di nuove immagini GKE su Bare Metal su un nodo). Se sono interessati i ritardi di pull delle immagini, puoi impostare
serializeImagePulls
sufalse
per consentire il pull parallelo delle immagini.Se riscontri errori di limitazione del pull dell'immagine, come
pull QPS exceeded
, ti consigliamo di aumentareregistryPullQPS
eregistryBurst
per aumentare la velocità effettiva di pull dell'immagine. Questi due campi regolano la frequenza di pull e le dimensioni della coda e possono aiutare a risolvere altri problemi relativi alla limitazione. I valori negativi non sono consentiti.
Utilizza bmctl update
per applicare le modifiche
Dopo aver modificato il file di configurazione, aggiorna il cluster eseguendo questo comando bmctl update
:
bmctl update cluster -c CLUSTER_NAME --kubeconfig=KUBECONFIG
Apporta le seguenti modifiche:
- Sostituisci CLUSTER_NAME con il nome del cluster che vuoi aggiornare.
- Se il cluster è a gestione autonoma (ad esempio un cluster di amministrazione o autonomo), sostituisci KUBECONFIG con il percorso del file kubeconfig del cluster. Se il cluster è un cluster utente, sostituisci KUBECONFIG con il percorso del file kubeconfig del cluster admin.