Dokumen ini menjelaskan cara mengganti replika etcd yang gagal di cluster pengguna 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 mengaktifkan Controlplane V2. Jika Anda perlu mengganti replika etcd di cluster pengguna yang telah mengaktifkan Controlplane V2, hubungi Cloud Customer Care.
Sebelum memulai
Pastikan cluster admin berfungsi dengan benar.
Pastikan dua anggota etcd lainnya di cluster pengguna berfungsi dengan benar. Jika lebih dari satu anggota etcd gagal, lihat Pemulihan dari kerusakan atau kehilangan data etcd.
Mengganti replika etcd 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 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
.
Hapus PodDisruptionBudget (PDB) etcd.
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 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.Buat shell baru di penampung 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:
Hapus node replika etcd yang gagal dari cluster etcd.
Pertama, buat daftar semua anggota cluster etcd:
etcdctl member list -w table
Output akan menampilkan 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 hex dari pod replika etcd yang gagal.Tambahkan anggota baru dengan nama dan URL peer 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 Men-deploy Pod utilitas untuk membuat Pod utilitas di cluster admin. Pod ini digunakan untuk mengakses PersistentVolume (PV) anggota etcd yang gagal di cluster pengguna.
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/*'
Hapus Pod utilitas.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG delete pod -n USER_CLUSTER_NAME etcd-utility-MEMBER_NUMBER
Batalkan pemblokiran 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