AWS 上のユーザー クラスタのバックアップ

このページでは、クラスタの etcd データが破損するようなイベントから復旧するために、GKE on AWS 環境の etcd データストアをバックアップする方法について説明します。

制限事項

  • バックアップ ファイルを使用した etcd データの復元は最後の手段です。クラスタが完全に破損していない限り、バックアップ ファイルから復元することはおすすめしません。最適な対応策を決める際は、Google サポートにお問い合わせください。

  • この手順では、PersistentVolume を含め、ワークロードからデータがバックアップされません。

  • このバックアップでは、バージョンが異なる 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
    

詳細情報