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 CLI のインストールを実行します。
Chocolatey
をインストールする。Chocolatey
を使用して、Velero CLI を含む Velero クライアントを Windows コンピューターにインストールできます。
Azure Blob Storage を使用して Velero をインストールする
このセクションの手順では、Velero をインストールし、バックアップに Azure Blob Storage を使用する方法について説明します。 Azure にバックアップを保存しない場合は、「 MiniO Storage を使用した Velero のインストールに移動します。
PowerShell を管理者として開きます。
Azure CLI を使用して Azure にログインします。
az login --use-device-code
次のコマンドを実行して、 Velero CLI をインストールします。
Note
--use-restic
フラグは、Velero バージョン 1.10 以降ではサポートされていません。 フラグはバージョン 1.9.x でのみサポートされます。choco install velero
必要に応じて、バックアップに使用する Azure サブスクリプションに変更します。
既定では、Velero は VM とディスクと同じ Azure サブスクリプションにバックアップを格納し、別のサブスクリプションのリソース グループにバックアップを復元することはできません。 サブスクリプション間でバックアップ操作と復元操作を有効にするには、バックアップに使用するサブスクリプションを指定します。 バックアップに使用するサブスクリプションが既にある場合は、この手順をスキップできます。
バックアップに使用するサブスクリプションに切り替えます。
サブスクリプション名を使用して、サブスクリプション 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
Azure ストレージ アカウントと BLOB コンテナーを作成します。
バックアップに Azure Blob Storage を使用する場合、Velero には、バックアップを格納するためのストレージ アカウントと BLOB コンテナーが必要です。 次の例は、新しい Velero_Backups リソース グループに作成されたストレージ アカウントを示しています。
DNS で使用できるグローバルに一意の ID を持つストレージ アカウントを作成する必要があります。 サンプル スクリプトでは、
uuidgen
アプリを使用して、一意の名前をランダムに生成します。 ストレージ アカウントの名前付け規則 名前に従う限り、任意のメソッドを使用できます。ストレージ アカウントは保存時の暗号化機能 (Microsoft マネージド キーを使用) で作成され、HTTPS 接続経由でのみアクセスを許可するように構成されます。
ストレージ アカウントと BLOB コンテナーを作成するには、次の手順に従います。
バックアップ ストレージ アカウントのリソース グループを作成します。 必要に応じて、ディレクトリを任意の場所に変更し、次のコマンドを実行します。
$AZURE_BACKUP_RESOURCE_GROUP="Velero_Backups" az group create -n $AZURE_BACKUP_RESOURCE_GROUP --location WestUS
ストレージ アカウントを作成します。
$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
BLOB コンテナーを作成します。
$BLOB_CONTAINER="velero" az storage container create -n $BLOB_CONTAINER --public-access off --account-name $AZURE_STORAGE_ACCOUNT_ID
この例では、
velero
という名前の BLOB コンテナーを使用します。 別の名前 (できれば 1 つの Kubernetes クラスターに固有) を使用できます。
サービス プリンシパルを作成します。
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)
共同作成者特権を持つサービス プリンシパルを作成します。
共同作成者ロールを持つサービス プリンシパルを作成することも、カスタム ロールを使用することもできます。
- 共同作成者ロール: 共同作成者ロールはサブスクリプション全体のアクセス権を付与するため、そのロールを割り当てる場合は、この資格情報を必ず保護してください。
- カスタム ロール: より制限の厳しいロールが必要な場合は、カスタム ロールを使用します。
共同作成者ロールを割り当てます。
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 で一意であり、他のサービス プリンシパルやアプリの登録と競合していないことを確認してください。
重要
シークレットは、サービス プリンシパルが作成されるときに、この手順中にのみ表示されます。 今後の手順で使用するシークレットは必ずメモしておいてください。
カスタム ロールを使用する:
リソース プロバイダーの最小アクションを有効にする場合は、カスタム ロールを作成し、そのロールをサービス プリンシパルに割り当てます。
次の内容を含む 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>" ] }
カスタム ロールとサービス プリンシパルを作成します。
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)
サービス プリンシパル名を取得し、その名前を 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
。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 をインストールした後、このファイルを削除します。 クライアント シークレットはプレーンテキストであり、セキュリティ 上のリスクを引き起こす可能性があります。
続行する前に、ファイルが正しく書式設定されていることを確認します。 ファイル名拡張子は関係ありません。
- 余分なスペースやタブを削除します。
- 変数名が正しいことを確認します。
Velero をインストールして起動します。
クラスターに Velero をインストールし、デプロイを開始します。 この手順では、
velero
という名前の名前空間を作成し、velero
という名前のデプロイを名前空間に追加します。次のコマンドを使用して 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 サービスは、インストール時に自動的に開始されます。
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 を使用するに移動します。
次のコマンドを実行して、Velero CLI をインストールします。 まだインストールしていない場合は、
Chocolately
をインストールします。choco install velero
MinIO をインストールします。
MinIO バックアップを格納する永続ボリュームを作成します。 この例では、既に存在する AKS Arc の既定のストレージ クラスに永続ボリュームを作成します。
次の内容 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
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
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
次のコマンドを実行して、MinIO ポッドの外部 IP アドレスを取得します。 そのアドレスを使用して Velero をインストールします。
kubectl get svc
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
Velero ファイルを格納するバケットを作成します。 このバケットは、Velero インストールで使用されます。
mc mb minio/velero-backup
次の情報を含む MinIO 資格情報ファイル minio.credentials を作成します。
[default] aws_access_key_id=<minio_access_key> aws_secret_access_key=<minio_secret_key>
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 アドレスを確認します。
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 クラスター):
上記の手順を使用して Velero をデプロイします。 ソース クラスターに使用したのと同じ Azure 資格情報を使用します。
次のコマンドを実行して、Velero バックアップ オブジェクトが作成されたことを確認します。 Velero リソースは、クラウド ストレージ内のバックアップ ファイルと同期されています。
velero backup describe <BACKUP-NAME>
適切なバックアップ (
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