Velero と Azure Blob Storage を使用してワークロード クラスターのバックアップまたは復元を実行する

Velero と Azure Blob をストレージとして使用して、Azure Kubernetes Service (AKS) on Azure Stack HCI and Windows Server 上のバックアップからワークロード クラスターのバックアップ作成または復元を実行できます。 Velero はオープンソースのコミュニティ標準ツールであり、Kubernetes クラスター オブジェクトと永続ボリュームのバックアップと復元に使用できます。 バックアップを格納するためのさまざまなストレージ プロバイダーがサポートされています。

ワークロード クラスターがクラッシュし、復旧に失敗した場合、Velero バックアップを使用して、そのコンテンツと内部 API オブジェクトを新しいクラスターに復元できます。

Velero をデプロイして構成する

Velero をデプロイして構成するには、次の手順に従います。

  1. ワークステーションに Velero CLI をインストールします。 Windows マシン上で、Chocolatey を使用して Veleroクライアントをインストールできます。

    choco install velero
    
  2. Azure ストレージ アカウントと BLOB コンテナーを設定します

    Azure ストレージ アカウントと BLOB コンテナーを作成するには、アクティブな Azure サブスクリプションが必要です。これは、Velero でバックアップを格納するために両方が必要なためです。 バックアップの作成時に使用したものとは異なる Azure サブスクリプションを使用する場合は、Azure サブスクリプションを変更することができます。 既定では、Velero では VM およびディスクと同じサブスクリプションにバックアップが格納され、別のサブスクリプションのリソース グループにバックアップを復元することはできません。 サブスクリプションをまたぐバックアップと復元を有効にするには、使用するサブスクリプション ID を指定する必要があります。

    バックアップを作成する Azure サブスクリプションに切り替えるには、az account PowerShell コマンドを使用します。

    最初に、サブスクリプション ID の名前を見つけます。

    AZURE_BACKUP_SUBSCRIPTION_NAME=<NAME_OF_TARGET_SUBSCRIPTION>
    AZURE_BACKUP_SUBSCRIPTION_ID=$(az account list --query="[?name=='$AZURE_BACKUP_SUBSCRIPTION_NAME'].id | [0]" -o tsv)
    

    次に、サブスクリプションを現在のアクティブなサブスクリプションとして設定します。

    az account set -s $AZURE_BACKUP_SUBSCRIPTION_ID
    

    次に、バックアップ ストレージ アカウント用のリソース グループを作成し、次のコマンドを実行します (必要に応じて場所を変更します)。 この例は、別の Velero_Backups リソース グループに作成されたストレージ アカウントを示しています。

    AZURE_BACKUP_RESOURCE_GROUP=Velero_Backups
    az group create -n $AZURE_BACKUP_RESOURCE_GROUP --location WestUS
    

    DNS に使用されるため、グローバルに一意の ID を持つストレージ アカウントを作成する必要があります。 次のサンプル スクリプトでは uuidgen を使用してランダムな名前が生成されますが、ストレージ アカウントに対する Azure 名前付けルール.に従っている限り、任意の名前を選択できます。 ストレージ アカウントは、保存データの暗号化機能 (Microsoft マネージド キー) を使用して作成され、HTTPS 経由でのみアクセスを許可するように構成されています。

    ストレージ アカウントを作成するには、次のコマンドを実行します。

    AZURE_STORAGE_ACCOUNT_ID="velero$(uuidgen | cut -d '-' -f5 | tr '[A-Z]' '[a-z]')"
    az storage account create \
       --name $AZURE_STORAGE_ACCOUNT_ID \
       --resource-group $AZURE_BACKUP_RESOURCE_GROUP \
       --sku Standard_GRS \
       --encryption-services blob \
       --https-only true \
       --kind BlobStorage \
       --access-tier Hot
    

    最後に、velero という名前の BLOB コンテナーを作成します。 別の名前を選択することもできますが、できる限り、1つの Kubernetes クラスターで一意である必要があります。

    BLOB_CONTAINER=velero
    az storage container create -n $BLOB_CONTAINER --public-access off --account-name $AZURE_STORAGE_ACCOUNT_ID
    
  3. Velero のアクセス許可を設定し、サービス プリンシパルを作成します。

    まず、次のコマンドを実行して、Azure アカウントのサブスクリプション ID とテナント ID を取得します。

    AZURE_SUBSCRIPTION_ID=`az account list --query '[?isDefault].id' -o tsv`
    AZURE_TENANT_ID=`az account list --query '[?isDefault].tenantId' -o tsv`
    

    次に、Contributor ロールを使用してサービス プリンシパルを作成します。 このロールにはサブスクリプション全体のアクセス権があるため、この資格情報を保護する必要があります。 サービス プリンシパルを作成するときに、CLI でパスワードを自動生成し、そのパスワードを必ずキャプチャしてください。

    Velero を使用して、複数の BLOB コンテナーを持つ複数のクラスターをバックアップする場合は、既定の名前 velero ではなく、クラスターごとに一意のユーザー名を作成することをお勧めします。

    注意

    バックアップとクラスター リソースに別のサブスクリプションを使用している場合は、--scopes を使用して、az コマンドで両方のサブスクリプションを指定するようにしてください。

    AZURE_CLIENT_SECRET=`az ad sp create-for-rbac --name "velero" --role "Contributor" --scopes /subscriptions/<subscription_id> --query 'password' -o tsv \
    --scopes  /subscriptions/$AZURE_SUBSCRIPTION_ID[ /subscriptions/$AZURE_BACKUP_SUBSCRIPTION_ID]`
    

    --name の値が、他のサービス プリンシパルおよびアプリの登録と競合していないことを確認します。

    サービス プリンシパルを作成した後、次のコマンドを実行してクライアント ID を取得します。

    AZURE_CLIENT_ID=`az ad sp list --display-name "velero" --query '[0].appId' -o tsv`
    

    最後に、関連するすべての環境変数を含むファイルを作成します。 コマンドは次のようになります。

    cat << EOF  > ./credentials-velero
    AZURE_SUBSCRIPTION_ID=${AZURE_SUBSCRIPTION_ID}
    AZURE_TENANT_ID=${AZURE_TENANT_ID}
    AZURE_CLIENT_ID=${AZURE_CLIENT_ID}
    AZURE_CLIENT_SECRET=${AZURE_CLIENT_SECRET}
    AZURE_RESOURCE_GROUP=${AZURE_RESOURCE_GROUP}
    AZURE_CLOUD_NAME=AzurePublicCloud
    EOF
    
  4. Velero をインストールして起動します

    Velero およびすべての前提条件をクラスターにインストールしてから、デプロイを開始します。 デプロイでは、velero という名前の名前空間が作成され、velero という名前のデプロイが中に配置されます。

    ファイル システム レベルで Kubernetes ボリュームをバックアップするには、Restic を使用し、--use-restic を追加してください。 現在、AKS on Azure Stack HCI and Windows Server ではボリューム スナップショットはサポートされていません。

    velero install \
       --provider azure \
       --plugins velero/velero-plugin-for-microsoft-azure:v1.3.0 \
       --bucket $BLOB_CONTAINER \
       --secret-file ./credentials-velero \
       --backup-location-config resourceGroup=$AZURE_BACKUP_RESOURCE_GROUP,storageAccount=$AZURE_STORAGE_ACCOUNT_ID[,subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID] \
       --use-restic
    
  5. 次のコマンドを実行して、Velero サービスが正常に実行しているかどうかを確認します。

    kubectl -n velero get pods
    kubectl logs deployment/velero -n velero
    

