Peta dunia

 

EN: Read in English

Dunia K9: Pentadbir Kluster

Sandaran dan pemulihan etcd

Anda akan belajar: fotokopi buku pesanan dengan etcdctl, dan pulihkan objek yang hilang dengan etcdutl.

Teks BM belum disemak oleh penutur asli.

Disemak dengan Kubernetes 1.37 pada 1 Nov 2026

Masalahnya

Pukul 2 pagi, seseorang padam Deployment shop. YAML-nya tak pernah disimpan dalam Git. Apa yang masih boleh pulihkannya?

Pilih satu jawapan.

Tengok

Anda di sini: kluster kind-dev namespace default
Pada dev-control-plane, etcdctl simpan snapshot. Baris log-nya berakhir dengan Snapshot saved at /opt/backup.db dan Server version 3.7.0. Output terminal: $ ssh dev-control-plane $ etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save /opt/backup.db {"level":"info","ts":"2026-10-31T01:00:22.252272Z","caller":"snapshot/v3_snapshot.go:83","msg":"created temporary db file","path":"/opt/backup.db.part"} {"level":"info","ts":"2026-10-31T01:00:22.255184Z","logger":"client","caller":"v3/maintenance.go:236","msg":"opened snapshot stream; downloading"} {"level":"info","ts":"2026-10-31T01:00:22.258272Z","caller":"snapshot/v3_snapshot.go:96","msg":"fetching snapshot","endpoint":"https://127.0.0.1:2379"} {"level":"info","ts":"2026-10-31T01:00:22.260284Z","logger":"client","caller":"v3/maintenance.go:302","msg":"completed snapshot read; closing"} {"level":"info","ts":"2026-10-31T01:00:22.263372Z","caller":"snapshot/v3_snapshot.go:111","msg":"fetched snapshot","endpoint":"https://127.0.0.1:2379","size":"2.4 MB","took":"9.935898ms","etcd-version":"3.7.0"} {"level":"info","ts":"2026-10-31T01:00:22.266284Z","caller":"snapshot/v3_snapshot.go:121","msg":"saved","path":"/opt/backup.db"} Snapshot saved at /opt/backup.db Server version 3.7.0 $ exit logout Connection to dev-control-plane closed.

etcd snapshot (salinan buku pesanan) (etcd snapshot): Fotokopi buku pesanan (etcd) pada satu saat. Simpan di luar kluster, di tempat selamat. ialah fotokopi buku pesanan. etcdctl minta salinan itu daripada etcd yang sedang berjalan. Simpan salinan itu di luar kluster.

Cuba

Bina arahan simpan. Setiap kepingan tunjuk maksudnya.

Ketik kepingan ikut turutan yang betul.

…

Tengok

Anda di sini: kluster kind-dev namespace default
Tanpa flag sijil, etcdctl cetak satu baris tentang fail sementara, kemudian menunggu. Pelajar tekan Ctrl+C. Output terminal: $ ssh dev-control-plane $ etcdctl snapshot save /opt/backup.db {"level":"info","ts":"2026-10-31T01:00:22.252272Z","caller":"snapshot/v3_snapshot.go:83","msg":"created temporary db file","path":"/opt/backup.db.part"} ^C # etcdctl is still waiting here: it never got in. You pressed Ctrl+C. $ exit logout Connection to dev-control-plane closed.

Perangkap sebenar: tanpa flag sijil, etcdctl cetak satu baris dan tunggu selamanya. Tekan Ctrl+C. Kemudian tambah --cacert, --cert dan --key.

Cuba

Giliran anda. Buka node pejabat, simpan snapshot, kemudian semak.

Anda di sini: kluster kind-dev namespace default
Gerai: 3. Dulang: 3 (3 sedia). Menunggu gerai: 0.
dev-control-planeBukaPengurus

Tiada dulang di sini.

dev-workerBuka
  • shop·9448k
  • shop·q725x
