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

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

この記事では、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 を構成する方法について説明

Note

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

前提条件

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

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

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

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

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

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

    Note

    --use-restic フラグは、Velero バージョン 1.10 以降ではサポートされていません。 フラグはバージョン 1.9.x でのみサポートされます。

    choco install velero   
    
  4. 必要に応じて、バックアップに使用する 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
      
  5. Azure ストレージ アカウントと BLOB コンテナーを作成します。

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

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

    ストレージ アカウントは保存時の暗号化機能 (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 クラスターに固有) を使用できます。

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

    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",
                "Microsoft.Storage/storageAccounts/read"
            ],
            "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 のアクセス許可の設定を参照してください。

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

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

    Note

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

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

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

    • 余分なスペースやタブを削除します。
    • 変数名が正しいことを確認します。
  9. 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
      

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

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

      • Resticを使用してファイル システム レベルで Kubernetes ボリュームのバックアップを有効にするには、必ず --use-restic パラメーターを含めます。 Restic を使用して、任意の種類の 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 にバックアップを保存しない場合は、「 Velero を設定して Azure Blob Storage を使用するに移動します。

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

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

  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

次のステップ