Velero を使用してワークロード クラスターのバックアップを作成する

クラスター内のすべてのオブジェクトをバックアップまたは復元することも、種類、名前空間、またはラベルを使用してオブジェクトをフィルター処理することもできます。

クラスターの基本的なオンデマンド バックアップを実行するには、次のようにします。

velero backup create <BACKUP-NAME> --default-volumes-to-restic

バックアップの進行状況を確認するには、次のようにします。

velero backup describe <BACKUP-NAME>

上記の手順に従った後、作成した BLOB コンテナーの下にある Azure ストレージ アカウントでバックアップを確認できます。

Velero を使用してワークロード クラスターを復元する

既存のクラスターにクラスターのバックアップを復元することはできないため、復元先の新しいクラスターを最初に作成する必要があります。 復元操作を使用すると、以前に作成したバックアップからすべてのオブジェクトと永続ボリュームを復元できます。 また、フィルター処理されたオブジェクトと永続ボリュームのサブセットだけを復元することもできます。

バックアップを復元する移行先クラスターで、次の手順を実行します。

  1. ソース クラスターで行ったときと同じ Azure 資格情報を使用して、Velero をデプロイして構成します

  2. 次のコマンドを実行して、Velero Backup オブジェクトが作成されていることを確認します。 Velero リソースは、クラウド ストレージ内のバックアップ ファイルと同期されています。

    velero backup describe <BACKUP-NAME>
    
  3. 適切なバックアップ (<BACKUP-NAME>) が使用可能であることを確認したら、次のコマンドを使用してすべてを復元できます。

    velero restore create --from-backup <BACKUP-NAME>
    

Velero をアンインストールする

クラスターから Velero を完全にアンインストールする場合、次のコマンドを実行すると、velero install によって作成されたすべてのリソースが削除されます。

kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero

その他のメモ

  • Windows での Velero: Velero では Windows は正式にサポートされていません。 テストでは、Velero チームはステートレスな Windows アプリケーションのみバックアップできました。 Restic 統合およびステートフル アプリケーションまたは永続ボリュームのバックアップはサポートされていません。

  • Velero CLI ヘルプ: 特定のコマンドに関連付けられているすべてのオプションを表示するには、コマンドで --help フラグを使用します。 たとえば、velero restore create --help では、velero restore create コマンドに関連付けられているすべてのオプションが表示されます。 または、velero restore のすべてのオプションを一覧表示するには、velero restore --help を実行します。

      velero restore [command]
      Available Commands:
      create      Create a restore
      delete      Delete restores
      describe    Describe restores
      get         Get restores
      logs        Get restore logs
    

参考資料

Velero が動作するしくみRestic 統合