dev-worker2Buka
  • shop·ddlcm
Masa: +0s (dipercepat)

etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save /opt/backup.db
etcdutl --write-out=table snapshot status /opt/backup.db

Teka

Pada etcd 3.7, anda taip etcdctl snapshot status /opt/backup.db. Apa berlaku?

Pilih satu jawapan.

Cuba

Shop dipadam selepas snapshot diambil. etcdutl: Alat untuk fail etcd: ia semak dan pulihkan snapshot. etcdctl pula bercakap dengan etcd yang sedang berjalan. pulihkan salinan ke folder baharu yang kosong. Kemudian tunjukkan etcd ke situ. Bahaya: objek yang lebih baharu hilang.

Anda di sini: kluster kind-dev namespace default
Gerai: 3. Dulang: 0 (0 sedia). Menunggu gerai: 0.
dev-control-planeBukaPengurus

Tiada dulang di sini.

dev-workerBuka

Tiada dulang di sini.

dev-worker2Buka

Tiada dulang di sini.

Masa: +0s (dipercepat)

etcdutl --data-dir /var/lib/etcd-restore snapshot restore /opt/backup.db
sed -i 's#/var/lib/etcd$#/var/lib/etcd-restore#' /etc/kubernetes/manifests/etcd.yaml

Semak

Susun langkah pemulihan ikut urutan.

Langkah pertama di atas. Susun ikut turutan. Guna anak panah, atau seret.

  • Tunggu: etcd mula semula, kemudian API menjawab
  • kubectl get deployments
  • etcdutl snapshot status: salinan itu sihat?
  • Tunjukkan etcd.yaml ke folder baharu
  • etcdutl --data-dir <folder baharu> snapshot restore

Anda berjaya!

Kini anda boleh sandarkan etcd dan pulihkan objek yang hilang.

Nak tahu lebih (pilihan)

Node kind tiada etcdctl. Di sana, jalankannya dalam pod etcd. Hanya /var/lib/etcd dan sijil dikongsi dengan node itu.

Anda di sini: kluster kind-dev namespace default
Pada kind, kubectl exec jalankan etcdctl dalam pod etcd. Snapshot disimpan di /var/lib/etcd/backup.db. Output terminal: $ kubectl -n kube-system exec etcd-dev-control-plane -- etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save /var/lib/etcd/backup.db {"level":"info","ts":"2026-10-31T01:00:22.252272Z","caller":"snapshot/v3_snapshot.go:83","msg":"created temporary db file","path":"/var/lib/etcd/backup.db.part"} {"level":"info","ts":"2026-10-31T01:00:22.255184Z","logger":"client","caller":"v3/maintenance.go:236","msg":"opened snapshot stream; downloading"} {"level":"info","ts":"2026-10-31T01:00:22.258272Z","caller":"snapshot/v3_snapshot.go:96","msg":"fetching snapshot","endpoint":"https://127.0.0.1:2379"} {"level":"info","ts":"2026-10-31T01:00:22.260284Z","logger":"client","caller":"v3/maintenance.go:302","msg":"completed snapshot read; closing"} {"level":"info","ts":"2026-10-31T01:00:22.263372Z","caller":"snapshot/v3_snapshot.go:111","msg":"fetched snapshot","endpoint":"https://127.0.0.1:2379","size":"2.4 MB","took":"9.935898ms","etcd-version":"3.7.0"} {"level":"info","ts":"2026-10-31T01:00:22.266284Z","caller":"snapshot/v3_snapshot.go:121","msg":"saved","path":"/var/lib/etcd/backup.db"} Snapshot saved at /var/lib/etcd/backup.db Server version 3.7.0

Misi sebenar

  1. kubectl -n kube-system exec etcd-<cluster>-control-plane -- etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save /var/lib/etcd/backup.db
  2. docker cp <cluster>-control-plane:/var/lib/etcd/backup.db ./backup.db

0 daripada 2 langkah siap · Tanda anda disimpan.