Anthos clusters on AWS(GKE on AWS)の新しいバージョンが 9 月 29 日にリリースされました。詳細については、リリースノートをご覧ください。

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

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

制限事項

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

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

  • このバックアップでは、バージョンが異なる AWS 上の Anthos クラスタのクラスタは復元できません。

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

ユーザー クラスタのバックアップは、ユーザー クラスタの 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. ローカルマシンから exit し、scp ツールを使用して、管理サービス インスタンスから etcd-backup.tar ファイルをコピーします。この例では、前述のステップで定義した BASTION_DNS と MANAGEMENT_IP 環境変数を使用します。

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

詳細情報