Aggiornamento cluster

Dopo aver creato un cluster, puoi modificare alcuni aspetti della sua configurazione. Ad esempio, puoi:

  • Aggiungere, rimuovere o sostituire nodi.
  • Aggiungi o rimuovi annotazioni per il cluster.
  • Modifica i valori dei campi modificabili nelle risorse del cluster e del pool di nodi.
  • Modificare altre risorse personalizzate.

Puoi utilizzare bmctl o Google Cloud CLI per aggiornare un cluster. Se hai creato un cluster di amministrazione o un cluster 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 la documentazione di riferimento sui campi di configurazione del cluster. Il riferimento del campo è una tabella ordinabile. Fai clic sulle intestazioni delle colonne per modificare l'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 bmctl per aggiornare altri tipi di cluster.

  • gcloud CLI e Terraform supportano solo le modifiche alle risorse del cluster e del pool di nodi. Devi utilizzare kubectl o bmctl per aggiornare le altre risorse personalizzate che interessano il cluster.

Come aggiornare i cluster

In genere, si esegue la seguente sequenza di azioni per aggiornare un cluster:

bmctl

  1. 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.yaml

  2. Aggiorna il cluster eseguendo il comando bmctl update:

    bmctl update cluster -c CLUSTER_NAME --kubeconfig=KUBECONFIG
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster che vuoi 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

  1. Specifica solo i flag per la configurazione che vuoi modificare.

  2. Esegui il comando di aggiornamento applicabile:

Terraform

  1. Modifica i valori dei campi applicabili nel file di configurazione Terraform che hai utilizzato per creare il cluster o il pool di nodi. Per le descrizioni dettagliate dei campi, consulta la documentazione di riferimento di Terraform:

  2. Aggiorna la configurazione eseguendo il comando terraform apply.

Le sezioni seguenti descrivono alcuni esempi comuni per l'aggiornamento di un cluster esistente.

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. Rimuovere un nodo da un pool di nodi equivale a rimuoverlo completamente dal cluster.

In Google Distributed Cloud esistono tre tipi di pool di nodi: piano di controllo, bilanciatore del carico e pool di nodi worker. Le seguenti sezioni descrivono come aggiungere o rimuovere nodi da ciascun tipo di pool di nodi.

bmctl

Puoi aggiungere o rimuovere un nodo da un pool di nodi aggiungendo o rimuovendo il relativo indirizzo IP in una sezione specifica del file di configurazione del cluster. L'elenco seguente mostra quale sezione modificare per un determinato pool di nodi:

  • Pool di nodi worker: aggiungi o rimuovi l'indirizzo IP del nodo nella sezione spec.nodes della specifica NodePool.
  • Pool di nodi del piano di controllo: aggiungi o rimuovi l'indirizzo IP del nodo nella sezione spec.controlPlane.nodePoolSpec.nodes della specifica Cluster.
  • Pool di nodi del bilanciatore del carico: aggiungi o rimuovi l'indirizzo IP del nodo nella sezione spec.loadBalancer.nodePoolSpec.nodes della specifica Cluster.

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:

  1. (Facoltativo) Se il nodo che vuoi rimuovere esegue pod critici, mettilo prima in modalità di manutenzione.

    Puoi monitorare il processo di svuotamento dei nodi per i nodi worker visualizzando i campi status.nodesDrained e status.nodesDraining nella risorsa NodePool.

  2. Modifica il file di configurazione del cluster per eliminare la voce dell'indirizzo IP per il nodo.

  3. Aggiorna il cluster:

    bmctl update cluster1 \
        --kubeconfig=ADMIN_KUBECONFIG
    

Interfaccia a riga di comando gcloud

Puoi utilizzare un comando update per aggiungere o rimuovere nodi. Il comando update utilizzato 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 update e specifica l'indirizzo IP nel flag --node-configs 'node-ip=IP_ADDRESS'.

  • Pool di nodi del piano di controllo su un cluster di amministrazione: esegui gcloud container bare-metal admin-clusters update e specifica l'indirizzo IP nel flag --control-plane-node-configs 'node-ip=IP_ADDRESS'.

  • Pool di nodi del piano di controllo su un cluster utente: esegui gcloud container bare-metal clusters update e 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 update e specifica l'indirizzo IP nel flag --metal-lb-load-balancer-node-configs 'node-ip=IP_ADDRESS' oppure
    --bgp-load-balancer-node-configs 'node-ip=IP_ADDRESS'

Il flag in cui specifichi l'indirizzo IP accetta solo un node-ip. Includi il flag per ogni indirizzo IP nel pool di nodi.

