Velero を使用してワークロード クラスターをバックアップ、復元する

適用対象: AKS on Azure Stack HCI 22H2、AKS on Windows Server

この記事では、Azure Arc で有効になっている AKS の Azure Blob Storage または MinIO ストレージを使用して、Velero をインストールして、ワークロードとターゲット クラスターをバックアップおよび復元する方法について説明します。

Velero は、Kubernetes クラスター オブジェクトと永続ボリュームをバックアップおよび復元するためのオープンソースのコミュニティ標準ツールです。 バックアップを格納するためのさまざまな ストレージ プロバイダー がサポートされています。 AKS Arc ターゲット Kubernetes クラスターがクラッシュして復旧に失敗した場合は、Velero バックアップを使用して、その内容と内部 API オブジェクトを新しいクラスターに復元できます。

Azure Blob Storageにバックアップを保存しない場合は、Velero で MinIO を使用できます。 この記事では、Azure Blob Storageを使用するように Velero をインストールして構成する方法、または MinIO ストレージを使用するように Velero をインストールして構成する方法について説明します。

注意

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

前提条件

Velero のデプロイを開始する前に、次の前提条件を満たす必要があります。

Azure Blob Storageを使用して Velero をインストールする

このセクションの手順では、Velero をインストールし、バックアップにAzure Blob Storageを使用する方法について説明します。 Azure にバックアップを保存しない場合は、「 MiniO ストレージを使用して Velero をインストールする」を参照してください。

  1. PowerShell を管理者として開きます。

  2. Azure CLI を使用して Azure にログインします。

    az login --use-device-code   
    
  3. 次のコマンドを実行して Velero CLI をインストールします。

注意

フラグバージョン 1.9.x を使用できるようにするには、バージョン velero 1.10 以降ではフラグ --use-restic はサポートされなくなりました。

