Riavvio ed eliminazione dei cluster

Questo argomento spiega come arrestare e riavviare i cluster del carico di lavoro e come eliminarli.

Arresto e riavvio dei cluster del carico di lavoro

Potrebbe essere necessario arrestare e riavviare i cluster del carico di lavoro per consentire le interruzioni pianificate per la manutenzione della rete o il tempo di inattività pianificato della rete.

Prerequisiti

  • Il lease e la prenotazione DHCP per tutti i nodi del cluster in tutte le reti devono essere più lunghi dell'interruzione pianificata.
    • In questo modo, i nodi mantengono gli stessi indirizzi dopo il riavvio, che è una condizione necessaria.
  • jq installato in locale.
  • Backup di NSX Manager.

Procedura

  1. Eseguire il comando seguente per raccogliere informazioni sul database etcd:

    kubectl --kubeconfig /etc/kubernetes/admin.conf get pods `kubectl --kubeconfig /etc/kubernetes/admin.conf  get pods -A | grep etc | awk '{print $2}'` -n kube-system  -o=jsonpath='{.spec.containers[0].command}' | jq
    

    Output di esempio:

    [
      "etcd",
      "--advertise-client-urls=https://192.168.7.154:2379",
      "--cert-file=/etc/kubernetes/pki/etcd/server.crt",
      "--client-cert-auth=true",
      "--data-dir=/var/lib/etcd",
      "--initial-advertise-peer-urls=https://192.168.7.154:2380",
      "--initial-cluster=workload-vsphere-tkg2-control-plane-fk5hw=https://192.168.7.154:2380",
      "--key-file=/etc/kubernetes/pki/etcd/server.key",
      "--listen-client-urls=https://127.0.0.1:2379,https://192.168.7.154:2379",
      "--listen-metrics-urls=http://127.0.0.1:2381",
      "--listen-peer-urls=https://192.168.7.154:2380",
      "--name=workload-vsphere-tkg2-control-plane-fk5hw",
      "--peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt",
      "--peer-client-cert-auth=true",
      "--peer-key-file=/etc/kubernetes/pki/etcd/peer.key",
      "--peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt",
      "--snapshot-count=10000",
      "--trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt"
    ]
    
  2. Per ogni nodo del piano di controllo:

    1. Per accedere al nodo, eseguire il comando ssh.

    2. Eseguire il comando seguente per individuare l'eseguibile etcdctl corrispondente.

      find / -type f -name "*etcdctl*" -print
      

      Output di esempio:

       /run/containerd/io.containerd.runtime.v1.linux/k8s.io/823581f975804b65048f4babe2015a95cfa7ed6f767073796afe47b9d03299fb/rootfs/usr/local/bin/etcdctl`
       /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/19/fs/usr/local/bin/etcdctl
      
    3. Creare un file di backup etcd ed eseguire la verifica.

      1. Eseguire il comando seguente:

        ETCD-EXE snapshot save LOCAL-BACKUP --endpoints=ENDPOINTS --cacert=CA --cert=CERT --key=KEY
        

        In cui:

        • ETCD-EXE è il percorso locale dell'eseguibile etcdctl
        • LOCAL-BACKUP è il file locale in cui eseguire il backup, ad esempio /tmp/etcdBackup1.db
        • ENDPOINTS, CA, CERT e KEY sono i valori --advertise-client-urls, --peer-trusted-ca-file, --cert-file e --key-file registrati sopra

        Ad esempio:

        /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/19/fs/usr/local/bin/etcdctl snapshot save /tmp/etcdBackup1.db \
         --endpoints=https://192.168.7.154:2379 \
         --cacert=/etc/kubernetes/pki/etcd/ca.crt \
         --cert=/etc/kubernetes/pki/etcd/server.crt \
         --key=/etc/kubernetes/pki/etcd/server.key
        
        1. Verificare che il file il backup sia stato creato:

          ls -l  LOCAL-BACKUP
          
        2. Verificare il contenuto del backup generando uno snapshot dal file:

          ETCD-EXE --write-out=table snapshot status LOCAL-BACKUP
          
  3. Dalla macchina di bootstrap, eseguire la sequenza di comandi seguente per raccogliere informazioni sul cluster e salvarle in un file:

      tanzu cluster list -A > CLUSTER-INFO-1
      kubectl config get-contexts >> CLUSTER-INFO-1
      kubectl config use-context tkg-mgmt-vsphere-20211111074850-admin@tkg-mgmt-vsphere-20211111074850 >> CLUSTER-INFO-1
      kubectl get nodes -o wide >> CLUSTER-INFO-1
      kubectl config use-context mycluster1-admin@mycluster1 >> CLUSTER-INFO-1
      kubectl get nodes -o wide >> CLUSTER-INFO-1
      cat CLUSTER-INFO-1
    

    In cui CLUSTER-INFO-1 è un file di testo locale in cui salvare le informazioni, ad esempio /tmp/SaveClusterInfo1.txt.

  4. Svuotare tutte le applicazioni nei nodi worker.

  5. Arrestare tutte le macchine virtuali in vCenter nell'ordine seguente:

    1. Arrestare i nodi del piano di controllo del cluster di gestione.
    2. Arrestare i nodi worker del cluster di gestione.
    3. Arrestare i nodi del piano di controllo del cluster del carico di lavoro.
    4. Arrestare i nodi worker del cluster del carico di lavoro.
  6. Riavviare tutte le macchine virtuali in vCenter nell'ordine seguente:

    1. Avviare i nodi del piano di controllo del cluster del carico di lavoro.
    2. Avviare i nodi worker del cluster del carico di lavoro.
    3. Avviare i nodi del piano di controllo del cluster di gestione.
    4. Avviare i nodi worker del cluster di gestione.
  7. Eseguire la sequenza di comandi seguente per raccogliere informazioni sul cluster e salvarle in un file diverso:

    tanzu cluster list -A --include-management-cluster -A > CLUSTER-INFO-2
    kubectl config get-contexts >> CLUSTER-INFO-2
    kubectl config use-context tkg-mgmt-vsphere-20211111074850-admin@tkg-mgmt-vsphere-20211111074850 >> CLUSTER-INFO-2
    kubectl get nodes -o wide >> CLUSTER-INFO-2
    kubectl config use-context mycluster1-admin@mycluster1 >> CLUSTER-INFO-2
    kubectl get nodes -o wide >> CLUSTER-INFO-2
    cat CLUSTER-INFO-2
    

    In cui CLUSTER-INFO-2 è un file di testo locale diverso in cui salvare le informazioni, ad esempio /tmp/SaveClusterInfo2.txt.

  8. Confrontare i due file di informazioni del cluster per verificare che dispongano delle stesse informazioni sul cluster, ad esempio:

    sdiff /tmp/SaveClusterInfo1.txt /tmp/SaveClusterInfo2.txt
    

Eliminazione dei cluster del carico di lavoro

Per eliminare un cluster del carico di lavoro, eseguire il comando tanzu cluster delete. In base al contenuto del cluster e all'infrastruttura del cloud, potrebbe essere necessario eliminare i volumi e i servizi all'interno del cluster prima di eliminare il cluster stesso.

Importante

È necessario eliminare esplicitamente i cluster del carico di lavoro; non è possibile eliminarli eliminando il relativo spazio dei nomi nel cluster di gestione.

  1. Creare un elenco dei cluster.

    Per creare un elenco di tutti i cluster del carico di lavoro nel contesto di accesso corrente della CLI di Tanzu, eseguire il comando tanzu cluster list -A.

    tanzu cluster list -A
    
  2. Eliminare volumi e servizi.

    Se il cluster che si desidera eliminare contiene volumi o servizi persistenti, ad esempio bilanciamenti del carico e database, potrebbe essere necessario eliminarli manualmente prima di eliminare il cluster stesso. Le operazioni necessarie per questa eliminazione dipendono dall'infrastruttura del cloud:

    vSphere
    Se l'infrastruttura è vSphere, eseguire i passaggi seguenti.

    Eliminazione del tipo di servizio LoadBalancer

    Per eliminare il tipo di servizio LoadBalancer (servizio) in un cluster:

    1. Impostare kubectl sul contesto del cluster.

      kubectl config set-context my-cluster@user
      
    2. Recuperare l'elenco di servizi del cluster.

      kubectl get service
      
    3. Eliminare ogni tipo di servizio LoadBalancer.

      kubectl delete service <my-svc>
      

    Eliminazione di richieste di volumi persistenti e volumi persistenti

    Per eliminare gli oggetti Persistent Volume (PV) e Persistent Volume Claim (PVC) in un cluster:

    1. Eseguire kubectl config set-context my-cluster@user per impostare kubectl sul contesto del cluster.

    2. Eseguire kubectl get pvc per recuperare gli oggetti Persistent Volume Claim (PVC).

    3. Per ogni PVC:

      1. Eseguire kubectl describe pvc <my-pvc> per identificare l'oggetto PV a cui è associato. L'oggetto PV è indicato nell'output del comando come Volume dopo Status: Bound.

      2. Eseguire kubectl describe pv <my-pv> per stabilire se l'oggetto PV Bound Reclaim Policy è Retain o Delete.

      3. Eseguire kubectl delete pvc <my-pvc> per eliminare l'oggetto PVC.

      4. Se il criterio di recupero dell'oggetto PV è Retain, eseguire kubectl delete pv <my-pvc> e quindi accedere al portale cloud ed eliminare l'oggetto PV in tale portale. Ad esempio, eliminare un volume vSphere CNS dal riquadro del datastore > Monitora > Cloud Native Storage > Volumi container. Per ulteriori informazioni su vSphere CNS, vedere Guida introduttiva a Cloud Native Storage in vSphere.

    Amazon Web Services (AWS)
    Se l'infrastruttura è AWS, eseguire i passaggi seguenti.
    • Bilanciamenti del carico: bilanciamento del carico dell'applicazione o bilanciamento del carico della rete (ALB o NLB) nel VPC del cluster, ma non i bilanciamenti del carico classici (ELB v1). Eliminare queste risorse nell'interfaccia utente di AWS o con il comando kubectl delete.
    • Altri servizi: qualsiasi subnet e servizio supportato da AWS nel VPC del cluster, ad esempio RDS o VPC, e le risorse correlate, come:

      • VPC: eseguire l'eliminazione in Dashboard VPC (VPC Dashboard) > Virtual Private Cloud > VPC personali (Your VPCs).
      • RDS: eseguire l'eliminazione in Dashboard RDS (RDS Dashboard) > Database (Databases).
      • Subnet: eseguire l'eliminazione in Dashboard VPC (VPC Dashboard) > Virtual Private Cloud > Subnet (Subnets).
      • Tabelle di route: eseguire l'eliminazione in Dashboard VPC (VPC Dashboard) > Virtual Private Cloud > Tabelle di route (Route Tables).
      • Gateway Internet: eseguire l'eliminazione in Dashboard VPC (VPC Dashboard) > Virtual Private Cloud > Gateway Internet (Internet Gateways).
      • Indirizzi IP flessibili: eseguire l'eliminazione in Dashboard VPC (VPC Dashboard) > Virtual Private Cloud > IP flessibili.
      • Gateway NAT: eseguire l'eliminazione in Dashboard VPC (VPC Dashboard) > Virtual Private Cloud > Gateway NAT (NAT Gateways).
      • ACL di rete: eseguire l'eliminazione in Dashboard VPC (VPC Dashboard) > Sicurezza (Security) > ACL di rete (Network ACLs).
      • Gruppi di sicurezza: eseguire l'eliminazione in Dashboard VPC (VPC Dashboard) > Sicurezza (Security) > Gruppi di sicurezza (Security Groups).

      Eliminare queste risorse nell'interfaccia utente di AWS come indicato sopra o con la CLI aws.

    • Volumi persistenti e richieste di volumi persistenti: Eliminare queste risorse con il comando kubectl delete come descritto in Eliminazione di richieste di volumi persistenti e volumi persistenti di seguito.

    Azure
    Se l'infrastruttura è Azure, non è necessaria alcuna azione.

    Se si elimina un cluster, vengono eliminati tutti gli elementi creati da TKG nel gruppo di risorse del cluster.

  3. Se necessario, eseguire la migrazione dei carichi di lavoro dai cluster, ad esempio utilizzando Velero come descritto in Migrazione dei cluster e Filtro delle risorse nella documentazione di Velero.

  4. Eliminare i cluster.

    Per eliminare un cluster, eseguire tanzu cluster delete.

    tanzu cluster delete my-cluster
    

    Se il cluster è in esecuzione in uno spazio dei nomi diverso dallo spazio dei nomi default, è necessario specificare l'opzione --namespace per eliminare tale cluster.

    tanzu cluster delete my-cluster --namespace=my-namespace
    

    Per ignorare il passaggio di verifica yes/no quando si esegue tanzu cluster delete, specificare l'opzione --yes.

    tanzu cluster delete my-cluster --namespace=my-namespace --yes
    

    Per eliminare un cluster in AWS, la variabile AWS_REGION deve essere impostata sulla regione in cui il cluster è in esecuzione. È possibile impostare AWS_REGION nel profilo delle credenziali o nell'ambiente locale, come descritto in Configurazione delle credenziali dell'account AWS. Per eliminare il cluster in una regione diversa, anteporre l'impostazione al comando tanzu cluster delete:

    AWS_REGION=eu-west-1 tanzu cluster delete my-cluster
    
Importante

Non modificare il contesto o modificare il file .kube-tkg/config mentre sono in esecuzione le operazioni di Tanzu Kubernetes Grid.

check-circle-line exclamation-circle-line close-line
Scroll to top icon