Skip to main content
  1. Posts/

Backup dan Restore Etcd pada Kubernetes Cluster

·2 mins·
kubernetes kubernetes
Table of Contents

Dalam arsitektur Kubernetes, etcd merupakan bagian integral dari cluster. Semua objek cluster seperti API objects, object states, dan service discovery disimpan di etcd sehingga sangat disarankan untuk melalukan backup secara rutin agar membantu proses pemulihan jika terjadi insiden baik dari hardware atau software.

Kubernetes etcd Backup Using etcdctl
#

Login ke node master / control plane.

Lalu download etcdctl melalui repo github etcd-io

wget https://github.com/etcd-io/etcd/releases/download/v3.4.27/etcd-v3.4.27-linux-amd64.tar.gz

Extract archive dan pindahkan file biner etcdctl ke /usr/local/bin/

tar -xaf etcd-v3.4.27-linux-amd64.tar.gz

cd etcd-v3.4.27-linux-amd64
mv etcdctl /usr/local/bin/

Untuk menggunakan etcdctl, diperlukan certificate beserta private key etcd yang bisa Anda temukan di /etc/kubernetes/manifests/etcd.yaml.

# cat /etc/kubernetes/manifests/etcd.yaml
...
spec:
  containers:
  - command:
    - etcd
    - --cert-file=/etc/kubernetes/pki/etcd/server.crt
    - --key-file=/etc/kubernetes/pki/etcd/server.key
    - --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
...

Tambahkan variable berikut pada shell environment

export ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt
export ETCDCTL_CERT=/etc/kubernetes/pki/etcd/server.crt
export ETCDCTL_KEY=/etc/kubernetes/pki/etcd/server.key

Tes untuk memastikan sudah terhubung ke etcd.

etcdctl endpoint health
127.0.0.1:2379 is healthy: successfully committed proposal: took = 7.192771ms

Buat folder untuk menyimpan backup etcd.

mkdir etcd
cd etcd

Ambil snapshot etcd dengan perintah.

etcdctl snapshot save backup.db

Cek status snapshot.

etcdctl --write-out=table snapshot status backup.db
+----------+----------+------------+------------+
|   HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| 2ddb9172 |    97897 |       1497 |      24 MB |
+----------+----------+------------+------------+

Kubernetes etcd Restore Using Snapshot Backup
#

Hapus atau rename folder etcd.

cd /var/lib/
mv etcd etcd-orig

Lalu restore etcd dengan perintah.

etcdctl snapshot restore --data-dir etcd /root/etcd/backup.db
{"level":"info","ts":1690686164.8587801,"caller":"snapshot/v3_snapshot.go:306","msg":"restoring snapshot","path":"/root/etcd/backup.db","wal-dir":"etcd/member/wal","data-dir":"etcd","snap-dir":"etcd/member/snap"}
{"level":"info","ts":1690686164.8927898,"caller":"mvcc/kvstore.go:388","msg":"restored last compact revision","meta-bucket-name":"meta","meta-bucket-name-key":"finishedCompactRev","restored-compact-revision":63305}
{"level":"info","ts":1690686164.9036953,"caller":"membership/cluster.go:392","msg":"added member","cluster-id":"cdf818194e3a8c32","local-member-id":"0","added-peer-id":"8e9e05c52164694d","added-peer-peer-urls":["http://localhost:2380"]}
{"level":"info","ts":1690686164.9086843,"caller":"snapshot/v3_snapshot.go:326","msg":"restored snapshot","path":"/root/etcd/backup.db","wal-dir":"etcd/member/wal","data-dir":"etcd","snap-dir":"etcd/member/snap"}

Cek ID container etcd.

crictl ps --name etcd
CONTAINER           IMAGE                                                              CREATED             STATE               NAME                ATTEMPT             POD ID              POD
4c7b96af61c12       86b6af7dd652c1b38118be1c338e9354b33469e69a218f7e290a0ca5304ad681   7 minutes ago       Running             etcd                10                  49b4587e6ae44       etcd-man

Stop container etcd.

crictl stop 4c7b96af61c12

Tunggu beberapa saat sampai container etcd dibuat ulang.

etcdctl command usage
#

Check performance etcd cluster

etcdctl check perf

Check status and health endpoint etcd

etcdctl endpoint health && etcdctl endpoint status

Get all keys

etcdctl get --prefix=true --keys-only /

Delete key

etcdctl del --prefix=true /registry/pods/site/demo-c96794899-sgcgz

Bisa untuk menghapus paksa pods atau membuat ulang pod jika menggunakan deployment {: .prompt-tip }

Related

Deploy Kubernetes Dashboard
·1 min
kubernetes kubernetes
Deploy Pod ke Node Tertentu
·2 mins
kubernetes kubernetes
Kubectl Cheat Sheet
·14 mins
kubernetes kubernetes
Kubernetes Internal Errors: Failed Calling Webhook
·1 min
kubernetes kubernetes
Setup Kubernetes Cluster dengan Kubeadm dan cri-dockerd
·6 mins
kubernetes docker kubernetes
Setup Kubernetes Cluster dengan Kubeadm dan cri-o
·6 mins
kubernetes kubernetes crio