備份 AWS 上的使用者叢集

本頁面說明如何備份 GKE on AWS 安裝作業的 etcd 資料儲存庫,以便在可能損毀叢集 etcd 資料的事件發生時進行復原。

限制

  • 使用備份檔案還原 etcd 資料是最後手段。除非叢集完全損毀,否則不建議從備份檔案還原。如需決定最佳行動方案的相關協助,請與 Google 支援團隊聯絡。

  • 這項程序不會備份工作負載中的資料,包括 PersistentVolumes。

  • 這個備份無法用於還原不同 GKE on AWS 版本的叢集。

備份使用者叢集

使用者叢集備份是使用者叢集 etcd 儲存空間的快照。etcd 儲存空間包含所有 Kubernetes 物件和自訂物件,代表叢集的狀態。快照包含重建叢集無狀態工作負載所需的資料。

如要建立 etcd 資料存放區的快照,請執行下列步驟:

  1. 在叢集的 etcd 執行個體上執行管理服務執行個體,並開啟殼層。

    1. 找出叢集管理服務執行個體的 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)
      
    2. 使用 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
      
  2. 建立目錄來儲存 etcd 備份資料。

    mkdir ./etcd-backups
    
  3. 使用 ps 指令列工具,找出該執行個體上 etcd 程序的程序 ID。

    ps -e | grep etcd
    

    輸出內容會顯示 etcd 程序的詳細資料。第一個元素是 etcd 的程序 ID。在下列步驟中,請將 ETCD_PID 替換為這個程序 ID。

  4. 在 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
    
  5. 使用 nsenter 指令在 etcd 容器中執行指令碼,建立快照。

    sudo nsenter --all --target ETCD_PID /tmp/etcdbackup.sh
    
  6. 將快照檔案複製到 etcd 容器外。

    sudo cp /proc/ETCD_PID/root/tmp/snapshot.db ./etcd-backups
    
  7. 將 etcd 容器 /secrets 目錄中的所有檔案複製到備份目錄。這些檔案包含的憑證會加密及驗證 etcd 與叢集中其他程序之間的通訊。快照檔案和憑證檔案加總起來,就是 etcd 叢集狀態的完整備份。

    sudo cp -r /proc/ETCD_PID/root/secrets ./etcd-backups
    
  8. 使用 tar 工具將 etc-backup 檔案打包成方便的 tar 檔案。

    tar -cvf etcd-backup.tar etcd-backup
    
  9. 返回本機電腦,並使用 scp 工具從管理服務執行個體複製 etcd-backup.tar 檔案。本範例使用先前定義的 BASTION_DNS 和 MANAGEMENT_IP 環境變數。

    scp -i ~/.ssh/anthos-gke -J ubuntu@$BASTION_DNS \
     ubuntu@$MANAGEMENT_IP:~/etcd-backup/backup.tar
    

瞭解詳情