I comandi update sostituiscono tutti gli indirizzi IP con gli indirizzi IP da te specificati. Per aggiungere un nodo, includi gli indirizzi IP dei nodi esistenti e l'indirizzo IP del nuovo nodo nel comando update. Allo stesso modo, puoi rimuovere 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 i dati di esempio. Altri comandi dell'interfaccia a riga di comando gcloud che potresti trovare utili sono inclusi nei passaggi seguenti.

  1. (Facoltativo) Se il nodo che vuoi rimuovere esegue pod critici, mettilo prima in modalità di manutenzione.

    Puoi monitorare il processo di svuotamento dei nodi per i nodi worker visualizzando i campi status.nodesDrained e status.nodesDraining nella risorsa NodePool.

  2. Esegui il comando list per 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-central1
    

    L'output è simile al seguente:

    NAME         LOCATION     STATE
    node-pool-1  us-central1  RUNNING
    node-pool-2  asia-east1   RUNNING
    
  3. Esegui il comando describe per 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-central1
    

    L'output di esempio seguente è troncato per migliorarne la leggibilità:

    annotations:
      ...
      baremetal.cluster.gke.io/version: 1.29
    ...
    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
    ...
    

    Tieni presente quanto segue nell'output di esempio:

    • Il campo name contiene 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 esempio node-pool-1, insieme ai flag --cluster, --project e --location.

    • La sezione nodeConfigs contiene due campi nodeIp con gli indirizzi IP dei nodi.

  4. 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 update sostituisce tutti gli indirizzi IP con gli indirizzi IP da te specificati. Poiché 192.0.2.1 non è incluso, il nodo viene rimosso.

    L'output del comando è simile al seguente:

    Waiting for operation [projects/example-project-12345/locations/us-central1/operations/operation-1697154681749-6078d9def4030-76686d6e-9fcb1de9] to complete
    

    Nell'output di esempio, la stringa operation-1697154681749-6078d9def4030-76686d6e-9fcb1de9 è il OPERATION_ID dell'operazione a lunga esecuzione. Puoi conoscere 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-central1
    

    Puoi eseguire nuovamente il comando ogni tanto per controllare lo stato.

Se la rimozione del nodo non va a buon fine, puoi forzarne la rimozione dal cluster. Per maggiori dettagli, consulta Rimozione forzata dei nodi guasti.

Sostituisci i nodi del piano di controllo ad alta disponibilità

bmctl

Puoi utilizzare bmctl per sostituire i nodi del piano di controllo ad alta disponibilità in tutti i tipi di cluster.

Puoi sostituire un nodo in un cluster eseguendo 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.

