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
Pastikan cluster admin berfungsi dengan baik.
Pastikan dua anggota etcd lainnya di cluster pengguna berfungsi dengan benar. Jika lebih dari satu anggota dst yang gagal, lihat Pemulihan dari etcd kerusakan atau kehilangan data.
Mengganti replika dll yang gagal
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
.
Menghapus etcd PodDisruptionBudget (PDB).
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME delete pdb kube-etcd-pdb
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
menjadiexisting
.containers: - name: kube-etcd ... args: - --initial-cluster-state=existing ...
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.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:
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.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. Misalnyakube-etcd-1
ataukube-etcd2
.
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.
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/*'
Hapus Pod utilitas.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG delete pod -n USER_CLUSTER_NAME etcd-utility-MEMBER_NUMBER
Lepas sambungan node yang gagal.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG uncordon NODE_NAME
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
menjadiexisting
.containers: - name: kube-etcd ... args: - --initial-cluster-state=existing ...
Pulihkan PDB etcd yang dihapus pada langkah 1.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG apply -f /path/to/etcdpdb.yaml