备份 AWS 上的用户集群

本页面介绍如何备份 GKE on AWS 安装的 etcd 数据存储区,以便从可能破坏集群 etcd 数据的事件中恢复数据。

限制

  • 使用备份文件来恢复 etcd 数据始终是最后的选择。除非集群完全损坏,否则我们不建议从备份文件进行恢复。请与 Google 支持团队联系,请其帮助您确定最合适的行动方案。

  • 此过程不会备份工作负载中的数据,包括 PersistentVolume。

  • 此备份不能用于从不同版本的 GKE on AWS 恢复集群。

备份用户集群

用户集群备份是用户集群的 etcd 存储区的快照。 etcd 存储区包含表示集群状态的所有 Kubernetes 对象和自定义对象。快照包含重新创建集群无状态工作负载所需的数据。

如需创建 etcd 数据存储区的快照,请执行以下步骤:

  1. 在为集群运行 etcd 的管理服务实例上打开 shell。

    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 备份文件捆绑到合适的 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
    

了解详情