本頁面說明如何備份 GKE on AWS 安裝作業的 etcd 資料儲存庫,以便在可能損毀叢集 etcd 資料的事件發生時進行復原。
限制
使用備份檔案還原 etcd 資料是最後手段。除非叢集完全損毀,否則不建議從備份檔案還原。如需決定最佳行動方案的相關協助,請與 Google 支援團隊聯絡。
這項程序不會備份工作負載中的資料,包括 PersistentVolumes。
這個備份無法用於還原不同 GKE on AWS 版本的叢集。
備份使用者叢集
使用者叢集備份是使用者叢集 etcd 儲存空間的快照。etcd 儲存空間包含所有 Kubernetes 物件和自訂物件,代表叢集的狀態。快照包含重建叢集無狀態工作負載所需的資料。
如要建立 etcd 資料存放區的快照,請執行下列步驟:
在叢集的 etcd 執行個體上執行管理服務執行個體,並開啟殼層。
找出叢集管理服務執行個體的 IP 位址。
export CLUSTER_ID=$(terraform output cluster_id) export MANAGEMENT_IP=$(aws ec2 describe-instances \ --filters "Name=tag:Name,Values=$CLUSTER_ID-management-0" \ --query "Reservations[*].Instances[*].PrivateIpAddress" \ --output text)
使用
ssh
工具開啟與管理服務執行個體的連線。直接連線
ssh -i ~/.ssh/anthos-gke ubuntu@$MANAGEMENT_IP
防禦主機
export BASTION_DNS=$(terraform output bastion_dns_name) ssh -i ~/.ssh/anthos-gke -J ubuntu@$BASTION_DNS ubuntu@$MANAGEMENT_IP
建立目錄來儲存 etcd 備份資料。
mkdir ./etcd-backups
使用
ps
指令列工具,找出該執行個體上 etcd 程序的程序 ID。ps -e | grep etcd
輸出內容會顯示 etcd 程序的詳細資料。第一個元素是 etcd 的程序 ID。在下列步驟中,請將 ETCD_PID 替換為這個程序 ID。
在 etcd 容器的檔案系統中建立指令碼,以建立快照。這個指令碼會執行 etcdctl,連線至 etcd 精靈並執行快照,備份 etcd 資料庫。
cat << EOT > /tmp/etcdbackup.sh # Extract a snapshot of the anthos-gke etcd state database export ETCDCTL_API=3 etcdctl \ --endpoints=https://127.0.0.1:2379 \ --cacert=/secrets/server-ca.crt \ --cert=/secrets/server.crt \ --key=/secrets/server.key \ snapshot save /tmp/snapshot.db EOT chmod a+x /tmp/etcdbackup.sh sudo mv /tmp/etcdbackup.sh /proc/ETCD_PID/root/tmp/etcdbackup.sh
使用
nsenter
指令在 etcd 容器中執行指令碼,建立快照。sudo nsenter --all --target ETCD_PID /tmp/etcdbackup.sh
將快照檔案複製到 etcd 容器外。
sudo cp /proc/ETCD_PID/root/tmp/snapshot.db ./etcd-backups
將 etcd 容器 /secrets 目錄中的所有檔案複製到備份目錄。這些檔案包含的憑證會加密及驗證 etcd 與叢集中其他程序之間的通訊。快照檔案和憑證檔案加總起來,就是 etcd 叢集狀態的完整備份。
sudo cp -r /proc/ETCD_PID/root/secrets ./etcd-backups
使用
tar
工具將 etc-backup 檔案打包成方便的 tar 檔案。tar -cvf etcd-backup.tar etcd-backup
返回本機電腦,並使用
scp
工具從管理服務執行個體複製 etcd-backup.tar 檔案。本範例使用先前定義的 BASTION_DNS 和 MANAGEMENT_IP 環境變數。scp -i ~/.ssh/anthos-gke -J ubuntu@$BASTION_DNS \ ubuntu@$MANAGEMENT_IP:~/etcd-backup/backup.tar