本篇文章中,主要介紹使用 etcd 快照在 Kubernetes 集群上進行 etcd 備份和恢復。
在 Kubernetes 架構中,etcd 是集群不可或缺的一部份。所有集群物件及其狀態都儲存在 etcd 中。從 Kubernetes 的角度來看,你應該了解的關於 etcd 的幾件事。
它是一個一致的、分布式的、安全的鍵值儲存。
它使用 raft 協定。
支持具有堆疊 etcd 的高可用性架構。
它儲存 kubernetes 集群配置、所有 API 物件、物件狀態和服務發現詳細資訊。
如果你想了解更多關於 etcd 以及 kubernetes 如何使用它的資訊,可以去看下之前介紹的k8s架構文章 。
此外,如果您考慮 Kubernetes 設計最佳實踐,Kubernetes etcd 備份和恢復是備份策略下的重要方面之一。
Kubernetes etcd 使用 etcdctl 進行備份
以下是應該了解的有關 etcd 備份的資訊。
etcd 具有內建的快照機制。
etcdctl是與 etcd 互動以獲取快照的命令列實用程式。
按照下面給出的步驟獲取etcd 快照。
步驟1:登入控制平面。
步驟2:如果您的集群控制平面中沒有 etcdctl,請使用以下命令進行安裝。
sudo apt install etcd-client
步驟3:我們需要將以下三條資訊傳遞給 etcd 快照。etcdctl
etcd 端點 (–端點)
CA 證書 (–CACERT)
伺服器證書 (–cert)
伺服器金鑰 (–key)
可以透過兩種方式獲取上述詳細資訊。
從位於該位置的 etcd 靜態 pod 清單檔。/etc/kubernetes/manifests/etcd.yaml
也可以透過描述在名稱空間中執行的 etcd pod 來獲取上述詳細資訊。在描述 pod 時,請替換為您的 etcd pod 名稱。kube-systemetcd-master-node
kubectl get po -n kube-system
kubectl describe pod etcd-master-node -n kube-system
步驟4: 使用以下命令進行 etcd 快照備份。
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>
添加實際位置和參數時,該命令如下所示。執行命令以執行備份。可以替換為您選擇的位置和名稱。 /opt/backup/etcd.db
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
成功執行後,您將收到「Snapshot saved at /opt/backup/etcd.db」訊息,如下所示。
此外,您還可以使用以下命令驗證快照。
ETCDCTL_API=3 etcdctl --write-out=table snapshot status /opt/backup/etcd.db
下面是一個範例輸出。
HASH | REVISION | TOTAL KEYS | TOTAL SIZE |
---|---|---|---|
b7147656 | 51465 | 1099 | 5.1 MB |
Kubernetes etcd 使用 Snapshot Backup 進行還原
現在,我們在該位置有了備份。我們將使用快照備份來恢復 etcd。
/opt/backup/etcd.db
這是恢復 etcd 的命令。
ETCDCTL_API=3 etcdctl snapshot restore <backup-file-location>
讓我們執行 etcd restore 命令。
ETCDCTL_API=3 etcdctl snapshot restore /opt/backup/etcd.db
如果要使用特定數據目錄進行還原,可以使用如下所示的標誌添加位置。--data-dir
ETCDCTL_API=3 etcdctl --data-dir /opt/etcd snapshot restore /opt/backup/etcd.db
etcd 備份常見問題
如何在 Kubernetes 中進行 etcd 備份?
要進行 etcd 備份,您需要使用 etcdctl 命令列實用程式。您需要使用 etcdctl snapshot 命令和 etcd 證書來執行備份操作。
結論
在這篇部落格中,我們學習了使用命令列工具進行 Kubernetes etcd 備份和恢復。
etcd 備份和恢復是 Kubernetes 集群管理中的基本任務。此外,它是 CKA 認證考試中的一個重要主題。