Backup và restore etcd trên cụm Kubernetes

Backup và restore etcd trên cụm Kubernetes

Trong bài viết này mình sẽ chia sẻ về các backup và restore etcd trên cụm Kubernetes bằng etcd snapshot.

Trong kiến trúc Kubernetes, etcd là một thành phần quan trọng của cụm. Mọi object và trạng thái của chúng được lưu trữ trong etcd. Một vài thứ bạn nên biết về etcd:

  1. Một kho lưu trữ dạng khóa-giá trị có khả năng phân tán, nhất quán.

  2. Sử dụng giao thức raft.

  3. Hỗ trợ kiến trúc khả dụng cao với stacked etcd.

  4. Nó lưu trữ cấu hình của cụm Kubernetes, các API object, trạng thái object và thông tin service discovery.

Nếu muốn hiểu hơn về etcd và cách mà Kubernetes sử dụng nó, hãy tham khảo bài viết sau nhé.

Kiến trúc Kubernetes

Kubernetes etcd Backup sử dụng etcdctl

Lưu ý 2 ý sau:

  1. etcd tự nó có một kĩ thuật snapshot

  2. etcdctl là một công cụ cli tương tác với snapshot etcd.

Các bước dưới đây tạo một etcd snapshot.

Bước 1: Đăng nhập vào control plane.

Bước 2: Nếu chưa có ectdctl trong control plane, cài đặt nó sử dụng command:

sudo apt install etcd-client

Bước 3: Ta cần pass các thông tin sau vào etcdctl để tạo snapshot.

  1. etcd endpoint (–endpoints)

  2. ca certificate (–cacert)

  3. server certificate (–cert)

  4. server key (–key)

Bạn có thể tìm các thông tin đó theo hai cách

  1. Từ static pod manifest của etcd tại /etc/kubernetes/manifests/etcd.yaml

Sử dụng kubectl describe trong kube-system namespace. Thay etcd-master-node với tên node của bạn.

kubectl get po -n kube-system
kubectl describe pod etcd-master-node -n kube-system

Bước 4: Tạo một snapshot sử dụng command:

ETCDCTL_API=3 etcdctl \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=<ca-file> \
  --cert=<cert-file> \
  --key=<key-file> \
  snapshot save <backup-file-location>

Bạn có thể thay /opt/backup/etcd.db với thư mục và tên mà bạn chọn. Thay các tham số ở trên ta được command hoàn chỉnh như sau:

ETCDCTL_API=3 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/etcd.db

Sau khi thực thi thành công bạn sẽ nhận được thông báo Snapshot saved at /opt/backup/etcd.db .

Bạn cũng có thể kiểm tra bằng cách dùng command:

ETCDCTL_API=3 etcdctl --write-out=table snapshot status /opt/backup/etcd.db

Ouput của command trên có dạng như sau:

+----------+----------+------------+------------+
|   HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| b7147656 |    51465 |       1099 |     5.1 MB |
+----------+----------+------------+------------+

Kubernetes etcd Restore sử dụng Snapshot Backup

Giờ ta đã có backup trong thư mục /opt/backup/etcd.db . Ta sẽ dùng snapshot này để restore etcd.

ETCDCTL_API=3 etcdctl snapshot restore <backup-file-location>

Thực thi command trên với thư mục backup của bạn.

ETCDCTL_API=3 etcdctl snapshot restore /opt/backup/etcd.db

Nếu bạn muốn restore vào thư mục nào đó, có thể thêm --data-dir như dưới.

ETCDCTL_API=3 etcdctl --data-dir /opt/etcd snapshot restore /opt/backup/etcd.db

Kết luận

Trong bài viết này ta đã biết cách backup và restore etcd sử dụng etcdctl. Backup và restore etcd là một công việc quan trọng trong quá trình quản lý cụm Kubernetes.