Velero と Azure Blob Storage を使用してワークロード クラスターのバックアップまたは復元を実行する
Velero と Azure Blob をストレージとして使用して、Azure Kubernetes Service (AKS) on Azure Stack HCI and Windows Server 上のバックアップからワークロード クラスターのバックアップ作成または復元を実行できます。 Velero はオープンソースのコミュニティ標準ツールであり、Kubernetes クラスター オブジェクトと永続ボリュームのバックアップと復元に使用できます。 バックアップを格納するためのさまざまなストレージ プロバイダーがサポートされています。
ワークロード クラスターがクラッシュし、復旧に失敗した場合、Velero バックアップを使用して、そのコンテンツと内部 API オブジェクトを新しいクラスターに復元できます。
Velero をデプロイして構成する
Velero をデプロイして構成するには、次の手順に従います。
ワークステーションに Velero CLI をインストールします。 Windows マシン上で、Chocolatey を使用して Veleroクライアントをインストールできます。
choco install velero
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
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
-
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
次のコマンドを実行して、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 を使用してワークロード クラスターを復元する
既存のクラスターにクラスターのバックアップを復元することはできないため、復元先の新しいクラスターを最初に作成する必要があります。 復元操作を使用すると、以前に作成したバックアップからすべてのオブジェクトと永続ボリュームを復元できます。 また、フィルター処理されたオブジェクトと永続ボリュームのサブセットだけを復元することもできます。
バックアップを復元する移行先クラスターで、次の手順を実行します。
ソース クラスターで行ったときと同じ Azure 資格情報を使用して、Velero をデプロイして構成します。
次のコマンドを実行して、Velero Backup オブジェクトが作成されていることを確認します。 Velero リソースは、クラウド ストレージ内のバックアップ ファイルと同期されています。
velero backup describe <BACKUP-NAME>
適切なバックアップ (
<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