choco install velero   
  1. 必要に応じて、バックアップに使用する Azure サブスクリプションに変更します。

    既定では、Velero は VM とディスクと同じ Azure サブスクリプションにバックアップを格納し、別のサブスクリプションのリソース グループにバックアップを復元することはできません。 サブスクリプション間でバックアップと復元を有効にするには、バックアップに使用するサブスクリプションを指定します。 バックアップに使用するサブスクリプションが既にある場合は、この手順をスキップできます。

    バックアップに使用するサブスクリプションに切り替えます。

    1. サブスクリプション名を使用して、サブスクリプション 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)
      
    2. 次に、サブスクリプションを変更します。

      az account set -s $AZURE_BACKUP_SUBSCRIPTION_ID
      
  2. Azure ストレージ アカウントと BLOB コンテナーを作成します。

    バックアップにAzure Blob Storageを使用する場合、Velero には、バックアップを格納するためのストレージ アカウントと BLOB コンテナーが必要です。 次の例は、新しいVelero_Backups リソース グループに作成されたストレージ アカウント 示しています。

    DNS で使用できるグローバルに一意の ID を持つストレージ アカウントを作成する必要があります。 サンプル スクリプトでは、アプリを uuidgen 使用して一意の名前をランダムに生成します。 名前がストレージ アカウントの Azure 名前付け規則に従う限り、任意の方法を使用できます。

    ストレージ アカウントは保存時の暗号化機能 (Microsoft マネージド キーを使用) で作成され、HTTPS 接続経由のアクセスのみを許可するように構成されています。

    ストレージ アカウントと BLOB コンテナーを作成するには、次の手順に従います。

    1. バックアップ ストレージ アカウントのリソース グループを作成します。 必要に応じてディレクトリを任意の場所に変更し、次のコマンドを実行します。

      $AZURE_BACKUP_RESOURCE_GROUP="Velero_Backups"
      az group create -n $AZURE_BACKUP_RESOURCE_GROUP --location WestUS
      
    2. ストレージ アカウントを作成します。

      $AZURE_STORAGE_ACCOUNT_ID="<NAME_OF_ACCOUNT_TO_ASSIGN>"
      
      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
      
    3. BLOB コンテナーを作成します。

      $BLOB_CONTAINER="velero"
      az storage container create -n $BLOB_CONTAINER --public-access off --account-name $AZURE_STORAGE_ACCOUNT_ID
      

      この例では、 という名前 veleroの BLOB コンテナーを使用します。 別の名前 (できれば 1 つの Kubernetes クラスターに固有) を使用できます。

  3. サービス プリンシパルを作成します。

    1. 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) 
      
    2. 共同作成者特権を持つサービス プリンシパルを作成します。

      共同作成者ロールを使用してサービス プリンシパルを作成することも、カスタム ロールを使用することもできます。

      • 共同作成者ロール: 共同作成者ロールはサブスクリプション全体のアクセス権を付与するため、そのロールを割り当てる場合は、必ずこの資格情報を保護してください。
      • カスタム ロール: より制限の厳しいロールが必要な場合は、カスタム ロールを使用します。

      共同作成者ロールを割り当てます。

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

      共同作成者ロールを使用してサービス プリンシパルを作成するには、次のコマンドを使用します。 独自のサブスクリプション ID と、必要に応じて独自のサービス プリンシパル名を置き換えます。 Microsoft Entra IDによってシークレットが生成されます。

      $AZURE_CLIENT_SECRET=(az ad sp create-for-rbac --name "velero" --role "Contributor" --query 'password' -o tsv --scopes  /subscriptions/$AZURE_SUBSCRIPTION_ID)
      

      必要に応じて、コマンドに対して次の調整を行います。

      • ワークロード クラスターと Velero バックアップ ファイルに異なるサブスクリプションを使用する予定の場合は、次の例のように、両方のサブスクリプション ID を指定します。

        $AZURE_CLIENT_SECRET=(az ad sp create-for-rbac --name "velero" --role "Contributor" --query 'password' -o tsv --scopes  /subscriptions/$AZURE_SUBSCRIPTION_ID /subscriptions/$AZURE_BACKUP_SUBSCRIPTION_ID)
        
      • サービス プリンシパル名としてを使用veleroしない場合は、選択した--nameがMicrosoft Entra IDで一意であり、他のサービス プリンシパルやアプリの登録と競合していないことを確認します。

      重要

      シークレットは、サービス プリンシパルが作成されるときに、この手順中にのみ表示されます。 今後の手順で使用するシークレットは必ずメモしておいてください。

      カスタム ロールを使用する:

      リソース プロバイダーの最小アクションを有効にする場合は、カスタム ロールを作成し、そのロールをサービス プリンシパルに割り当てます。

      1. 次の内容を 含む azure-role.json という名前のファイルを作成します。 独自のカスタム ロール名とサブスクリプション ID を置き換えます。

        {
            "Name": <CUSTOM_ROLE_NAME>,
            "Id": null,
            "IsCustom": true,
            "Description": "Velero related permissions to perform backups, restores and deletions",
            "Actions": [
                "Microsoft.Compute/disks/read",
                "Microsoft.Compute/disks/write",
                "Microsoft.Compute/disks/endGetAccess/action",
                "Microsoft.Compute/disks/beginGetAccess/action",
                "Microsoft.Compute/snapshots/read",
                "Microsoft.Compute/snapshots/write",
                "Microsoft.Compute/snapshots/delete",
                "Microsoft.Storage/storageAccounts/listkeys/action",
                "Microsoft.Storage/storageAccounts/regeneratekey/action"
            ],
            "NotActions": [],
            "AssignableScopes": [
              "<SUBSCRIPTION_ID>"
            ]
        }
        
      2. カスタム ロールとサービス プリンシパルを作成します。

        az role definition create --role-definition azure-role.json
        
        $AZURE_CLIENT_SECRET=(az ad sp create-for-rbac --name "velero" --role "<CUSTOM_ROLE>" --query 'password' -o tsv --scopes  /subscriptions/$AZURE_SUBSCRIPTION_ID)
        

      カスタム ロールの作成の詳細については、「 Velero のアクセス許可を設定する」を参照してください。

  4. サービス プリンシパル名を取得し、その名前を AZURE_CLIENT_ID 変数に割り当てます。

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

    注意

    サービス プリンシパルの有効期限が切れます。 新しいサービス プリンシパルの有効期限を確認するには、次のコマンドを実行します。 az ad sp show --id $AZURE_CLIENT_ID

  5. 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_BACKUP_RESOURCE_GROUP}
    AZURE_CLOUD_NAME=AzurePublicCloud" | Out-File -FilePath ./credentials-velero.txt
    

    重要

    Velero をインストールした後、このファイルを削除します。 クライアント シークレットはプレーンテキストであり、セキュリティ 上のリスクを引き起こす可能性があります。

    先に進む前に、ファイルが正しく書式設定されていることを確認します。 ファイル名拡張子は関係ありません。

    • 余分なスペースまたはタブを削除します。
    • 変数名が正しいことを確認します。
  6. Velero をインストールして起動します。

    クラスターに Velero をインストールし、デプロイを開始します。 この手順では、 という名前 velero の名前空間を作成し、 という名前 velero のデプロイを名前空間に追加します。

    1. 次のコマンドを使用して Velero をインストールします。 サンプル コマンドをカスタマイズする必要があります。

      velero install --provider azure --plugins velero/velero-plugin-for-microsoft-azure:v1.5.0 --bucket $BLOB_CONTAINER --secret-file ./credentials-velero.txt --backup-location-config resourceGroup=$AZURE_BACKUP_RESOURCE_GROUP,storageAccount=$AZURE_STORAGE_ACCOUNT_ID,subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID --use-restic
      

      必要に応じて、次の変数を設定します。

      • このコマンドを実行すると、Microsoft Azure プラグインがインストールされます。このプラグインは、使用している Velero CLI バージョンと互換性がある必要があります。 このコマンド例では、最新の Velero CLI バージョン 1.9.0 と互換性のある Microsoft Azure プラグイン バージョン 1.5.0 を使用します。 Valero CLI バージョンでインストールする Microsoft Azure プラグインのバージョンを確認するには、 互換性マトリックスを参照してください。

      • を使用Resticして、ファイル システム レベルで Kubernetes ボリュームのバックアップを有効にするには、 パラメーターを必ず含めます--use-resticRestic を使用して、任意の種類の Kubernetes ボリュームをバックアップできます。 Velero では、既定では、Amazon EBS ボリューム、Azure Managed Disks、Google Persistent Disks の永続ボリュームのスナップショットの作成がサポートされています。 AKS Arc では、Kubernetes ボリュームはクラスター共有ボリューム (CSV) を使用してデータを格納します。 そのため、 Restic 永続ボリューム スナップショットを有効にするには が必要です。 AKS Arc では現在、ボリューム スナップショットはサポートされていません。

      • subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID はオプションです。 Velero とワークロード クラスターのサブスクリプション ID が異なる場合にのみ、それを含める必要があります。 同じ Azure サブスクリプションを使用している場合は、 パラメーターを subscriptionId 削除すると、 credentials-velero.txt ファイルによってその情報が提供されます。

      Velero サービスはインストール時に自動的に開始されます。

    2. Velero サービスが正しく実行されているかどうかを確認します。

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

      コマンドは get pods 、Velero ポッドが実行されていることを示す必要があります。

MinIO ストレージを使用して Velero をインストールする

このセクションの手順では、Velero をインストールし、バックアップに MinIO ストレージを使用する方法について説明します。 バックアップにAzure Blob Storageを使用する場合は、Azure Blob Storageを使用して Velero をインストールする方法に関するページを参照してください。

MinIO にバックアップを保存しない場合は、「Azure Blob Storageを使用するように Velero を設定する」に移動します。

  1. 次のコマンドを実行して Velero CLI をインストールします。 インストール Chocolately まだ行っていない場合は 。

    choco install velero
    
  2. MinIO をインストールします。

    1. MinIO バックアップを格納する永続ボリュームを作成します。 この例では、AKS Arc の既定のストレージ クラスに永続ボリュームを作成します。これは既に存在します。

      1. 次の内容を含む minio-pvc-storage.yaml という名前の YAML ファイルを作成します。

        kind: PersistentVolumeClaim
        apiVersion: v1
        metadata: 
        name: minio-pv-claim 
        spec: 
        storageClassName: default 
        accessModes: 
           - ReadWriteOnce 
        resources: 
           requests: 
              storage: 100Gi 
        

        次のコマンドを実行して、永続ボリュームを作成します。

        kubectl create -f minio-pvc-storage.yaml
        
      2. MinIO を開始するためのデプロイ ファイル minio-deployment.yaml を作成します。 次の内容を含めます。 デプロイでは、作成した永続ボリュームが使用されます。

        apiVersion: apps/v1
        kind: Deployment
        metadata:
        name: minio-deployment 
        spec: 
        selector: 
           matchLabels: 
              app: minio 
        strategy: 
           type: Recreate 
        template: 
           metadata: 
              labels: 
              app: minio 
           spec: 
              volumes: 
              - name: storage 
              persistentVolumeClaim: 
                 claimName: minio-pv-claim 
              containers: 
              - name: minio 
              image: minio/minio:latest 
              args: 
              - server 
              - /storage 
              env: 
              - name: MINIO_ACCESS_KEY 
                 value: "<you can define this>" 
              - name: MINIO_SECRET_KEY 
                 value: "<you can define this>" 
              ports: 
              - containerPort: 9000 
                 hostPort: 9000 
              volumeMounts: 
              - name: storage  
                 mountPath: "/storage" 
        

        次に、デプロイを作成します。

        kubectl create -f minio-deployment.yaml
        
    2. minio-service.yaml という Kubernetes サービスを作成します。 このサービスは、MinIO ポッドに外部 IP アドレスを提供します。

      サービスを構成するには、次の設定を使用して YAML ファイルを作成します。

      apiVersion: v1 
      kind: Service 
      metadata: 
      name: minio-service 
      spec: 
      type: LoadBalancer 
      ports: 
         - port: 9000 
            targetPort: 9000 
            protocol: TCP 
      selector: 
         app: minio 
      

      次に、サービスを作成します。

      kubectl create -f mino-service.yaml
      
    3. 次のコマンドを実行して、MinIO ポッドの外部 IP アドレスを取得します。 そのアドレスを使用して Velero をインストールします。

      kubectl get svc
      
    4. MinIO が稼働しているかどうかをチェックするには、ブラウザーで IP アドレスにログインするか、次に説明するように MinIO クライアントを使用します。

      MinIO クライアントをインストールし、MinIO ファイルを参照します。

      MinIO クライアントをダウンロードします。

      Invoke-WebRequest -Uri "https://dl.minio.io/client/mc/release/windows-amd64/mc.exe" -OutFile "C:\mc.exe
      

      次に、エイリアスを設定します。

      mc alias set minio http://10.10.77.6:9000 "minio_access_key" "minio_secret_key" --api s3v4
      

      最後に、MinIO のインストールを参照します。

      mc ls minio
      
    5. Velero ファイルを格納するバケットを作成します。 このバケットは、Velero のインストールで使用されます。

      mc mb minio/velero-backup
      
    6. 次の情報を含む MinIO 資格情報ファイルを作成します。

      minio.credentials 
             [default] 
        aws_access_key_id=<minio_access_key> 
        aws_secret_access_key=<minio_secret_key> 
      
  3. Velero をインストールします。

    velero install --provider aws --bucket velero-backup --secret-file .\minio.credentials --backup-location-config region=minio,s3ForcePathStyle=true,s3Url=http://10.10.77.6:9000 --plugins velero/velero-plugin-for-aws:v1.1.0 --use-restic
    

    このコマンドを実行する前に、バケット名、MinIO 資格情報、MinIO 外部 IP アドレスをチェックします。

  4. Velero サービスが正しく実行されているかどうかを確認します。

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

    コマンドは get pods 、Velero ポッドが実行されていることを示す必要があります。

クラスターをバックアップする

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

バックアップの作成

Velero backup create コマンドを使用して、選択したストレージへのバックアップを作成します。 次の例では、 フラグを--default-volumes-to-restic使用して、永続ボリュームのスナップショットを作成します。 その他のバックアップ オプションについては、 Velero バックアップ リファレンスを参照してください

  • クラスター内のすべての名前空間のオンデマンド バックアップ:

    velero backup create <BACKUP-NAME> --default-volumes-to-restic
    
  • クラスター内の 1 つの名前空間のオンデマンド バックアップ:

    velero backup create <BACKUP-NAME> --include-namespaces <NAMESPACE1> --default-volumes-to-restic
    
  • クラスター内の複数の選択した名前空間のオンデマンド バックアップ:

    velero backup create <BACKUP-NAME> --include-namespaces <NAMESPACE-1>, <NAMESPACE-2> --default-volumes-to-restic
    

バックアップの進行状況を確認する

  • バックアップの進行状況をチェックするには、次のコマンドを実行します。

    velero backup describe <BACKUP-NAME>
    
  • バックアップにAzure Blob Storageを使用している場合は、作成した BLOB またはコンテナーの下にある Azure ストレージ アカウントでバックアップを表示できます。

クラスターを復元する

クラスターを復元するには、古いクラスターを復元する新しいクラスターを作成する必要があります。 クラスター バックアップを既存のクラスターに復元することはできません。

コマンド restore を使用すると、以前に作成したバックアップからすべてのオブジェクトと永続ボリュームを復元できます。 また、フィルター処理されたオブジェクトと永続ボリュームのサブセットだけを復元することもできます。 その他のバックアップ オプションについては、「 リソースのフィルター処理」を参照してください。

バックアップを復元するクラスター ( 宛先クラスター):

  1. 上記の手順を使用して Velero をデプロイします。 ソース クラスターに使用したのと同じ Azure 資格情報を使用します。

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

    velero backup describe <BACKUP-NAME>
    
  3. 適切なバックアップ (BACKUP-NAME) が存在することを確認したら、バックアップ内のすべてのオブジェクトを復元します。

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

Velero コマンドに関するヘルプを表示する

特定の Velero コマンドに関連付けられているすべてのオプションを表示するには、 コマンドで フラグを --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 をアンインストールする

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

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

次の手順