Sostituzione di una replica etcd non riuscita

Questo documento descrive come sostituire una replica etcd non riuscita in un cluster di utenti ad alta disponibilità (HA) per Google Distributed Cloud.

Le istruzioni riportate qui si applicano a un cluster utente ad alta disponibilità che utilizza kubeception; ovvero un cluster utente in cui non è attivato Controlplane V2. Se devi sostituire una replica etcd in un cluster utente in cui è attivato Controlplane V2, contatta l'assistenza clienti Google Cloud.

Prima di iniziare

  • Assicurati che il cluster di amministrazione funzioni correttamente.

  • Assicurati che gli altri due membri etcd nel cluster utente funzionino correttamente. Se più di un membro etcd ha avuto un errore, consulta Recupero da corruzione o perdita di dati etcd.

Sostituzione di una replica etcd non riuscita

  1. Esegui il backup di una copia del PodDisruptionBudget (PDB) di etcd in modo da poterlo ripristinare più tardi.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME get pdb kube-etcd-pdb -o yaml > PATH_TO_PDB_FILE

    Dove:

    • ADMIN_CLUSTER_KUBECONFIG è il percorso del file kubeconfig per il cluster di amministrazione.

    • USER_CLUSTER_NAME è il nome del cluster di utenti che contiene la replica etcd non riuscita.

    • PATH_TO_PDB_FILE è il percorso in cui vuoi salvare il file PDB di etcd, ad esempio /tmp/etcpdb.yaml.

  2. Elimina il PodDisruptionBudget (PDB) di etcd.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME delete pdb kube-etcd-pdb
  3. Esegui il seguente comando per aprire il StatefulSet kube-etcd nell'editor di testo:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME edit statefulset kube-etcd

    Modifica il valore del flag --initial-cluster-state in existing.

    containers:
        - name: kube-etcd
          ...
          args:
            - --initial-cluster-state=existing
          ...
     
  4. Scarica il nodo della replica etcd non riuscito.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG drain NODE_NAME --ignore-daemonsets --delete-local-data

    dove NODE_NAME è il nome del nodo della replica etcd non riuscita.

  5. Crea una nuova shell nel contenitore di uno dei pod kube-etcd funzionanti.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG exec -it \
       KUBE_ETCD_POD --container kube-etcd --namespace USER_CLUSTER_NAME \
       -- bin/sh

    Dove KUBE_ETCD_POD è il nome del pod kube-etcd in esecuzione. Ad esempio, kube-etcd-0.

    Da questa nuova shell, esegui i seguenti comandi:

    1. Rimuovi il nodo della replica etcd non riuscito dal cluster etcd.

      Innanzitutto, elenca tutti i membri del cluster etcd:

      etcdctl member list -w table

      L'output mostra tutti gli ID membro. Determina l'ID membro della replica con errore.

      Quindi, rimuovi la replica non riuscita:

      export ETCDCTL_CACERT=/etcd.local.config/certificates/etcdCA.crt
      export ETCDCTL_CERT=/etcd.local.config/certificates/etcd.crt
      export ETCDCTL_CERT=/etcd.local.config/certificates/etcd.crt
      export ETCDCTL_KEY=/etcd.local.config/certificates/etcd.key
      export ETCDCTL_ENDPOINTS=https://127.0.0.1:2379
      etcdctl member remove MEMBER_ID

      dove MEMBER_ID è l'ID membro esadecimale del pod della replica etcd non riuscita.

    2. Aggiungi un nuovo membro con lo stesso nome e URL peer del nodo replica con errore.

      etcdctl member add MEMBER_NAME --peer-urls=https://MEMBER_NAME.kube-etcd:2380

      Dove MEMBER_NAME è l'identificatore del nodo della replica kube-etcd non riuscito. Ad esempio, kube-etcd-1 o kube-etcd2.

  6. Segui i passaggi da 1 a 3 della sezione Eseguire il deployment dei pod di utilità per creare un pod di utilità nel cluster di amministrazione. Questo pod viene utilizzato per accedere al volume persistente (PV) del membro etcd in stato di errore nel cluster dell'utente.

  7. Ripulisci la directory dei dati etcd dal pod di utilità.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG exec -it -n USER_CLUSTER_NAME etcd-utility-MEMBER_NUMBER -- /bin/bash -c 'rm -rf /var/lib/etcd/*'
  8. Elimina il pod di utilità.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG delete pod -n USER_CLUSTER_NAME etcd-utility-MEMBER_NUMBER
  9. Rimuovi il cordone dal nodo con errore.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG uncordon NODE_NAME
  10. Apri il StatefulSet kube-etcd nel tuo editor di testo.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME edit statefulset kube-etcd

    Modifica il valore del flag --initial-cluster-state in existing.

    containers:
        - name: kube-etcd
          ...
          args:
            - --initial-cluster-state=existing
          ...
     
  11. Ripristina il PDB etcd eliminato nel passaggio 1.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG apply -f /path/to/etcdpdb.yaml