Sostituzione di una replica etcd non riuscita

Questo documento descrive come sostituire una replica etcd non riuscita in un cluster utente ad alta disponibilità per Google Distributed Cloud.

Le istruzioni fornite qui si applicano a un cluster utente ad alta disponibilità che utilizza kubeception, ovvero un cluster utente in cui non è abilitato Controlplane V2. Se devi sostituire una replica etcd in un cluster utente in cui è abilitato 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 stiano funzionando correttamente. Se più di un membro etcd ha avuto esito negativo, consulta Recupero da danneggiamento o perdita di dati etcd.

Sostituzione di una replica etcd non riuscita

  1. Esegui il backup di una copia del PodDisruptionBudget (PDB) etcd per poterlo ripristinare in un secondo momento.

    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 utente che contiene la replica etcd non riuscita.

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

  2. Elimina il PodDisruptionBudget (PDB) etcd.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME delete pdb kube-etcd-pdb
  3. Esegui questo comando per aprire lo 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
          ...
     
  4. Svuota il nodo di replica etcd non riuscito.

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

    Dove NODE_NAME è il nome del nodo di replica etcd non riuscito.

  5. Creare una nuova shell nel container 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 funzionante. Ad esempio, kube-etcd-0.

    Da questa nuova shell, esegui questi comandi:

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

      Per prima cosa, 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 non riuscita.

      Dopodiché, 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 di replica etcd in errore.

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

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

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

  6. Segui i passaggi 1-3 di Deployment dei pod di utilità per creare un pod di utilità nel cluster di amministrazione. Questo pod viene utilizzato per accedere al PersistentVolume (PV) del membro etcd in errore nel cluster utente.

  7. Pulisci la directory dei dati etcd dall'interno del pod dell'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 dell'utilità.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG delete pod -n USER_CLUSTER_NAME etcd-utility-MEMBER_NUMBER
  9. Rendi pianificabile il nodo con errori.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG uncordon NODE_NAME
  10. Apri lo 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