Dokumen ini menunjukkan cara mencadangkan dan memulihkan penyimpanan etcd untuk cluster admin yang dibuat dengan Google Distributed Cloud (khusus software) untuk VMware. Dokumen ini juga menyediakan skrip yang dapat Anda gunakan untuk mencadangkan etcd store cluster secara otomatis. Anda juga dapat
mencadangkan dan memulihkan
cluster admin menggunakan alat command line gkectl
.
Anda dapat membuat file cadangan untuk pemulihan dari bencana tak terduga yang dapat merusak data etcd cluster Anda. Simpan file cadangan di lokasi yang berada di luar cluster dan tidak bergantung pada operasi cluster.
Batasan
Prosedur pencadangan dan pemulihan yang dijelaskan dalam dokumen ini memiliki batasan berikut:
Prosedur ini tidak mencadangkan data khusus aplikasi.
Prosedur ini tidak mencadangkan PersistentVolume Anda.
Workload yang dijadwalkan setelah Anda membuat cadangan tidak dipulihkan dengan cadangan tersebut.
Anda tidak dapat memulihkan cluster setelah upgrade gagal.
Prosedur ini tidak dimaksudkan untuk memulihkan cluster yang dihapus.
Jangan gunakan prosedur ini untuk cluster dengan cluster lanjutan yang diaktifkan. Sebagai gantinya, lihat Mencadangkan dan memulihkan cluster lanjutan dengan gkectl.
Untuk mengetahui informasi selengkapnya tentang batasan, lihat Ketidakcocokan infrastruktur.
Mencadangkan cluster admin
Pencadangan cluster admin berisi hal berikut:
- Snapshot etcd cluster admin.
- Secret bidang kontrol admin, yang diperlukan untuk mengautentikasi ke cluster admin dan pengguna.
Selesaikan langkah-langkah berikut sebelum Anda membuat cadangan cluster admin:
Temukan alamat IP eksternal cluster admin, yang digunakan untuk SSH ke bidang kontrol cluster admin:
kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get nodes -n kube-system -o wide | grep master
dengan [ADMIN_CLUSTER_KUBECONFIG] adalah file kubeconfig cluster admin.
Buat kunci SSH bernama
vsphere_tmp
dari kunci pribadi cluster admin.Anda dapat menemukan kunci pribadi dari Secret cluster admin:
kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get secrets sshkeys -n kube-system -o yaml
Di output perintah, Anda dapat menemukan kunci pribadi di kolom
vsphere_tmp
.Salin kunci pribadi ke
vsphere_tmp
:echo "[PRIVATE_KEY]" | base64 -d > vsphere_tmp; chmod 600 vsphere_tmp
Periksa apakah Anda dapat mengakses shell ke bidang kontrol admin menggunakan kunci pribadi ini:
ssh -i vsphere_tmp ubuntu@[EXTERNAL_IP]
Keluar dari container:
exit
Mencadangkan etcd store cluster admin
Untuk mencadangkan penyimpanan etcd cluster admin:
Dapatkan nama Pod etcd:
kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get pods \ -n kube-system -l component=etcd,tier=control-plane -ojsonpath='{$.items[*].metadata.name}{"\n"}'
Lakukan shell ke container kube-etcd Pod:
kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] exec -it \ -n kube-system [ADMIN_ETCD_POD] -- bin/sh
dengan [ADMIN_ETCD_POD] adalah nama Pod etcd.
Dari shell, gunakan
etcdctl
untuk membuat cadangan bernamasnapshot.db
di direktori lokal:ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \ --key=/etc/kubernetes/pki/etcd/healthcheck-client.key snapshot save /tmp/snapshot.db
Keluar dari container:
exit
Salin cadangan dari penampung kube-etcd menggunakan
kubectl cp
:kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] cp \ kube-system/[ADMIN_ETCD_POD]:tmp/snapshot.db [RELATIVE_DIRECTORY]
dengan [RELATIVE_DIRECTORY] adalah jalur tempat Anda ingin menyimpan cadangan.
Mencadangkan Secret cluster admin
Untuk mencadangkan Secret bidang kontrol admin:
Gunakan SSH untuk terhubung ke node bidang kontrol admin:
ssh -i vsphere_tmp ubuntu@EXTERNAL_IP
Ganti
EXTERNAL_IP
dengan alamat IP eksternal panel kontrol admin, yang Anda catat sebelumnya.Opsional, tetapi sangat direkomendasikan: Buat direktori cadangan lokal.
Anda perlu mengubah izin Rahasia cadangan untuk menyalinnya dari node.
mkdir backup
Salin Secret secara lokal ke direktori cadangan lokal:
sudo cp -r /etc/kubernetes/pki/* backup/
Ubah izin Secret cadangan:
sudo chmod -R a+rX backup/
Keluar dari node bidang kontrol admin:
exit
Jalankan
scp
untuk menyalin folder cadangan dari node bidang kontrol admin:sudo scp -r -i vsphere_tmp ubuntu@EXTERNAL_IP:backup/ RELATIVE_DIRECTORY
Ganti
RELATIVE_DIRECTORY
dengan jalur tempat Anda ingin menyimpan cadangan.
Memulihkan cluster admin
Prosedur berikut akan membuat ulang cluster admin yang dicadangkan dan semua bidang kontrol pengguna yang dikelolanya saat snapshot etcd-nya dibuat.
Jalankan
scp
untuk menyalinsnapshot.db
ke bidang kontrol admin:sudo scp -i vsphere_tmp snapshot.db ubuntu@[EXTERNAL_IP]:
dengan [EXTERNAL_IP] adalah alamat IP eksternal bidang kontrol admin, yang Anda kumpulkan sebelumnya.
Shell ke bidang kontrol admin:
sudo ssh -i vsphere_tmp ubuntu@[EXTERNAL_IP]
Menyalin
snapshot.db/
ke/mnt
:sudo cp snapshot.db /mnt/
Buat direktori sementara, seperti
backup
:mkdir backup
Keluar dari bidang kontrol admin:
exit
Salin sertifikat ke
backup/
:sudo scp -r -i vsphere_tmp [BACKUP_CERT_FILE] ubuntu@[EXTERNAL_IP]:backup/
Shell ke node bidang kontrol admin:
ssh -i vsphere_tmp ubuntu@[EXTERNAL_IP]
dengan [EXTERNAL_IP] adalah alamat IP eksternal bidang kontrol admin, yang Anda kumpulkan sebelumnya.
Hentikan
kube-etcd
dankube-apiserver
.sudo mv /etc/kubernetes/manifests/etcd.yaml /tmp/etcd.yaml
sudo mv /etc/kubernetes/manifests/kube-apiserver.yaml /tmp/kube-apiserver.yaml
Salin Secret cadangan ke
/etc/kubernetes/pki/
:sudo cp -r backup/* /etc/kubernetes/pki/
Jalankan
etcdctl restore
:ETCDCTL_API=3 sudo etcdctl snapshot restore /backup/snapshot.db sudo rm -r /var/lib/etcd/* sudo mv /default.etcd/member/ /var/lib/etcd/
Mulai ulang
kube-etcd
dankube-apiserver
.sudo mv /tmp/etcd.yaml /etc/kubernetes/manifests/etcd.yaml
sudo mv /tmp/kube-apiserver.yaml /etc/kubernetes/manifests/kube-apiserver.yaml
Verifikasi bahwa
kube-etcd
dankube-apiserver
telah dimulai.sudo crictl ps -a
Salin
/etc/kubernetes/admin.conf
ke folder.kube
agar dapat diakses dari workstation admin:mkdir -p [HOME]/.kube
sudo cp -i /etc/kubernetes/admin.conf [HOME]/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Keluar dari bidang kontrol admin:
exit
Salin file kubeconfig yang baru dibuat dari node admin:
sudo scp -i vsphere_tmp ubuntu@[EXTERNAL_IP]:[HOME]/.kube/config kubeconfig
sudo chown $(id -u):$(id -g) kubeconfig
dengan:
- [EXTERNAL_IP] adalah alamat IP eksternal bidang kontrol admin.
- [HOME] adalah direktori utama di node admin.
Sekarang Anda dapat menggunakan file kubeconfig baru ini untuk mengakses cluster yang dipulihkan.
Memecahkan masalah pemulihan cluster admin
Jika Anda mengalami masalah saat memulihkan cluster admin, Anda harus menghubungi Dukungan Google untuk menyelesaikan masalah pada cluster admin.
Sementara itu, Anda dapat memeriksa hal berikut untuk memecahkan masalah lebih lanjut.
Temukan ID container etcd
sudo crictl ps -a | grep [ADMIN_ETCD_POD]
dengan [ADMIN_ETCD_POD] adalah nama Pod etcd.
Periksa log dari container etc
sudo crictl logs [ETCD_CONTAINER_ID]
dengan [ETCD_CONTAINER_ID] adalah ID penampung etcd.
Cari pesan log penolakan izin berikut seperti
etcdserver: create snapshot directory error:mkdir /var/lib/etcd/member/snap: permission denied
Jika pesan izin ditolak ditemukan, perbarui kepemilikan /opt/data/var/lib/etcd/
sudo chown -R 2001:2001 /opt/data/var/lib/etcd/
Verifikasi bahwa
kube-etcd
dankube-apiserver
telah dimulai.sudo crictl ps
Pencadangan cluster otomatis
Anda dapat menggunakan skrip yang diberikan di sini sebagai contoh cara mencadangkan cluster Anda secara otomatis. Perhatikan bahwa skrip berikut tidak didukung, dan hanya boleh digunakan sebagai referensi untuk menulis skrip yang lebih baik, lebih andal, dan lengkap. Sebelum menjalankan skrip, isi nilai untuk lima variabel di awal skrip:
- Tetapkan
BACKUP_DIR
ke jalur tempat Anda ingin menyimpan cadangan cluster admin dan pengguna. Jalur ini tidak boleh ada. - Tetapkan
ADMIN_CLUSTER_KUBECONFIG
ke jalur file kubeconfig cluster admin - Tetapkan
USER_CLUSTER_NAMESPACE
ke nama cluster pengguna Anda. Nama cluster pengguna Anda adalah namespace di cluster admin. - Tetapkan
EXTERNAL_IP
ke VIP yang Anda cadangkan untuk layanan bidang kontrol admin. - Tetapkan
SSH_PRIVATE_KEY
ke jalur kunci SSH Anda. - Jika Anda menggunakan jaringan pribadi, tetapkan
JUMP_IP
ke alamat IP server jump jaringan Anda.
#!/usr/bin/env bash
# Automates manual steps for taking backups of user and admin clusters.
# Fill in the variables below before running the script.
BACKUP_DIR="" # path to store user and admin cluster backups
ADMIN_CLUSTER_KUBECONFIG="" # path to admin cluster kubeconfig
USER_CLUSTER_NAMESPACE="" # user cluster namespace
EXTERNAL_IP="" # admin control plane node external ip - follow steps in documentation
SSH_PRIVATE_KEY="" # path to vsphere_tmp ssh private key - follow steps in documentation
JUMP_IP="" # network jump server IP - leave empty string if not using private network.
mkdir -p $BACKUP_DIR
mkdir $BACKUP_DIR/pki
# USER CLUSTER BACKUP
# Snapshot user cluster etcd
kubectl --kubeconfig=${ADMIN_CLUSTER_KUBECONFIG} exec -it -n ${USER_CLUSTER_NAMESPACE} kube-etcd-0 -c kube-etcd -- /bin/sh -ec "export ETCDCTL_API=3; etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etcd.local.config/certificates/etcdCA.crt --cert=/etcd.local.config/certificates/etcd.crt --key=/etcd.local.config/certificates/etcd.key snapshot save /tmp/${USER_CLUSTER_NAMESPACE}_snapshot.db"
kubectl --kubeconfig=${ADMIN_CLUSTER_KUBECONFIG} cp ${USER_CLUSTER_NAMESPACE}/kube-etcd-0:tmp/${USER_CLUSTER_NAMESPACE}_snapshot.db $BACKUP_DIR/user-cluster_${USER_CLUSTER_NAMESPACE}_snapshot.db
# ADMIN CLUSTER BACKUP
# Set up ssh options
SSH_OPTS=(-oStrictHostKeyChecking=no -i ${SSH_PRIVATE_KEY})
if [ "${JUMP_IP}" != "" ]; then
SSH_OPTS+=(-oProxyCommand="ssh -oStrictHostKeyChecking=no -i ${SSH_PRIVATE_KEY} -W %h:%p ubuntu@${JUMP_IP}")
fi
# Copy admin certs
ssh "${SSH_OPTS[@]}" ubuntu@${EXTERNAL_IP} 'sudo chmod -R a+rX /etc/kubernetes/pki/*'
scp -r "${SSH_OPTS[@]}" ubuntu@${EXTERNAL_IP}:/etc/kubernetes/pki/* ${BACKUP_DIR}/pki/
# Snapshot admin cluster etcd
admin_etcd=$(kubectl --kubeconfig=${ADMIN_CLUSTER_KUBECONFIG} get pods -n kube-system -l component=etcd,tier=control-plane -ojsonpath='{$.items[*].metadata.name}{"\n"}')
kubectl --kubeconfig=${ADMIN_CLUSTER_KUBECONFIG} exec -it -n kube-system ${admin_etcd} -- /bin/sh -ec "export ETCDCTL_API=3; etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key snapshot save /tmp/admin_snapshot.db"
kubectl --kubeconfig=${ADMIN_CLUSTER_KUBECONFIG} cp -n kube-system ${admin_etcd}:tmp/admin_snapshot.db $BACKUP_DIR/admin-cluster_snapshot.db
Langkah berikutnya
- Mencadangkan dan memulihkan cluster pengguna
- Mendiagnosis masalah cluster
- Pelajari augur, alat open source untuk memulihkan setiap objek dari cadangan etcd.