Aggiorna cluster

Dopo aver creato un cluster con bmctl, puoi modificare alcuni aspetti della configurazione del cluster eseguendo la seguente sequenza di azioni:

  1. Modifica i valori di determinati campi nel file di configurazione del cluster, che per impostazione predefinita si trova qui: bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yaml.

  2. Aggiorna il cluster eseguendo il comando bmctl update.

In questo modo, puoi, ad esempio, aggiungere o rimuovere nodi in un cluster o sostituire i nodi in un cluster. Questo documento descrive come eseguire questi e altri aggiornamenti a un cluster.

È importante notare, tuttavia, che molti aspetti della configurazione del cluster sono immutabili e non possono essere aggiornati dopo aver creato il cluster. Per un elenco completo di campi modificabili e immutabili, consulta i riferimenti al campo di configurazione del cluster. Il riferimento ai campi è una tabella ordinabile. Fai clic sulle intestazioni di colonna per modificare l'ordinamento. 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 che ha la stessa configurazione. Ricorda 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 comporta la rimozione completa del nodo dal cluster.

Esistono tre tipi di pool di nodi nei cluster Anthos su 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 da una determinata sezione del file di configurazione del cluster. L'elenco seguente mostra quale sezione di un manifest devi modificare per un determinato pool di nodi:

  • Pool di nodi worker: aggiungi/rimuovi l'indirizzo IP del nodo dal campo spec.nodes visualizzato nella sezione kind: NodePool.
  • Pool di nodi del piano di controllo: aggiungi/rimuovi l'indirizzo IP del nodo dal campo spec.controlPlane.nodePoolSpec.nodes visualizzato nella sezione kind: Cluster.
  • Pool di nodi del bilanciatore del carico: non puoi modificare (aggiungere o rimuovere indirizzi IP) da un pool di indirizzi del bilanciatore del carico esistente né rimuovere un pool di indirizzi del bilanciatore del carico esistente. Dopo aver creato un cluster, puoi aggiungere solo nuovi pool di indirizzi.

Esempio: come rimuovere un nodo worker

Ecco un file di configurazione di 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

Puoi rimuovere un nodo dal pool di nodi worker procedendo nel seguente modo:

  1. Elimina la voce dell'indirizzo IP del nodo dal file di configurazione del cluster:

    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: nodepool1
      namespace: cluster-cluster1
    spec:
      clusterName: cluster1
      nodes:
      - address: 172.18.0.5
    
  2. Aggiorna il cluster:

    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 è un cluster autogestibile (ad esempio 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.

È importante notare che bmctl deve svuotare i pod da un nodo prima che sia possibile rimuovere il nodo. I nodi non vengono rimossi dal cluster se non è possibile riprogrammarli su altri nodi.

Una volta eseguito correttamente il comando bmctl update, occorre un po' di tempo per completare i job machine-preflight e machine-init. Puoi visualizzare lo stato dei nodi e i 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 riesce a rimuovere un nodo, potresti doverne forzare la rimozione dal cluster. Per maggiori dettagli, consulta la sezione Forzare la rimozione dei nodi non funzionanti.

Sostituisci i nodi del piano di controllo ad alta disponibilità

Puoi sostituire i nodi del piano di controllo ad alta disponibilità (HA) nei cluster di amministrazione, utente, autonomi e ibridi.

Per sostituire un nodo in un cluster, segui questi passaggi:

  1. Rimuovi l'indirizzo IP del nodo dal file di configurazione del cluster.
  2. Aggiorna il cluster.
  3. Controlla lo stato dei nodi nel cluster.
  4. Aggiungi l'indirizzo IP di un nuovo nodo allo stesso file di configurazione del cluster.
  5. Aggiorna il cluster.

Il resto della sezione mostra un esempio.

Ecco un file di configurazione di 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, procedi nel seguente modo:

  1. 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 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
    
  2. Aggiorna il cluster eseguendo il comando seguente:

    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 è un cluster autogestibile (ad esempio 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.
  3. Una volta eseguito correttamente il comando bmctl update, occorre un po' di tempo per completare i job machine-preflight e machine-init. Puoi visualizzare lo stato dei nodi e i rispettivi pool di nodi eseguendo i comandi descritti nella sezione Verifica gli aggiornamenti di questo documento. Quando il pool di nodi e i nodi sono pronti, puoi andare al passaggio successivo.

  4. 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 l'aspetto seguente:

    ---
    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
    
  5. Aggiorna il cluster eseguendo il comando seguente:

    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 è un cluster autogestibile (ad esempio 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 i 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 significa che il passaggio di riconciliazione è ancora in corso. Devi attendere finché lo stato non cambia in Reconciling=0.

Puoi anche controllare lo stato dei nodi in un cluster eseguendo questo comando:

kubectl get nodes --kubeconfig=KUBECONFIG

Se hai bisogno di maggiori informazioni su come diagnosticare i cluster, vedi Creare snapshot per la diagnosi dei cluster.

Funzionalità che puoi modificare con un aggiornamento

Oltre ad aggiungere, rimuovere o sostituire i 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 del 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 modificando un valore di campo, una RP o un'annotazione.

loadBalancer.addressPools

La sezione addressPools contiene 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 i pool di indirizzi esistenti.

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

Impedire l'eliminazione involontaria del cluster

Se aggiungi l'annotazione baremetal.cluster.gke.io/prevent-deletion: "true" al file di configurazione del cluster, ti viene impedito di 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 e 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

loginUser

Puoi impostare il campo loginUser nella configurazione dell'accesso al nodo. Questo campo supporta la funzionalità sudo senza password per l'accesso alla macchina.

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 le 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 il bilanciamento del carico del piano dati separatamente, utilizzando la risorsa personalizzata BGPLoadBalancer e la risorsa personalizzata BGPPeer. Per saperne di più, consulta Configura 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 il bilanciamento del carico del piano dati separatamente, utilizzando la risorsa personalizzata BGPPeer e la risorsa personalizzata BGPLoadBalancer. Per saperne di più, consulta Configura 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 le risorse personalizzate NetworkAttachmentDefinition 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"

Dopo aver modificato il file di configurazione, aggiorna il cluster eseguendo il 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 è un cluster autogestibile (ad esempio 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.