Mengganti replika etcd yang gagal

Dokumen ini menjelaskan cara mengganti replika etcd yang gagal di cluster pengguna dengan ketersediaan tinggi (HA) untuk GKE di VMware.

Petunjuk yang diberikan di sini berlaku untuk cluster pengguna dengan ketersediaan tinggi (HA) yang menggunakan kubeception; yaitu, cluster pengguna yang tidak mengaktifkan Controlplane V2. Jika Anda perlu mengganti replika etcd di cluster pengguna yang telah mengaktifkan Controlplane V2, hubungi Cloud Customer Care.

Sebelum memulai

Mengganti replika etcd yang gagal

  1. Cadangkan salinan etcd PodDisruptionBudget (PDB) agar Anda dapat memulihkannya nanti.

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

    Dengan keterangan:

    • ADMIN_CLUSTER_KUBECONFIG adalah jalur ke file kubeconfig untuk cluster admin.

    • USER_CLUSTER_NAME adalah nama cluster pengguna yang berisi replika etcd yang gagal.

    • PATH_TO_PDB_FILE adalah jalur tempat Anda ingin menyimpan file PDB etcd, misalnya /tmp/etcpdb.yaml.

  2. Menghapus Anggaran PodDisruption (PDB) etcd.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME delete pdb kube-etcd-pdb
  3. Jalankan perintah berikut untuk membuka StatefulSet kube-etcd di editor teks Anda:

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

    Ubah nilai flag --initial-cluster-state menjadi existing.

    containers:
        - name: kube-etcd
          ...
          args:
            - --initial-cluster-state=existing
          ...
     
  4. Mengosongkan node replika etcd yang gagal.

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

    Dengan NODE_NAME adalah nama node replika etcd yang gagal.

  5. Buat shell baru di dalam container salah satu pod kube-etcd yang berfungsi.

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

    Dengan KUBE_ETCD_POD adalah nama pod kube-etcd yang berfungsi. Contoh, kube-etcd-0.

    Dari shell baru ini, jalankan perintah berikut:

    1. Hapus node replika etcd yang gagal dari cluster etcd.

      Pertama, cantumkan semua anggota cluster etcd:

      etcdctl member list -w table

      Output akan menampilkan semua ID anggota. Tentukan ID anggota replika yang gagal.

      Berikutnya, hapus replika yang gagal:

      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

      Dengan MEMBER_ID adalah ID anggota heksadesimal dari pod replika etcd yang gagal.

    2. Tambahkan anggota baru dengan nama dan URL pembanding yang sama dengan node replika yang gagal.

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

      Dengan MEMBER_NAME adalah ID node replika kube-etcd yang gagal. Misalnya kube-etcd-1 atau kube-etcd2.

  6. Ikuti langkah 1-3 tentang Men-deploy Pod utilitas untuk membuat Pod utilitas di cluster admin. Pod ini digunakan untuk mengakses PersistentVolume (PV) dari anggota etcd yang gagal di cluster pengguna.

  7. Bersihkan direktori data etcd dari dalam Pod utilitas.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG exec -it -n USER_CLUSTER_NAME etcd-utility-MEMBER_NUMBER -- /bin/bash -c 'rm -rf /var/lib/etcd/*'
  8. Menghapus Pod utilitas.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG delete pod -n USER_CLUSTER_NAME etcd-utility-MEMBER_NUMBER
  9. Lepaskan aturan untuk node yang gagal.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG uncordon NODE_NAME
  10. Buka StatefulSet kube-etcd di editor teks Anda.

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

    Ubah nilai flag --initial-cluster-state menjadi existing.

    containers:
        - name: kube-etcd
          ...
          args:
            - --initial-cluster-state=existing
          ...
     
  11. Pulihkan PDB etcd yang dihapus pada langkah 1.

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