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 a un cluster utente per 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 funzionino correttamente. Se più di un membro etcd non sono riusciti, consulta la sezione Recupero in seguito a danneggiamento o perdita dei dati.

Sostituzione di una replica etcd non riuscita

  1. Esegui il backup di una copia di PodDisruptionBudget (PDB) etcd per poterlo ripristinare in seguito.

    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 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 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. Svuota 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 di replica etcd non riuscito.

  5. Crea 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 della replica etcd che 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.

      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 di replica etcd non riuscito.

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

      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 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 non riuscito nel cluster utente.

  7. Pulisci la directory dei dati etcd dall'interno del 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. Contrassegna il nodo con errori.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG uncordon NODE_NAME
  10. Apri lo 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
          ...
     
  11. Ripristina il PDB etcd eliminato nel passaggio 1.

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