Esempio: sostituire un nodo del piano di controllo ad alta disponibilità

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: 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:

  1. Rimuovi il nodo eliminando la voce dell'indirizzo IP nel file di configurazione del cluster. Dopo aver apportato la modifica, il file di configurazione del cluster dovrebbe avere un aspetto 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
    
  2. 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 è un cluster a gestione autonoma (ad esempio 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. Dopo l'esecuzione del comando bmctl update, occorre un po' di tempo per completare i job machine-preflight e machine-init. Puoi visualizzare lo stato dei nodi e dei rispettivi pool di nodi eseguendo i comandi descritti nella sezione Verificare gli aggiornamenti di questo documento. Quando il pool di nodi e i nodi sono in stato Pronto, puoi procedere con il 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 la modifica, il file di configurazione del cluster dovrebbe avere un aspetto 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.14
    
  5. Aggiorna il cluster eseguendo questo comando:

    bmctl update cluster -c CLUSTER_NAME \
      --kubeconfig=KUBECONFIG
    

Interfaccia a riga di comando gcloud

Puoi utilizzare gcloud CLI per sostituire i nodi del piano di controllo ad alta disponibilità nei cluster di amministrazione e utente.

Puoi sostituire un nodo in un cluster eseguendo questi passaggi:

  1. Rimuovi l'indirizzo IP del nodo eseguendo il comando update applicabile:

    • Cluster utente: gcloud container bare-metal clusters update
    • Cluster di amministrazione: gcloud container bare-metal admin-clusters update
  2. Controlla lo stato della rimozione dei nodi nel cluster eseguendo gcloud container bare-metal operations describe OPERATION_ID.

  3. Aggiungi l'indirizzo IP del nuovo nodo eseguendo il comando update applicabile.

Esempio: sostituire un nodo del piano di controllo ad alta disponibilità

Questa sezione mostra come sostituire un piano di controllo da un cluster utilizzando i dati di esempio. Altri comandi dell'interfaccia a riga di comando gcloud che potresti trovare utili sono inclusi nei passaggi seguenti.

  1. Esegui il comando list per elencare tutti i cluster utente in un progetto Google Cloud:

    gcloud container bare-metal clusters list \
        --project=example-project-12345 \
        --location=-
    

    La configurazione di --location=- consente di elencare tutti i cluster in tutte le regioni. Se devi ridurre l'ambito dell'elenco, imposta --location su una regione specifica.

    L'output è simile al seguente:

    NAME                 LOCATION      VERSION   ADMIN_CLUSTER        STATE
    abm-user-cluster1a   us-central1   1.29      abm-admin-cluster1   RUNNING
    abm-user-cluster1b   europe-west1  1.29      abm-admin-cluster1   RUNNING
    
  2. Esegui il comando describe sul cluster:

    gcloud container bare-metal clusters describe abm-user-cluster1  \
        --project=example-project-12345 \
        --location=us-central1
    

    L'output di esempio è troncato per migliorarne la 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
    ...
    

    Tieni presente quanto segue nell'output di esempio:

    • Il campo name contiene 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 esempio abm-user-cluster1a, insieme a --project e --location flags.

    • La sezione nodeConfigs contiene tre campi nodeIp con gli indirizzi IP dei nodi del piano di controllo.

  3. 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 del comando è simile al seguente:

    Waiting for operation [projects/example-project-12345/locations/us-central1/operations/operation-1956154681749-6078d9def4030-76686d6e-9fcb1d7] to complete
    

    Nell'output di esempio, la stringa operation-1956154681749-6078d9def4030-76686d6e-9fcb1de7 è il OPERATION_ID dell'operazione a lunga esecuzione. Puoi conoscere 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-central1
    

    Puoi eseguire nuovamente il comando ogni tanto per controllare lo stato.

  4. 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'
    

Verifica 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 della riconciliazione è ancora in corso. Devi attendere che lo stato diventi Reconciling=0.

Puoi anche controllare lo stato dei nodi in un cluster eseguendo questo 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 fornisce 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 che utilizzi 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 maggiori informazioni su come diagnosticare i cluster, consulta Creare snapshot per la diagnosi dei cluster.

Pool di indirizzi del bilanciatore del carico

Bmctl

La sezione addressPools contiene i campi per specificare i pool di bilanciamento del carico per i bilanciatori del carico in bundle MetalLB e BGP (Border Gateway Protocol). Puoi aggiungere altri pool di indirizzi per il bilanciamento del carico in qualsiasi momento, ma non puoi rimuovere i pool di indirizzi esistenti. A partire da Google Distributed Cloud versione 1.16.0, puoi modificare i valori per 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 in qualsiasi momento altri pool di indirizzi di bilanciamento del carico per i bilanciatori del carico in bundle, ma non puoi rimuovere i pool di indirizzi esistenti. Il flag specificato 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): usa il flag --metal-lb-address-pools.
  • BGP (Border Gateway Protocol): 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 contiene 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 la piscina.

  • avoid-buggy-ips: se la imposti su True, il controller di gestione degli indirizzi IP (IPAM) non assegnerà gli indirizzi IP che terminano con .0 o .255 ai servizi. In questo modo si evita il problema dei bug nei dispositivi dei consumatori che inviano errori al traffico inviato a quegli indirizzi IP speciali. Se non specificato, il valore predefinito è False. A partire da Google Distributed Cloud versione 1.16.0, puoi modificare questo valore in un pool di indirizzi esistente.

  • manual-assign: se non vuoi che il controller IPAM assegni automaticamente gli indirizzi IP di questo pool ai servizi, impostalo su True. Successivamente, uno sviluppatore può creare un servizio di tipo LoadBalancer e specificare manualmente uno degli indirizzi del pool. Se non specificato, il criterio manual-assign è impostato su False. A partire da Google Distributed Cloud versione 1.16.0, 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 intervallo con trattino. Per specificare un singolo indirizzo IP in un pool (ad esempio per il VIP in entrata), utilizza /32 nella notazione CIDR (ad esempio 192.0.2.1/32).

Tieni presente le seguenti regole di sintassi:

  • Racchiudi l'intero valore tra virgolette singole.
  • Lo spazio vuoto non è consentito.
  • 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 ulteriori informazioni sui pool di indirizzi del bilanciatore del carico, consulta loadBalancer.addressPools in Configurare 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 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:

Interfaccia a riga di comando gcloud

Se specifichi il flag --add-annotations con il valore baremetal.cluster.gke.io/prevent-deletion="true", non potrai eliminare il cluster. Ad esempio:

  1. 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"
    
  2. Tentativo di eliminare il cluster utente:

    gcloud container bare-metal clusters delete abm-user-cluster1a \
        --project=example-project-12345 \
        --location=us-central1 \
        --force \
        --allow-missing
    

    La risposta dal 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 cluster
    

    Per rimuovere l'annotazione, specifica --remove-annotations=baremetal.cluster.gke.io/prevent-deletion="true" nel comando update.

Bypassa i controlli preflight

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

