5.20. OADP と AWS STS
5.20.1. OADP を使用して AWS STS クラスター上のアプリケーションをバックアップする リンクのコピーリンクがクリップボードにコピーされました!
OADP Operator をインストールすることで、Amazon Web Services (AWS) を使用して OpenShift API for Data Protection (OADP) をインストールします。Operator は Velero 1.14 をインストールします。
OADP 1.0.4 以降、すべての OADP 1.0.z バージョンは Migration Toolkit for Containers Operator の依存関係としてのみ使用でき、スタンドアロン Operator として使用することはできません。
Velero 向けに AWS を設定し、デフォルトの Secret
を作成し、次に、Data Protection Application をインストールします。詳細は、OADP Operator のインストール を参照してください。
制限されたネットワーク環境に OADP Operator をインストールするには、最初にデフォルトの OperatorHub ソースを無効にして、Operator カタログをミラーリングする必要があります。詳細は、非接続環境での Operator Lifecycle Manager の使用 を参照してください。
OADP は、AWS Security Token Service (STS) (AWS STS) クラスターに手動でインストールできます。Amazon AWS は、ユーザーのために権限が限られた一時的な認証情報を要求できる AWS STS を Web サービスとして提供しています。STS を使用すると、API 呼び出し、AWS コンソール、または AWS コマンドラインインターフェイス (CLI) を介してリソースへの一時的なアクセスを信頼できるユーザーに提供できます。
OpenShift API for Data Protection (OADP) をインストールする前に、OADP が Amazon Web Services API を使用できるように、OADP のロールとポリシーの認証情報を設定する必要があります。
このプロセスは次の 2 段階で実行されます。
- AWS 認証情報を準備します。
- OADP Operator をインストールし、IAM ロールを付与します。
5.20.1.1. OADP 用の AWS STS 認証情報を準備する リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services アカウントは、OpenShift API for Data Protection (OADP) インストールを受け入れるように準備および設定する必要があります。次の手順に従って AWS 認証情報を準備します。
手順
次のコマンドを実行して、
cluster_name
環境変数を定義します。export CLUSTER_NAME= <AWS_cluster_name>
$ export CLUSTER_NAME= <AWS_cluster_name>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 変数は任意の値に設定できます。
次のコマンドを実行して、
AWS_ACCOUNT_ID, OIDC_ENDPOINT
などのcluster
の詳細をすべて取得します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、すべてのファイルを保存するための一時ディレクトリーを作成します。
export SCRATCH="/tmp/${CLUSTER_NAME}/oadp"
$ export SCRATCH="/tmp/${CLUSTER_NAME}/oadp" mkdir -p ${SCRATCH}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、収集したすべての詳細を表示します。
echo "Cluster ID: ${AWS_CLUSTER_ID}, Region: ${REGION}, OIDC Endpoint:
$ echo "Cluster ID: ${AWS_CLUSTER_ID}, Region: ${REGION}, OIDC Endpoint: ${OIDC_ENDPOINT}, AWS Account ID: ${AWS_ACCOUNT_ID}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AWS アカウントで、AWS S3 へのアクセスを許可する IAM ポリシーを作成します。
次のコマンドを実行して、ポリシーが存在するかどうかを確認します。
export POLICY_NAME="OadpVer1"
$ export POLICY_NAME="OadpVer1"
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 変数は任意の値に設定できます。
POLICY_ARN=$(aws iam list-policies --query "Policies[?PolicyName=='$POLICY_NAME'].{ARN:Arn}" --output text)
$ POLICY_ARN=$(aws iam list-policies --query "Policies[?PolicyName=='$POLICY_NAME'].{ARN:Arn}" --output text)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力してポリシー JSON ファイルを作成し、ポリシーを作成します。
注記ポリシー ARN が見つからない場合、コマンドはポリシーを作成します。ポリシー ARN がすでに存在する場合、
if
ステートメントはポリシーの作成を意図的にスキップします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
SCRATCH
は、ファイルを保存するために作成した一時ディレクトリーの名前です。
以下のコマンドを実行してポリシー ARN を表示します。
echo ${POLICY_ARN}
$ echo ${POLICY_ARN}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
クラスターの IAM ロール信頼ポリシーを作成します。
次のコマンドを実行して、信頼ポリシーファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、クラスターの IAM ロール信頼ポリシーを作成します。
ROLE_ARN=$(aws iam create-role --role-name \ "${ROLE_NAME}" \ --assume-role-policy-document file://${SCRATCH}/trust-policy.json \ --tags Key=cluster_id,Value=${AWS_CLUSTER_ID} Key=openshift_version,Value=${CLUSTER_VERSION} Key=operator_namespace,Value=openshift-adp Key=operator_name,Value=oadp --query Role.Arn --output text)
$ ROLE_ARN=$(aws iam create-role --role-name \ "${ROLE_NAME}" \ --assume-role-policy-document file://${SCRATCH}/trust-policy.json \ --tags Key=cluster_id,Value=${AWS_CLUSTER_ID} Key=openshift_version,Value=${CLUSTER_VERSION} Key=operator_namespace,Value=openshift-adp Key=operator_name,Value=oadp --query Role.Arn --output text)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ロール ARN を表示します。
echo ${ROLE_ARN}
$ echo ${ROLE_ARN}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、IAM ポリシーを IAM ロールにアタッチします。
aws iam attach-role-policy --role-name "${ROLE_NAME}" --policy-arn ${POLICY_ARN}
$ aws iam attach-role-policy --role-name "${ROLE_NAME}" --policy-arn ${POLICY_ARN}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.20.1.1.1. Velero の CPU とメモリーのリソース割り当てを設定 リンクのコピーリンクがクリップボードにコピーされました!
DataProtectionApplication
カスタムリソース (CR) マニフェストを編集して、Velero
Pod の CPU およびメモリーリソースの割り当てを設定します。
前提条件
- OpenShift API for Data Protection (OADP) Operator がインストールされている必要があります。
手順
次の例のように、
DataProtectionApplication
CR マニフェストのspec.configuration.velero.podConfig.ResourceAllocations
ブロックの値を編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Kopia は OADP 1.3 以降のリリースで選択できます。Kopia はファイルシステムのバックアップに使用できます。組み込みの Data Mover を使用する Data Mover の場合は、Kopia が唯一の選択肢になります。
Kopia は Restic よりも多くのリソースを消費するため、それに応じて CPU とメモリーの要件を調整しなければならない場合があります。
5.20.1.2. OADP Operator のインストールおよび IAM ロールの指定 リンクのコピーリンクがクリップボードにコピーされました!
AWS Security Token Service (AWS STS) は、IAM またはフェデレーションされたユーザーの短期認証情報を提供するグローバル Web サービスです。このドキュメントでは、OpenShift API for Data Protection (OADP) を AWS STS クラスターに手動でインストールする方法を説明します。
Restic と Kopia は、OADP AWS STS 環境ではサポートされていません。Restic および Kopia のノードエージェントが無効になっていることを確認してください。ボリュームをバックアップする場合、AWS STS 上の OADP は、ネイティブスナップショットと Container Storage Interface (CSI) スナップショットのみをサポートします。
STS 認証を使用する AWS クラスターでは、バックアップデータを別の AWS リージョンに復元することはサポートされていません。
Data Mover 機能は現在、AWS STS クラスターではサポートされていません。データの移動にはネイティブ AWS S3 ツールを使用できます。
前提条件
-
必要なアクセス権とトークンを備えた OpenShift Container Platform AWS STS クラスター。詳細は、前の手順である OADP 用の AWS 認証情報の準備 を参照してください。バックアップと復元に 2 つの異なるクラスターを使用する予定の場合は、
ROLE_ARN
を含む AWS 認証情報をクラスターごとに準備する必要があります。
手順
次のコマンドを入力して、AWS トークンファイルから OpenShift Container Platform シークレットを作成します。
認証情報ファイルを作成します。
cat <<EOF > ${SCRATCH}/credentials [default] role_arn = ${ROLE_ARN} web_identity_token_file = /var/run/secrets/openshift/serviceaccount/token EOF
$ cat <<EOF > ${SCRATCH}/credentials [default] role_arn = ${ROLE_ARN} web_identity_token_file = /var/run/secrets/openshift/serviceaccount/token EOF
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OADP の namespace を作成します。
oc create namespace openshift-adp
$ oc create namespace openshift-adp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform シークレットを作成します。
oc -n openshift-adp create secret generic cloud-credentials \ --from-file=${SCRATCH}/credentials
$ oc -n openshift-adp create secret generic cloud-credentials \ --from-file=${SCRATCH}/credentials
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記OpenShift Container Platform バージョン 4.14 以降では、OADP Operator は Operator Lifecycle Manager (OLM) および Cloud Credentials Operator (CCO) を通じて、標準化された新しい STS ワークフローをサポートします。このワークフローでは、上記シークレットの作成は必要ありません。OpenShift Container Platform Web コンソールを使用して、OLM で管理される Operator のインストール中にロール ARN のみ指定する必要があります。詳細は、Web コンソールを使用して OperatorHub からインストールする を参照してください。
前述のシークレットは CCO によって自動的に作成されます。
OADP Operator をインストールします。
-
OpenShift Container Platform Web コンソールで、Operators
OperatorHub ページを表示します。 - OADP Operator を検索します。
- role_ARN フィールドに、前に作成した role_arn を貼り付け、Install をクリックします。
-
OpenShift Container Platform Web コンソールで、Operators
次のコマンドを入力し、AWS 認証情報を使用して AWS クラウドストレージを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、アプリケーションのストレージのデフォルトストレージクラスを確認します。
oc get pvc -n <namespace>
$ oc get pvc -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE applog Bound pvc-351791ae-b6ab-4e8b-88a4-30f73caf5ef8 1Gi RWO gp3-csi 4d19h mysql Bound pvc-16b8e009-a20a-4379-accc-bc81fedd0621 1Gi RWO gp3-csi 4d19h
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE applog Bound pvc-351791ae-b6ab-4e8b-88a4-30f73caf5ef8 1Gi RWO gp3-csi 4d19h mysql Bound pvc-16b8e009-a20a-4379-accc-bc81fedd0621 1Gi RWO gp3-csi 4d19h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してストレージクラスを取得します。
oc get storageclass
$ oc get storageclass
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE gp2 kubernetes.io/aws-ebs Delete WaitForFirstConsumer true 4d21h gp2-csi ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21h gp3 ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21h gp3-csi (default) ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21h
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE gp2 kubernetes.io/aws-ebs Delete WaitForFirstConsumer true 4d21h gp2-csi ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21h gp3 ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21h gp3-csi (default) ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記次のストレージクラスが機能します。
- gp3-csi
- gp2-csi
- gp3
- gp2
すべてのアプリケーション、またはバックアップされるアプリケーションが Container Storage Interface (CSI) で永続ボリューム (PV) を使用している場合は、OADP DPA 設定に CSI プラグインを含めることをお勧めします。
バックアップとボリュームスナップショットが保存されるストレージへの接続を設定するために、
DataProtectionApplication
リソースを作成します。CSI ボリュームのみを使用している場合は、次のコマンドを入力して Data Protection Application をデプロイします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- イメージのバックアップを使用しない場合は、このフィールドを
false
に設定します。
CSI ボリュームまたは非 CSI ボリュームを使用している場合は、次のコマンドを入力して Data Protection Application をデプロイします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- イメージのバックアップを使用しない場合は、このフィールドを
false
に設定します。 - 2
nodeAgent
属性に関する重要な注記を参照してください。- 3
credentialsFile
フィールドは、Pod のバケット認証情報のマウント先です。- 4
enableSharedConfig
フィールドを使用すると、snapshotLocations
がバケットに定義された認証情報を共有または再利用できます。- 5
- AWS 認証情報ファイルに設定されているプロファイル名を使用します。
- 6
region
は、お使いの AWS リージョンに指定します。これはクラスターリージョンと同じである必要があります。
これで、アプリケーションのバックアップ で説明されているとおり、OpenShift Container Platform アプリケーションをバックアップおよび復元する準備が整いました。
OADP 1.2 を使用する場合は、次の設定を置き換えます。
nodeAgent: enable: false uploaderType: restic
nodeAgent:
enable: false
uploaderType: restic
次の設定に置き換えます。
restic: enable: false
restic:
enable: false
バックアップと復元に 2 つの異なるクラスターを使用する場合、クラウドストレージ CR と OADP DataProtectionApplication
設定の両方で、2 つのクラスターの AWS S3 ストレージ名が同じである必要があります。
5.20.1.3. オプションのクリーンアップを使用して OADP AWS STS 上のワークロードをバックアップする リンクのコピーリンクがクリップボードにコピーされました!
5.20.1.3.1. OADP と AWS STS を使用したバックアップの実行 リンクのコピーリンクがクリップボードにコピーされました!
次の hello-world
アプリケーションの例では、永続ボリューム (PV) がアタッチされていません。OpenShift API for Data Protection (OADP) と Amazon Web Services (AWS) (AWS STS) を使用してバックアップを実行します。
どちらの Data Protection Application (DPA) 設定も機能します。
次のコマンドを実行して、バックアップするワークロードを作成します。
oc create namespace hello-world
$ oc create namespace hello-world
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-app -n hello-world --image=docker.io/openshift/hello-openshift
$ oc new-app -n hello-world --image=docker.io/openshift/hello-openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してルートを公開します。
oc expose service/hello-openshift -n hello-world
$ oc expose service/hello-openshift -n hello-world
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、アプリケーションが動作していることを確認します。
curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`
$ curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Hello OpenShift!
Hello OpenShift!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ワークロードをバックアップします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow バックアップが完了するまで待ってから、次のコマンドを実行します。
watch "oc -n openshift-adp get backup hello-world -o json | jq .status"
$ watch "oc -n openshift-adp get backup hello-world -o json | jq .status"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、デモワークロードを削除します。
oc delete ns hello-world
$ oc delete ns hello-world
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、バックアップからワークロードを復元します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、復元が完了するまで待ちます。
watch "oc -n openshift-adp get restore hello-world -o json | jq .status"
$ watch "oc -n openshift-adp get restore hello-world -o json | jq .status"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ワークロードが復元されていることを確認します。
oc -n hello-world get pods
$ oc -n hello-world get pods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE hello-openshift-9f885f7c6-kdjpj 1/1 Running 0 90s
NAME READY STATUS RESTARTS AGE hello-openshift-9f885f7c6-kdjpj 1/1 Running 0 90s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して JSONPath を確認します。
curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`
$ curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Hello OpenShift!
Hello OpenShift!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
トラブルシューティングのヒントは、OADP チームの トラブルシューティングドキュメント を参照してください。
5.20.1.3.2. OADP と AWS STS を使用してバックアップ後のクラスターをクリーンアップする リンクのコピーリンクがクリップボードにコピーされました!
この例のバックアップおよび S3 バケットと OpenShift API for Data Protection (OADP) Operator をアンインストールする必要がある場合は、次の手順を実行します。
手順
次のコマンドを実行して、ワークロードを削除します。
oc delete ns hello-world
$ oc delete ns hello-world
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Data Protection Application (DPA) を削除します。
oc -n openshift-adp delete dpa ${CLUSTER_NAME}-dpa
$ oc -n openshift-adp delete dpa ${CLUSTER_NAME}-dpa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、クラウドストレージを削除します。
oc -n openshift-adp delete cloudstorage ${CLUSTER_NAME}-oadp
$ oc -n openshift-adp delete cloudstorage ${CLUSTER_NAME}-oadp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要このコマンドがハングした場合は、次のコマンドを実行してファイナライザーを削除する必要がある場合があります。
oc -n openshift-adp patch cloudstorage ${CLUSTER_NAME}-oadp -p '{"metadata":{"finalizers":null}}' --type=merge
$ oc -n openshift-adp patch cloudstorage ${CLUSTER_NAME}-oadp -p '{"metadata":{"finalizers":null}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Operator が不要になった場合は、次のコマンドを実行して削除します。
oc -n openshift-adp delete subscription oadp-operator
$ oc -n openshift-adp delete subscription oadp-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Operator から namespace を削除します。
oc delete ns openshift-adp
$ oc delete ns openshift-adp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow バックアップおよび復元リソースが不要になった場合は、次のコマンドを実行してクラスターからリソースを削除します。
oc delete backups.velero.io hello-world
$ oc delete backups.velero.io hello-world
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AWS S3 のバックアップ、復元、およびリモートオブジェクトを削除するには、次のコマンドを実行します。
velero backup delete hello-world
$ velero backup delete hello-world
Copy to Clipboard Copied! Toggle word wrap Toggle overflow カスタムリソース定義 (CRD) が不要になった場合は、次のコマンドを実行してクラスターから削除します。
for CRD in `oc get crds | grep velero | awk '{print $1}'`; do oc delete crd $CRD; done
$ for CRD in `oc get crds | grep velero | awk '{print $1}'`; do oc delete crd $CRD; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、AWS S3 バケットを削除します。
aws s3 rm s3://${CLUSTER_NAME}-oadp --recursive
$ aws s3 rm s3://${CLUSTER_NAME}-oadp --recursive
Copy to Clipboard Copied! Toggle word wrap Toggle overflow aws s3api delete-bucket --bucket ${CLUSTER_NAME}-oadp
$ aws s3api delete-bucket --bucket ${CLUSTER_NAME}-oadp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ロールからポリシーを切り離します。
aws iam detach-role-policy --role-name "${ROLE_NAME}" --policy-arn "${POLICY_ARN}"
$ aws iam detach-role-policy --role-name "${ROLE_NAME}" --policy-arn "${POLICY_ARN}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行してロールを削除します。
aws iam delete-role --role-name "${ROLE_NAME}"
$ aws iam delete-role --role-name "${ROLE_NAME}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow