6.5. レプリケーションリポジトリーの設定
オブジェクトストレージをレプリケーションリポジトリーとして使用するように設定する必要があります。Migration Toolkit for Containers (MTC) は、データをソースクラスターからレプリケーションリポジトリーにコピーしてから、レプリケーションリポジトリーからターゲットクラスターにコピーします。
MTC は、ソースクラスターからターゲットクラスターにデータを移行するために、ファイルシステムおよびスナップショットによるデータのコピー方法 をサポートします。ご使用の環境に適した方法で、ストレージプロバイダーでサポートされる方法を選択できます。
以下のストレージプロバイダーがサポートされています。
- Multicloud Object Gateway
- Amazon Web Services S3
- Google Cloud Platform
- Microsoft Azure Blob
- 汎用 S3 オブジェクトストレージ (例: Minio または Ceph S3)
6.5.1. 前提条件
- すべてのクラスターには、レプリケーションリポジトリーへの中断されないネットワークアクセスが必要です。
- 内部でホストされるレプリケーションリポジトリーでプロキシーサーバーを使用する場合は、プロキシーがレプリケーションリポジトリーへのアクセスを許可することを確認する必要があります。
6.5.2. Multicloud Object Gateway の認証情報の取得
MCG を Migration Toolkit for Containers (MTC) のレプリケーションリポジトリーとして設定するには、Multicloud Object Gateway (MCG) 認証情報と S3 エンドポイントを取得する必要があります。OpenShift API for Data Protection (OADP) の Secret
カスタムリソース (CR) を作成するには、Multicloud Object Gateway (MCG) 認証情報を取得する必要があります。
MCG は、OpenShift Data Foundation のコンポーネントです。
前提条件
- 適切な OpenShift Data Foundation deployment guide を使用して、OpenShift Data Foundation をデプロイする必要があります。
手順
NooBaa
カスタムリソースでdescribe
コマンドを実行して、S3 エンドポイントであるAWS_ACCESS_KEY_ID
およびAWS_SECRET_ACCESS_KEY
を取得します。これらの認証情報を使用して、MCG をレプリケーションリポジトリーとして追加します。
6.5.3. Amazon Web Services の設定
Amazon Web Services (AWS) S3 オブジェクトストレージを、Migration Toolkit for Containers (MTC) のレプリケーションリポジトリーとして設定します。
前提条件
- AWS CLI がインストールされていること。
- AWS S3 ストレージバケットは、ソースクラスターおよびターゲットクラスターからアクセスできる必要があります。
スナップショットのコピー方法を使用する場合は、以下の条件を満たす必要があります。
- EC2 Elastic Block Storage (EBS) にアクセスできる必要があります。
- ソースおよびターゲットクラスターが同じリージョンにある必要があります。
- ソースおよびターゲットクラスターには、同じストレージクラスがある必要があります。
- ストレージクラスはスナップショットと互換性がある必要があります。
手順
BUCKET
変数を設定します。$ BUCKET=<your_bucket>
REGION
変数を設定します。$ REGION=<your_region>
AWS S3 バケットを作成します。
$ aws s3api create-bucket \ --bucket $BUCKET \ --region $REGION \ --create-bucket-configuration LocationConstraint=$REGION 1
- 1
us-east-1
はLocationConstraint
をサポートしていません。お住まいの地域がus-east-1
の場合は、--create-bucket-configuration LocationConstraint=$REGION
を省略してください。
IAM ユーザーを作成します。
$ aws iam create-user --user-name velero 1
- 1
- Velero を使用して複数の S3 バケットを持つ複数のクラスターをバックアップする場合は、クラスターごとに一意のユーザー名を作成します。
velero-policy.json
ファイルを作成します。$ cat > velero-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeVolumes", "ec2:DescribeSnapshots", "ec2:CreateTags", "ec2:CreateVolume", "ec2:CreateSnapshot", "ec2:DeleteSnapshot" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:DeleteObject", "s3:PutObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::${BUCKET}/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::${BUCKET}" ] } ] } EOF
ポリシーを添付して、
velero
ユーザーに必要最小限の権限を付与します。$ aws iam put-user-policy \ --user-name velero \ --policy-name velero \ --policy-document file://velero-policy.json
velero
ユーザーのアクセスキーを作成します。$ aws iam create-access-key --user-name velero
出力例
{ "AccessKey": { "UserName": "velero", "Status": "Active", "CreateDate": "2017-07-31T22:24:41.576Z", "SecretAccessKey": <AWS_SECRET_ACCESS_KEY>, "AccessKeyId": <AWS_ACCESS_KEY_ID> } }
AWS_SECRET_ACCESS_KEY
とAWS_ACCESS_KEY_ID
を記録します。認証情報を使用して、AWS をレプリケーションリポジトリーとして追加します。
6.5.4. Google Cloud Platform の設定
Google Cloud Platform (GCP) ストレージバケットを Migration Toolkit for Containers (MTC) のレプリケーションリポジトリーとして設定します。
前提条件
-
gcloud
およびgsutil
CLI ツールがインストールされている必要があります。詳細は、Google Cloud のドキュメント をご覧ください。 - GCP ストレージバケットは、ソースクラスターおよびターゲットクラスターからアクセスできる必要があります。
スナップショットのコピー方法を使用する場合は、以下の条件を満たす必要があります。
- ソースおよびターゲットクラスターが同じリージョンにある必要があります。
- ソースおよびターゲットクラスターには、同じストレージクラスがある必要があります。
- ストレージクラスはスナップショットと互換性がある必要があります。
手順
GCP にログインします。
$ gcloud auth login
BUCKET
変数を設定します。$ BUCKET=<bucket> 1
- 1
- バケット名を指定します。
ストレージバケットを作成します。
$ gsutil mb gs://$BUCKET/
PROJECT_ID
変数をアクティブなプロジェクトに設定します。$ PROJECT_ID=$(gcloud config get-value project)
サービスアカウントを作成します。
$ gcloud iam service-accounts create velero \ --display-name "Velero service account"
サービスアカウントをリスト表示します。
$ gcloud iam service-accounts list
email
の値と一致するようにSERVICE_ACCOUNT_EMAIL
変数を設定します。$ SERVICE_ACCOUNT_EMAIL=$(gcloud iam service-accounts list \ --filter="displayName:Velero service account" \ --format 'value(email)')
ポリシーを添付して、
velero
ユーザーに必要最小限の権限を付与します。$ ROLE_PERMISSIONS=( compute.disks.get compute.disks.create compute.disks.createSnapshot compute.snapshots.get compute.snapshots.create compute.snapshots.useReadOnly compute.snapshots.delete compute.zones.get storage.objects.create storage.objects.delete storage.objects.get storage.objects.list iam.serviceAccounts.signBlob )
velero.server
カスタムロールを作成します。$ gcloud iam roles create velero.server \ --project $PROJECT_ID \ --title "Velero Server" \ --permissions "$(IFS=","; echo "${ROLE_PERMISSIONS[*]}")"
IAM ポリシーバインディングをプロジェクトに追加します。
$ gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role projects/$PROJECT_ID/roles/velero.server
IAM サービスアカウントを更新します。
$ gsutil iam ch serviceAccount:$SERVICE_ACCOUNT_EMAIL:objectAdmin gs://${BUCKET}
IAM サービスアカウントのキーを現在のディレクトリーにある
credentials-velero
ファイルに保存します。$ gcloud iam service-accounts keys create credentials-velero \ --iam-account $SERVICE_ACCOUNT_EMAIL
credentials-velero
ファイルを使用して、GCP をレプリケーションリポジトリーとして追加します。
6.5.5. Microsoft Azure の設定
Microsoft Azure Blob ストレージコンテナーを Migration Toolkit for Containers (MTC) のレプリケーションリポジトリーとして設定します。
前提条件
- Azure CLI がインストールされていること。
- Azure Blob ストレージコンテナーがソースクラスターおよびターゲットクラスターからアクセスできること。
スナップショットのコピー方法を使用する場合は、以下の条件を満たす必要があります。
- ソースおよびターゲットクラスターが同じリージョンにある必要があります。
- ソースおよびターゲットクラスターには、同じストレージクラスがある必要があります。
- ストレージクラスはスナップショットと互換性がある必要があります。
手順
Azure にログインします。
$ az login
AZURE_RESOURCE_GROUP
変数を設定します。$ AZURE_RESOURCE_GROUP=Velero_Backups
Azure リソースグループを作成します。
$ az group create -n $AZURE_RESOURCE_GROUP --location CentralUS 1
- 1
- 場所を指定します。
AZURE_STORAGE_ACCOUNT_ID
変数を設定します。$ AZURE_STORAGE_ACCOUNT_ID="velero$(uuidgen | cut -d '-' -f5 | tr '[A-Z]' '[a-z]')"
Azure ストレージアカウントを作成します。
$ az storage account create \ --name $AZURE_STORAGE_ACCOUNT_ID \ --resource-group $AZURE_RESOURCE_GROUP \ --sku Standard_GRS \ --encryption-services blob \ --https-only true \ --kind BlobStorage \ --access-tier Hot
BLOB_CONTAINER
変数を設定します。$ BLOB_CONTAINER=velero
Azure Blob ストレージコンテナーを作成します。
$ az storage container create \ -n $BLOB_CONTAINER \ --public-access off \ --account-name $AZURE_STORAGE_ACCOUNT_ID
velero
のサービスプリンシパルおよび認証情報を作成します。$ AZURE_SUBSCRIPTION_ID=`az account list --query '[?isDefault].id' -o tsv` AZURE_TENANT_ID=`az account list --query '[?isDefault].tenantId' -o tsv`
Contributor
ロールを使用してサービスプリンシパルを作成し、specific-role
および--scopes
を割り当てます。$ AZURE_CLIENT_SECRET=`az ad sp create-for-rbac --name "velero" \ --role "Contributor" \ --query 'password' -o tsv \ --scopes /subscriptions/$AZURE_SUBSCRIPTION_ID/resourceGroups/$AZURE_RESOURCE_GROUP`
CLI は、パスワードを生成します。パスワードをキャプチャーしてください。
サービスプリンシパルを作成したら、クライアント ID を取得します。
$ AZURE_CLIENT_ID=`az ad app credential list --id <your_app_id>`
注記これを正常に実行するには、Azure アプリケーション ID を知っている必要があります。
サービスプリンシパルの認証情報を
credentials-velero
ファイルに保存します。$ 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
credentials-velero
ファイルを使用して、Azure をレプリケーションリポジトリーとして追加します。