Aggiungi o rimuovi amministratori cluster

bmctl

Puoi aggiungere o rimuovere un account utente o di servizio come amministratore di 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, fornendo 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 utente 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 hai specificato 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 account utente o 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 come amministratori del cluster.

Imposta un utente di accesso

Puoi specificare un nome utente non root che vuoi utilizzare per l'accesso con funzionalità sudo senza password alle macchine nodo nel tuo cluster. La chiave SSH, sshPrivateKeyPath, deve funzionare per l'utente specificato. Le operazioni di creazione e aggiornamento del cluster controllano che le macchine nodo siano accessibili 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

Puoi specificare l'utente che vuoi utilizzare per accedere alle macchine nodo 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 abilitare l'accesso a sudo senza password per un utente, segui questi passaggi su ogni macchina con nodo cluster:

  1. Usa sudo visudo per aprire il file sudoers per la modifica:

    sudo visudo -f /etc/sudoers
    

    Il comando visudo blocca il file sudoers per impedire modifiche simultanee e convalida la sintassi del file al momento del salvataggio.

  2. Per l'utente di accesso, aggiungi una voce al file sudoers come segue:

    USERNAME ALL=(ALL) NOPASSWD: ALL
    
  3. Chiudi e salva il file.

  4. Per eseguire comandi con i privilegi dell'utente di accesso, esegui questo comando:

    su - USERNAME
    
  5. Per verificare che non sia necessaria una password per consentire all'utente di accesso di eseguire i comandi sudo, esegui questo comando sudo:

    sudo ip a
    

Networking avanzato

Puoi configurare funzionalità di networking avanzate in varie risorse personalizzate dopo la creazione del cluster. Per utilizzare le risorse personalizzate e le relative funzionalità di networking, devi abilitare il networking avanzato quando crei il cluster.

bmctl

Imposta clusterNetwork.advancedNetworking su truenella 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 il networking avanzato abilitato, 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

Il bilanciamento del carico del BGP (Border Gateway Protocol) viene configurato 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 del cluster, ma non nelle risorse personalizzate.

Quando configuri 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 ulteriori informazioni, consulta Configurare i bilanciatori del carico in bundle 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

Aumenta l'intervallo 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 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 pull delle immagini kubelet

Il kubelet viene eseguito su ciascun nodo del cluster. Il kubelet deve monitorare i container su un nodo e assicurarsi che siano integri. Se necessario, il kubelet esegue query ed estrae immagini da Container Registry.

Aggiornare manualmente le configurazioni kubelet e mantenerle sincronizzate su tutti i nodi del cluster può essere difficile. Come peggioramento, le modifiche manuali alla configurazione dei kubelet sui nodi vanno perse quando esegui l'upgrade del cluster.

Per semplificare e rendere persistenti gli aggiornamenti sincronizzati, Google Distributed Cloud consente di specificare alcune impostazioni kubelet per ciascuno dei pool di nodi del cluster: nodi del piano di controllo, nodi del bilanciatore del carico e nodi worker. Le impostazioni si applicano a tutti i nodi in un determinato pool e vengono mantenute attraverso 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 Container Registry per kubelet:

  • registryBurst (valore predefinito: 10)
  • registryPullQPS (valore predefinito: 5)
  • serializeImagePulls (valore predefinito: true)

Per ulteriori informazioni su ciascun campo di configurazione del kubelet, consulta la documentazione di riferimento sui campi di configurazione del cluster.

Puoi specificare questi campi nelle sezioni kubeletConfig della specifica del cluster e del pool di nodi per i seguenti pool di nodi:

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.

Interfaccia a riga di comando gcloud

I seguenti flag controllano le operazioni di pull di Container Registry per kubelet:

Come utilizzarlo

Ecco alcune considerazioni per l'ottimizzazione dei pull delle immagini:

  • Poiché le immagini vengono estratte in serie per impostazione predefinita, un pull delle immagini che richiede molto tempo può ritardare tutti gli altri pull delle immagini pianificati su un nodo. I pull ritardati delle immagini possono bloccare il processo di upgrade (soprattutto quando è necessario eseguire il deployment di nuove immagini Google Distributed Cloud su un nodo). Se sono interessati i ritardi del pull delle immagini, puoi disabilitare il pull delle immagini in serializzazione per consentire i pull paralleli delle immagini.

  • Se si verificano errori di limitazione del pull delle immagini, come pull QPS exceeded, ti consigliamo di aumentare *-registry-pull-qps e *-registry-burst per aumentare la velocità effettiva di pull delle immagini. Questi due campi regolano la frequenza di pull e le dimensioni della coda e possono aiutarti a risolvere altri problemi relativi alla limitazione. Non sono consentiti valori negativi.

Documentazione di riferimento