Mengganti replika etcd yang gagal

Dokumen ini menjelaskan cara mengganti replika dll yang gagal di ketersediaan tinggi (HA) untuk Google Distributed Cloud.

Petunjuk yang diberikan di sini berlaku untuk cluster pengguna HA yang menggunakan kubeception; yaitu, cluster pengguna yang tidak memiliki Pesawat Kontrol V2 mengaktifkan pembuatan versi. Jika Anda perlu mengganti replika etcd di cluster pengguna yang memiliki Controlplane V2 diaktifkan, hubungi Cloud Customer Care.

Sebelum memulai

Mengganti replika dll yang gagal

  1. Cadangkan salinan podDisruptionBudget (PDB) etcd 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 {i>kubeconfig<i} untuk cluster admin.

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

    • PATH_TO_PDB_FILE adalah jalur yang Anda inginkan simpan file PDB etcd, misalnya /tmp/etcpdb.yaml.

  2. Menghapus etcd PodDisruptionBudget (PDB).

    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. Kosongkan node replika dlld yang gagal.

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

    Dengan NODE_NAME adalah nama node replika dll yang gagal.

  5. Buat shell baru 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 pekerjaan pod kube-etcd. Contoh, kube-etcd-0.

    Dari shell baru ini, jalankan perintah berikut:

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

      Pertama, buat daftar semua anggota cluster etcd:

      etcdctl member list -w table

      Output menunjukkan semua ID anggota. Tentukan ID anggota replika yang gagal.

      Selanjutnya, 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 pod replika dll 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 dari artikel Men-deploy Pod utilitas untuk membuat Pod utilitas di cluster admin. Pod ini digunakan untuk mengakses PersistentVolume (PV) dari anggota dll yang gagal di cluster pengguna.

  7. Bersihkan direktori data {i>etcd<i} 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. Hapus Pod utilitas.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG delete pod -n USER_CLUSTER_NAME etcd-utility-MEMBER_NUMBER
  9. Lepas sambungan 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