6.10. AWS Elastic File Service CSI Driver Operator
6.10.1. 概要 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、AWS Elastic File Service (EFS) の Container Storage Interface (CSI) ドライバーを使用して永続ボリューム (PV) をプロビジョニングできます。
CSI Operator およびドライバーを使用する場合は、永続ストレージ および CSI ボリュームの設定 を理解しておくことが推奨されます。
AWS EFS CSI Driver Operator をインストールすると、OpenShift Container Platform はデフォルトで AWS EFS CSI Operator と AWS EFS CSI ドライバーを openshift-cluster-csi-drivers
namespace にインストールします。これにより、AWS EFS CSI Driver Operator は、AWS EFS アセットにマウントする CSI がプロビジョニングする PV を作成することができます。
-
AWS EFS CSI Driver Operator をインストールしても、デフォルトでは、永続ボリューム要求 (PVC) の作成に使用されるストレージクラスは作成されません。ただし、AWS EFS
StorageClass
を手動で作成することは可能です。AWS EFS CSI Driver Operator は、ストレージボリュームをオンデマンドで作成できるようにし、クラスター管理者がストレージを事前にプロビジョニングする必要がなくすことで、動的ボリュームのプロビジョニングをサポートします。 - AWS EFS CSI ドライバー を使用すると、AWS EFS PV を作成し、マウントできます。
6.10.2. CSI について リンクのコピーリンクがクリップボードにコピーされました!
ストレージベンダーはこれまで Kubernetes の一部としてストレージドライバーを提供してきました。Container Storage Interface (CSI) の実装では、サードパーティーのプロバイダーは、コア Kubernetes コードを変更せずに標準のインターフェイスを使用してストレージプラグインを提供できます。
CSI Operator は、インツリーボリュームプラグインでは不可能なボリュームスナップショットなどのストレージオプションを OpenShift Container Platform ユーザーに付与します。
6.10.3. AWS EFS CSI Driver Operator の設定 リンクのコピーリンクがクリップボードにコピーされました!
- AWS EFS と AWS Secure Token Service (STS) を使用している場合は、STS のロール Amazon Resource Name (ARN) を取得します。これは、AWS EFS CSI Driver Operator をインストールするために必要です。
- AWS EFS CSI Driver Operator をインストールします。
- AWS EFS CSI ドライバーをインストールします。
6.10.3.1. Security Token Service の Amazon リソース名ロールの取得 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、AWS Security Token Service (STS) 上の OpenShift Container Platform で AWS EFS CSI Driver Operator を設定するための Amazon リソース名 (ARN) ロールを取得する方法を説明します。
AWS EFS CSI Driver Operator をインストールする前に、この手順を実行してください (AWS EFS CSI Driver Operator のインストール に記載された手順を参照)。
前提条件
- cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。
- AWS アカウントの認証情報。
手順
ARN ロールは複数の方法で取得できます。次の手順は、クラスターのインストールと同じ概念と CCO ユーティリティー (ccoctl
) バイナリーツールを使用する 1 つの方法を示しています。
One Zone ファイルシステムを使用している場合は、コントローラー用とドライバーノード用に 1 つずつ、合計 2 つの CredentialRequests
を作成する必要があります。詳細は、STS を使用した One Zone ファイルシステムのセットアップ セクションを参照してください。
STS を使用して AWS EFS CSI Driver Operator を設定するための ARN ロールを取得するには、以下を実行します。
-
STS でクラスターをインストールするために使用した OpenShift Container Platform リリースイメージから
ccoctl
を展開します。詳細は、「Cloud Credential Operator ユーティリティーの設定」を参照してください。 以下の例に示されているように EFS
CredentialsRequest
YAML ファイルを作成および保存してから、それをcredrequests
ディレクトリーに配置します。例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ccoctl
ツールを実行して AWS に新規の IAM ロールを生成し、その YAML ファイルをローカルファイルシステムに作成します (<path_to_ccoctl_output_dir>/manifests/openshift-cluster-csi-drivers-aws-efs-cloud-credentials-credentials.yaml
)。ccoctl aws create-iam-roles --name=<name> --region=<aws_region> --credentials-requests-dir=<path_to_directory_with_list_of_credentials_requests>/credrequests --identity-provider-arn=arn:aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.com
$ ccoctl aws create-iam-roles --name=<name> --region=<aws_region> --credentials-requests-dir=<path_to_directory_with_list_of_credentials_requests>/credrequests --identity-provider-arn=arn:aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
name=<name>
は、追跡用に作成されたクラウドリソースにタグを付けるために使用される名前です。 -
region=<aws_region>
は、クラウドリソースが作成される AWS リージョンです。 -
dir=<path_to_directory_with_list_of_credentials_requests>/credrequests
は、前のステップの EFS CredentialsRequest ファイルが含まれるディレクトリーです。 <aws_account_id>
は AWS アカウント ID です。例
ccoctl aws create-iam-roles --name my-aws-efs --credentials-requests-dir credrequests --identity-provider-arn arn:aws:iam::123456789012:oidc-provider/my-aws-efs-oidc.s3.us-east-2.amazonaws.com
$ ccoctl aws create-iam-roles --name my-aws-efs --credentials-requests-dir credrequests --identity-provider-arn arn:aws:iam::123456789012:oidc-provider/my-aws-efs-oidc.s3.us-east-2.amazonaws.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
2022/03/21 06:24:44 Role arn:aws:iam::123456789012:role/my-aws-efs -openshift-cluster-csi-drivers-aws-efs-cloud- created 2022/03/21 06:24:44 Saved credentials configuration to: /manifests/openshift-cluster-csi-drivers-aws-efs-cloud-credentials-credentials.yaml 2022/03/21 06:24:45 Updated Role policy for Role my-aws-efs-openshift-cluster-csi-drivers-aws-efs-cloud-
2022/03/21 06:24:44 Role arn:aws:iam::123456789012:role/my-aws-efs -openshift-cluster-csi-drivers-aws-efs-cloud- created 2022/03/21 06:24:44 Saved credentials configuration to: /manifests/openshift-cluster-csi-drivers-aws-efs-cloud-credentials-credentials.yaml 2022/03/21 06:24:45 Updated Role policy for Role my-aws-efs-openshift-cluster-csi-drivers-aws-efs-cloud-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
前の手順の 出力例 の最初の行から、ARN ロールをコピーします。ARN ロールは、"Role" と "created" の間にあります。この例では、ARN ロールは "arn:aws:iam::123456789012:role/my-aws-efs -openshift-cluster-csi-drivers-aws-efs-cloud" です。
AWS EFS CSI Driver Operator をインストールするときに、ARN ロールが必要になります。
次のステップ
6.10.3.2. AWS EFS CSI Driver Operator のインストール リンクのコピーリンクがクリップボードにコピーされました!
AWS EFS CSI Driver Operator (Red Hat Operator) は、デフォルトでは OpenShift Container Platform にインストールされません。以下の手順を使用して、クラスター内で AWS EFS CSI Driver Operator をインストールおよび設定します。
前提条件
- OpenShift Container Platform Web コンソールにアクセスできる。
手順
Web コンソールから AWS EFS CSI Driver Operator をインストールするには、以下を実行します。
- Web コンソールにログインします。
AWS EFS CSI Operator をインストールします。
-
Ecosystem
Software Catalog をクリックします。 - フィルターボックスに AWS EFS CSI と入力して、AWS EFS CSI Operator を探します。
- AWS EFS CSI Driver Operator ボタンをクリックします。
重要AWS EFS Operator ではなく AWS EFS CSI Driver Operator を必ず選択してください。AWS EFS Operator はコミュニティー Operator であり、Red Hat ではサポートしていません。
- AWS EFS CSI Driver Operator ページで Install をクリックします。
Install Operator のページで、以下のことを確認してください。
- AWS EFS と AWS Secure Token Service (STS) を使用している場合は、role ARN フィールドに、Security Token Service のロール Amazon Resource Name の取得 の手順の最後のステップでコピーした ARN ロールを入力します。
- All namespaces on the cluster (default) が選択されている。
- Installed Namespace が openshift-cluster-csi-drivers に設定されている。
Install をクリックします。
インストールが終了すると、AWS EFS CSI Operator が Web コンソールの Installed Operators に表示されます。
-
Ecosystem
次のステップ
6.10.3.3. AWS EFS CSI ドライバーのインストール リンクのコピーリンクがクリップボードにコピーされました!
AWS EFS CSI Driver Operator (Red Hat Operator) をインストールした後、AWS EFS CSI ドライバー をインストールします。
前提条件
- OpenShift Container Platform Web コンソールにアクセスできる。
手順
-
Administration
CustomResourceDefinitions ClusterCSIDriver をクリックします。 - Instances タブで Create ClusterCSIDriver をクリックします。
以下の YAML ファイルを使用します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Create をクリックします。
以下の条件が "True" に変わるのを待ちます。
- AWSEFSDriverNodeServiceControllerAvailable
- AWSEFSDriverControllerServiceControllerAvailable
6.10.4. AWS EFS ストレージクラスの作成 リンクのコピーリンクがクリップボードにコピーされました!
ストレージクラスを使用すると、ストレージのレベルや使用状況を区別し、記述することができます。ストレージクラスを定義することにより、ユーザーは動的にプロビジョニングされた永続ボリュームを取得できます。
AWS EFS CSI Driver Operator (Red Hat Operator) は、インストール後、デフォルトではストレージクラスを作成しません。ただし、AWS EFS ストレージクラスを手動で作成することは可能です。
6.10.4.1. コンソールを使用した AWS EFS ストレージクラスの作成 リンクのコピーリンクがクリップボードにコピーされました!
手順
-
OpenShift Container Platform Web コンソールで、Storage
StorageClasses をクリックします。 - StorageClasses ページで、Create StorageClass をクリックします。
StorageClass ページで、次の手順を実行します。
- ストレージクラスを参照するための名前を入力します。
- オプション: 説明を入力します。
- 回収ポリシーを選択します。
-
Provisioner ドロップダウンリストから
efs.csi.aws.com
を選択します。 - オプション: 選択したプロビジョナーの設定パラメーターを設定します。
- Create をクリックします。
6.10.4.2. CLI を使用した AWS EFS ストレージクラスの作成 リンクのコピーリンクがクリップボードにコピーされました!
手順
StorageClass
オブジェクトを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 動的プロビジョニングを有効にするには、
provisioningMode
にefs-ap
を指定する必要があります。 - 2
fileSystemId
は、手動で作成した EFS ボリュームの ID にする必要があります。- 3
directoryPerms
は、ボリュームのルートディレクトリーのデフォルトパーミッションです。この場合、ボリュームには所有者のみがアクセスできます。- 4 5
gidRangeStart
とgidRangeEnd
は、AWS アクセスポイントの GID を設定する際に使用する POSIX グループ ID (GID) の範囲を設定します。指定しないと、デフォルトの範囲は 50000 - 7000000 になります。プロビジョニングされた各ボリューム、つまり AWS のアクセスポイントには、この範囲からの固有 GID が割り当てられます。- 6
basePath
は、動的にプロビジョニングされたボリュームを作成する際に使用される EFS ボリューム上のディレクトリーです。この場合は、EFS ボリューム上に “/dynamic_provisioning/<random uuid>” として PV がプロビジョニングされます。PV を使用する Pod には、そのサブディレクトリーのみがマウントされます。
注記クラスター管理者は、それぞれが異なる EFS ボリュームを使用する複数の
StorageClass
オブジェクトを作成することができます。
6.10.5. AWS EFS CSI クロスアカウントのサポート リンクのコピーリンクがクリップボードにコピーされました!
クロスアカウントのサポートにより、1 つの AWS アカウントに OpenShift Container Platform クラスターを配置し、AWS Elastic File System (EFS) Container Storage Interface (CSI) ドライバーを使用して別の AWS アカウントにファイルシステムをマウントできます。
前提条件
- 管理者権限を持つ OpenShift Container Platform クラスターへのアクセス
- 2 つの有効な AWS アカウント
- EFS CSI Operator がインストールされている。EFS CSI Operator のインストール方法は、AWS EFS CSI Driver Operator のインストール セクションを参照してください。
- OpenShift Container Platform クラスターと EFS ファイルシステムの両方が同じ AWS リージョンに配置されている。
- 次の手順で使用する 2 つの仮想プライベートクラウド (VPC) が異なるネットワーク Classless Inter-Domain Routing (CIDR) 範囲を使用していることを確認する。
-
OpenShift Container Platform CLI (
oc
) へのアクセス。 - AWS CLI へのアクセス。
-
jq
コマンドライン JSON プロセッサーへのアクセス。
手順
次の手順では、以下のアカウントを設定する方法を説明します。
- OpenShift Container Platform AWS アカウント A: VPC 内にデプロイされた Red Hat OpenShift Container Platform クラスター (v4.16 以降) が含まれている。
- AWS アカウント B: VPC (サブネット、ルートテーブル、ネットワーク接続を含む) が含まれている。この VPC に EFS ファイルシステムを作成します。
アカウント間で AWS EFS を使用するには:
環境をセットアップします。
次のコマンドを実行して環境変数を設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 任意のクラスター名。
- 2
- 任意の AWS リージョン。
- 3
- AWS アカウント A の ID。
- 4
- AWS アカウント B の ID。
- 5
- アカウント A の VPC の CIDR 範囲。
- 6
- アカウント B の VPC の CIDR 範囲。
- 7
- アカウント A (クラスター) の VPC ID
- 8
- アカウント B の VPC ID (EFS クロスアカウント)
- 9
- 一時ファイルを保存するために使用する任意の書き込み可能なディレクトリー。
- 10
- ドライバーがデフォルト以外の namespace にインストールされている場合は、この値を変更します。
- 11
- AWS CLI のすべての出力を stdout に直接出力させます。
次のコマンドを実行して作業ディレクトリーを作成します。
mkdir -p $SCRATCH_DIR
mkdir -p $SCRATCH_DIR
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform CLI で次のコマンドを実行して、クラスターの接続を確認します。
oc whoami
$ oc whoami
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform クラスターのタイプを決定し、ノードセレクターを設定します。
EFS クロスアカウント機能を使用するには、EFS CSI コントローラー Pod が稼働しているノードに AWS IAM ポリシーを割り当てる必要があります。ただし、割り当て方法は OpenShift Container Platform タイプによって異なります。
クラスターが Hosted Control Plane (HyperShift) としてデプロイされている場合は、次のコマンドを実行して、ワーカーノードのラベルを格納するように
NODE_SELECTOR
環境変数を設定します。export NODE_SELECTOR=node-role.kubernetes.io/worker
export NODE_SELECTOR=node-role.kubernetes.io/worker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow それ以外の OpenShift Container Platform タイプの場合は、次のコマンドを実行して、マスターノードのラベルを格納するように
NODE_SELECTOR
環境変数を設定します。export NODE_SELECTOR=node-role.kubernetes.io/master
export NODE_SELECTOR=node-role.kubernetes.io/master
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、アカウント切り替え用の環境変数として AWS CLI プロファイルを設定します。
export AWS_ACCOUNT_A="<ACCOUNT_A_NAME>" export AWS_ACCOUNT_B="<ACCOUNT_B_NAME>"
export AWS_ACCOUNT_A="<ACCOUNT_A_NAME>" export AWS_ACCOUNT_B="<ACCOUNT_B_NAME>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、両方のアカウントで AWS CLI のデフォルト出力形式が JSON に設定されていることを確認します。
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_A} aws configure get output export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B} aws configure get output
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_A} aws configure get output export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B} aws configure get output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記のコマンドが次の結果を返す場合:
- 値なし: デフォルト出力形式がすでに JSON に設定されており、変更は必要ありません。
- 何らかの値: JSON 形式を使用するように AWS CLI を再設定します。出力形式の変更方法は、AWS ドキュメントの Setting the output format in the AWS CLI を参照してください。
次のコマンドを実行して、
AWS_DEFAULT_PROFILE
との競合を防ぐために、シェルでAWS_PROFILE
を設定解除します。unset AWS_PROFILE
unset AWS_PROFILE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
AWS アカウント B の IAM ロールとポリシーを設定します。
次のコマンドを実行して、アカウント B のプロファイルに切り替えます。
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B}
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、EFS CSI Driver Operator の IAM ロール名を定義します。
export ACCOUNT_B_ROLE_NAME=${CLUSTER_NAME}-cross-account-aws-efs-csi-operator
export ACCOUNT_B_ROLE_NAME=${CLUSTER_NAME}-cross-account-aws-efs-csi-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、IAM 信頼ポリシーファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、EFS CSI Driver Operator の IAM ロールを作成します。
ACCOUNT_B_ROLE_ARN=$(aws iam create-role \ --role-name "${ACCOUNT_B_ROLE_NAME}" \ --assume-role-policy-document file://$SCRATCH_DIR/AssumeRolePolicyInAccountB.json \ --query "Role.Arn" --output text) \ && echo $ACCOUNT_B_ROLE_ARN
ACCOUNT_B_ROLE_ARN=$(aws iam create-role \ --role-name "${ACCOUNT_B_ROLE_NAME}" \ --assume-role-policy-document file://$SCRATCH_DIR/AssumeRolePolicyInAccountB.json \ --query "Role.Arn" --output text) \ && echo $ACCOUNT_B_ROLE_ARN
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、IAM ポリシーファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、IAM ポリシーを作成します。
ACCOUNT_B_POLICY_ARN=$(aws iam create-policy --policy-name "${CLUSTER_NAME}-efs-csi-policy" \ --policy-document file://$SCRATCH_DIR/EfsPolicyInAccountB.json \ --query 'Policy.Arn' --output text) \ && echo ${ACCOUNT_B_POLICY_ARN}
ACCOUNT_B_POLICY_ARN=$(aws iam create-policy --policy-name "${CLUSTER_NAME}-efs-csi-policy" \ --policy-document file://$SCRATCH_DIR/EfsPolicyInAccountB.json \ --query 'Policy.Arn' --output text) \ && echo ${ACCOUNT_B_POLICY_ARN}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ポリシーをロールにアタッチします。
aws iam attach-role-policy \ --role-name "${ACCOUNT_B_ROLE_NAME}" \ --policy-arn "${ACCOUNT_B_POLICY_ARN}"
aws iam attach-role-policy \ --role-name "${ACCOUNT_B_ROLE_NAME}" \ --policy-arn "${ACCOUNT_B_POLICY_ARN}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
AWS アカウント A の IAM ロールとポリシーを設定します。
次のコマンドを実行して、アカウント A のプロファイルに切り替えます。
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_A}
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_A}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、IAM ポリシードキュメントを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AWS アカウント A で、次のコマンドを実行して、AWS 管理ポリシー "AmazonElasticFileSystemClientFullAccess" を OpenShift Container Platform クラスターのマスターロールにアタッチします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ロールの引き受けを許可するために、IAM エンティティーにポリシーをアタッチします。
この手順はクラスターの設定によって異なります。次のどちらの場合も、EFS CSI Driver Operator はエンティティーを使用して AWS に対して認証します。このエンティティーには、アカウント B でロールを引き受けるための権限を付与する必要があります。
クラスターで:
- STS が有効でない場合: EFS CSI Driver Operator は、AWS 認証に IAM ユーザーエンティティーを使用します。「ロールの引き受けを許可するために IAM ユーザーにポリシーをアタッチする」ステップに進んでください。
- STS が有効な場合: EFS CSI Driver Operator は、AWS 認証に IAM ロールエンティティーを使用します。「ロールの引き受けを許可するために IAM ロールにポリシーをアタッチする」ステップに進んでください。
ロールの引き受けを許可するために IAM ユーザーにポリシーをアタッチします。
次のコマンドを実行して、EFS CSI Driver Operator によって使用されている IAM ユーザーを特定します。
EFS_CSI_DRIVER_OPERATOR_USER=$(oc -n openshift-cloud-credential-operator get credentialsrequest/openshift-aws-efs-csi-driver -o json | jq -r '.status.providerStatus.user')
EFS_CSI_DRIVER_OPERATOR_USER=$(oc -n openshift-cloud-credential-operator get credentialsrequest/openshift-aws-efs-csi-driver -o json | jq -r '.status.providerStatus.user')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、その IAM ユーザーにポリシーをアタッチします。
aws iam put-user-policy \ --user-name "${EFS_CSI_DRIVER_OPERATOR_USER}" \ --policy-name efs-cross-account-inline-policy \ --policy-document file://$SCRATCH_DIR/AssumeRoleInlinePolicyPolicyInAccountA.json
aws iam put-user-policy \ --user-name "${EFS_CSI_DRIVER_OPERATOR_USER}" \ --policy-name efs-cross-account-inline-policy \ --policy-document file://$SCRATCH_DIR/AssumeRoleInlinePolicyPolicyInAccountA.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ロールの引き受けを許可するために IAM ロールにポリシーをアタッチします。
次のコマンドを実行して、EFS CSI Driver Operator によって現在使用されている IAM ロール名を特定します。
EFS_CSI_DRIVER_OPERATOR_ROLE=$(oc -n ${CSI_DRIVER_NAMESPACE} get secret/aws-efs-cloud-credentials -o jsonpath='{.data.credentials}' | base64 -d | grep role_arn | cut -d'/' -f2) && echo ${EFS_CSI_DRIVER_OPERATOR_ROLE}
EFS_CSI_DRIVER_OPERATOR_ROLE=$(oc -n ${CSI_DRIVER_NAMESPACE} get secret/aws-efs-cloud-credentials -o jsonpath='{.data.credentials}' | base64 -d | grep role_arn | cut -d'/' -f2) && echo ${EFS_CSI_DRIVER_OPERATOR_ROLE}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、EFS CSI Driver Operator によって使用されている IAM ロールにポリシーをアタッチします。
aws iam put-role-policy \ --role-name "${EFS_CSI_DRIVER_OPERATOR_ROLE}" \ --policy-name efs-cross-account-inline-policy \ --policy-document file://$SCRATCH_DIR/AssumeRoleInlinePolicyPolicyInAccountA.json
aws iam put-role-policy \ --role-name "${EFS_CSI_DRIVER_OPERATOR_ROLE}" \ --policy-name efs-cross-account-inline-policy \ --policy-document file://$SCRATCH_DIR/AssumeRoleInlinePolicyPolicyInAccountA.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
VPC ピアリングを設定します。
次のコマンドを実行して、アカウント A からアカウント B へのピアリングリクエストを開始します。
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_A} PEER_REQUEST_ID=$(aws ec2 create-vpc-peering-connection --vpc-id "${AWS_ACCOUNT_A_VPC_ID}" --peer-vpc-id "${AWS_ACCOUNT_B_VPC_ID}" --peer-owner-id "${AWS_ACCOUNT_B_ID}" --query VpcPeeringConnection.VpcPeeringConnectionId --output text)
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_A} PEER_REQUEST_ID=$(aws ec2 create-vpc-peering-connection --vpc-id "${AWS_ACCOUNT_A_VPC_ID}" --peer-vpc-id "${AWS_ACCOUNT_B_VPC_ID}" --peer-owner-id "${AWS_ACCOUNT_B_ID}" --query VpcPeeringConnection.VpcPeeringConnectionId --output text)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、アカウント B でピアリングリクエストを承認します。
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B} aws ec2 accept-vpc-peering-connection --vpc-peering-connection-id "${PEER_REQUEST_ID}"
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B} aws ec2 accept-vpc-peering-connection --vpc-peering-connection-id "${PEER_REQUEST_ID}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、アカウント A のルートテーブル ID を取得し、アカウント B の VPC にルートを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、アカウント B のルートテーブル ID を取得し、アカウント A の VPC にルートを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
アカウント A から EFS への NFS トラフィックを許可するように、アカウント B のセキュリティーグループを設定します。
次のコマンドを実行して、アカウント B のプロファイルに切り替えます。
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B}
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、EFS アクセス用の VPC セキュリティーグループを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
アカウント B にリージョン全体の EFS ファイルシステムを作成します。
次のコマンドを実行して、アカウント B のプロファイルに切り替えます。
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B}
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、リージョン全体の EFS ファイルシステムを作成します。
CROSS_ACCOUNT_FS_ID=$(aws efs create-file-system --creation-token efs-token-1 \ --region ${AWS_REGION} \ --encrypted | jq -r '.FileSystemId') \ && echo $CROSS_ACCOUNT_FS_ID
CROSS_ACCOUNT_FS_ID=$(aws efs create-file-system --creation-token efs-token-1 \ --region ${AWS_REGION} \ --encrypted | jq -r '.FileSystemId') \ && echo $CROSS_ACCOUNT_FS_ID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、EFS のリージョン全体のマウントターゲットを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、VPC の各サブネットにマウントポイントが作成されます。
クロスアカウントアクセス用に EFS Operator を設定します。
次のコマンドを実行して、後のステップで作成するシークレットとストレージクラスのカスタム名を定義します。
export SECRET_NAME=my-efs-cross-account export STORAGE_CLASS_NAME=efs-sc-cross
export SECRET_NAME=my-efs-cross-account export STORAGE_CLASS_NAME=efs-sc-cross
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform CLI で次のコマンドを実行して、アカウント B のロール ARN を参照するシークレットを作成します。
oc create secret generic ${SECRET_NAME} -n ${CSI_DRIVER_NAMESPACE} --from-literal=awsRoleArn="${ACCOUNT_B_ROLE_ARN}"
oc create secret generic ${SECRET_NAME} -n ${CSI_DRIVER_NAMESPACE} --from-literal=awsRoleArn="${ACCOUNT_B_ROLE_ARN}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform CLI で次のコマンドを実行して、新しく作成したシークレットへのアクセス権を CSI ドライバーコントローラーに付与します。
oc -n ${CSI_DRIVER_NAMESPACE} create role access-secrets --verb=get,list,watch --resource=secrets oc -n ${CSI_DRIVER_NAMESPACE} create rolebinding --role=access-secrets default-to-secrets --serviceaccount=${CSI_DRIVER_NAMESPACE}:aws-efs-csi-driver-controller-sa
oc -n ${CSI_DRIVER_NAMESPACE} create role access-secrets --verb=get,list,watch --resource=secrets oc -n ${CSI_DRIVER_NAMESPACE} create rolebinding --role=access-secrets default-to-secrets --serviceaccount=${CSI_DRIVER_NAMESPACE}:aws-efs-csi-driver-controller-sa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform CLI で次のコマンドを実行して、アカウント B の EFS ID と以前に作成したシークレットを参照する新しいストレージクラスを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.10.6. One Zone ファイルシステム リンクのコピーリンクがクリップボードにコピーされました!
6.10.6.1. One Zone ファイルシステムの概要 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、単一のアベイラビリティーゾーン (AZ) 内にデータを冗長的に格納する EFS ストレージオプションである AWS Elastic File System (EFS) One Zone ファイルシステムをサポートしています。これは、リージョン内の複数の AZ をまたいでデータを冗長的に保存するデフォルトの EFS ストレージオプションとは対照的です。
OpenShift Container Platform 4.19 からアップグレードされたクラスターは、リージョン EFS ボリュームと互換性があります。
One Zone ボリュームの動的プロビジョニングは、シングルゾーンクラスターでのみサポートされます。クラスター内のすべてのノードは、動的プロビジョニングに使用される EFS ボリュームと同じ AZ に存在する必要があります。
永続ボリューム (PV) に、ボリュームが存在するゾーンを示す正しい spec.nodeAffinity
があることを前提として、リージョンクラスターで手動でプロビジョニングされた One Zone ボリュームがサポートされます。
Cloud Credential Operator (CCO) Mint モードまたは Passthrough の場合、追加の設定は必要ありません。ただし、Security Token Service (STS) の場合は、STS を使用した One Zone ファイルシステムのセットアップ セクションの手順を使用します。
6.10.6.2. STS を使用した One Zone ファイルシステムのセットアップ リンクのコピーリンクがクリップボードにコピーされました!
次の手順では、Security Token Service (STS) を使用して AWS One Zone ファイルシステムを設定する方法について説明します。
前提条件
- cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。
- AWS アカウントの認証情報。
手順
STS を使用して One Zone ファイルシステムを設定するには、以下を実行します。
Security Token Service のロール Amazon Resource Name の取得 セクションの手順に従って、
credrequests
ディレクトリーに 2 つ のCredentialsRequests
を作成します。-
コントローラー の
CredentialsRequest
の場合は、変更せずに手順に従います。 ドライバーノード の
CredentialsRequest
の場合は、次のサンプルファイルを使用します。ドライバーノードの CredentialsRequest YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
metadata.annotations.credentials.openshift.io/role-arns-vars
をNODE_ROLEARN
に設定します。
ccoctl
の出力例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
コントローラー の
- この手順の前半で作成したコントローラー ARN を使用して、AWS EFS CSI ドライバーをインストールします。
次のようなコマンドを実行して、Operator のサブスクリプションを編集し、ドライバーノードの ARN と
NODE_ROLEARN
を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.10.7. Amazon Elastic File Storage の動的プロビジョニング リンクのコピーリンクがクリップボードにコピーされました!
AWS EFS CSI ドライバー は、他の CSI ドライバーとは異なる形式の動的プロビジョニングをサポートします。既存の EFS ボリュームのサブディレクトリーとして新しい PV をプロビジョニングします。PV はお互いに独立しています。しかし、これらはすべて同じ EFS ボリュームを共有しています。ボリュームが削除されると、そのボリュームからプロビジョニングされたすべての PV も削除されます。EFS CSI ドライバーは、そのようなサブディレクトリーごとに AWS アクセスポイントを作成します。AWS AccessPoint の制限により、単一の StorageClass
/EFS ボリュームから動的にプロビジョニングできるのは 1000 PV のみです。
なお、PVC.spec.resources
は EFS では強制されません。
以下の例では、5 GiB の容量を要求しています。しかし、作成された PV は無限であり、どんな量のデータ (ペタバイトのような) も保存することができます。ボリュームに大量のデータを保存してしまうと、壊れたアプリケーション、あるいは不正なアプリケーションにより、多額の費用が発生します。
AWS の EFS ボリュームサイズのモニタリングを使用することを強く推奨します。
前提条件
- Amazon Elastic File Storage (Amazon EFS) ボリュームが作成されている。
- AWS EFS ストレージクラスを作成している。
手順
動的プロビジョニングを有効にするには、以下の手順を実施します。
以前に作成した
StorageClass
を参照して、通常どおり PVC (または StatefulSet や Template) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
動的プロビジョニングのセットアップに問題がある場合は、AWS EFS のトラブルシューティング を参照してください。
6.10.8. Amazon Elastic File Storage を使用した静的 PV の作成 リンクのコピーリンクがクリップボードにコピーされました!
動的プロビジョニングを行わずに、Amazon Elastic File Storage (Amazon EFS) ボリュームを単一の PV として使用できます。ボリューム全体が Pod にマウントされます。
前提条件
- Amazon EFS ボリュームが作成されている。
手順
以下の YAML ファイルで PV を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
spec.capacity
には意味がなく、CSI ドライバーでは無視されます。PVC へのバインディング時にのみ使用されます。アプリケーションは、ボリュームに任意の量のデータを保存することができます。- 2
volumeHandle
は、AWS で作成した EFS ボリュームと同じ ID である必要があります。独自のアクセスポイントを提供する場合、volumeHandle
は<EFS volume ID>::<access point ID>
とします。たとえば、fs-6e633ada::fsap-081a1d293f0004630
です。- 3
- 必要に応じて、転送中の暗号化を無効にすることができます。デフォルトでは、暗号化が有効になっています。
静的 PV の設定に問題がある場合は、AWS EFS のトラブルシューティング を参照してください。
6.10.9. Amazon Elastic File Storage のセキュリティー リンクのコピーリンクがクリップボードにコピーされました!
次の情報は、Amazon Elastic File Storage (Amazon EFS) のセキュリティーに重要です。
前述の動的プロビジョニングなどでアクセスポイントを使用する場合、Amazon はファイルの GID をアクセスポイントの GID に自動的に置き換えます。また、EFS では、ファイルシステムの権限を評価する際に、アクセスポイントのユーザー ID、グループ ID、セカンダリーグループ ID を考慮します。EFS は、NFS クライアントの ID を無視します。アクセスポイントの詳細は、https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html を参照してください。
その結果、EFS ボリュームは FSGroup を静かに無視します。OpenShift Container Platform は、ボリューム上のファイルの GID を FSGroup で置き換えることができません。マウントされた EFS アクセスポイントにアクセスできる Pod は、そこにあるすべてのファイルにアクセスできます。
これとは関係ありませんが、転送中の暗号化はデフォルトで有効になっています。詳細は、https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html を参照してください。
6.10.10. AWS EFS ストレージ CSI 使用状況メトリクス リンクのコピーリンクがクリップボードにコピーされました!
6.10.10.1. 使用状況メトリクスの概要 リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) Elastic File Service (EFS) Container Storage Interface (CSI) 使用状況メトリクスを使用すると、動的または静的にプロビジョニングされた EFS ボリュームによって使用されているスペースの量を監視できます。
メトリクスを有効にするとパフォーマンスが低下する可能性があるため、この機能はデフォルトで無効になっています。
AWS EFS 使用状況メトリクス機能は、ボリューム内のファイルを再帰的にウォークスルーし、AWS EFS CSI ドライバーのボリュームメトリクスを収集します。この作業によりパフォーマンスが低下する可能性があるため、管理者はこの機能を明示的に有効にする必要があります。
6.10.10.2. Web コンソールを使用した使用状況メトリクスの有効化 リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールを使用して Amazon Web Services (AWS) Elastic File Service (EFS) Container Storage Interface (CSI) の使用状況メトリクスを有効にするには、次の手順を実行します。
- Administration > CustomResourceDefinitions をクリックします。
-
CustomResourceDefinitions ページの Name ドロップダウンボックスの横に、
clustercsidriver
と入力します。 - CRD ClusterCSIDriver をクリックします。
- YAML タブをクリックします。
spec.aws.efsVolumeMetrics.state
の下で、値をRecursiveWalk
に設定します。RecursiveWalk
は、AWS EFS CSI ドライバーのボリュームメトリクス収集が、ボリューム内のファイルを再帰的にウォークスルーすることによって実行されることを示します。ClusterCSIDriver efs.csi.aws.com YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 再帰ウォークの動作を定義するために、次のフィールドを設定することもできます。
-
refreshPeriodMinutes
: ボリュームメトリクスの更新頻度を分単位で指定します。このフィールドを空白のままにすると、適切なデフォルトが選択されますが、これは時間の経過とともに変更される可能性があります。現在のデフォルトは 240 分です。有効な範囲は 1 - 43,200 分です。 -
fsRateLimit
: ファイルシステムごとに、goroutine でボリュームメトリクスを処理するためのレート制限を定義します。このフィールドを空白のままにすると、適切なデフォルトが選択されますが、これは時間の経過とともに変更される可能性があります。現在のデフォルトは 5 つの goroutine です。有効な範囲は 1 - 100 の goroutine です。
-
- Save をクリックします。
AWS EFS CSI 使用状況メトリクスを 無効化 するには、前述の手順を使用しますが、spec.aws.efsVolumeMetrics.state
の値を RecursiveWalk
から Disabled
に変更します。
6.10.10.3. CLI を使用した使用状況メトリクスの有効化 リンクのコピーリンクがクリップボードにコピーされました!
CLI を使用して Amazon Web Services (AWS) Elastic File Service (EFS) Container Storage Interface (CSI) 使用状況メトリクスを有効にするには、次の手順を実行します。
次のコマンドを実行して ClusterCSIDriver を編集します。
oc edit clustercsidriver efs.csi.aws.com
$ oc edit clustercsidriver efs.csi.aws.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow spec.aws.efsVolumeMetrics.state
の下で、値をRecursiveWalk
に設定します。RecursiveWalk
は、AWS EFS CSI ドライバーのボリュームメトリクス収集が、ボリューム内のファイルを再帰的にウォークスルーすることによって実行されることを示します。ClusterCSIDriver efs.csi.aws.com YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 再帰ウォークの動作を定義するために、次のフィールドを設定することもできます。
-
refreshPeriodMinutes
: ボリュームメトリクスの更新頻度を分単位で指定します。このフィールドを空白のままにすると、適切なデフォルトが選択されますが、これは時間の経過とともに変更される可能性があります。現在のデフォルトは 240 分です。有効な範囲は 1 - 43,200 分です。 -
fsRateLimit
: ファイルシステムごとに、goroutine でボリュームメトリクスを処理するためのレート制限を定義します。このフィールドを空白のままにすると、適切なデフォルトが選択されますが、これは時間の経過とともに変更される可能性があります。現在のデフォルトは 5 つの goroutine です。有効な範囲は 1 - 100 の goroutine です。
-
-
efs.csi.aws.com
オブジェクトへの変更を保存します。
AWS EFS CSI 使用状況メトリクスを 無効化 するには、前述の手順を使用しますが、spec.aws.efsVolumeMetrics.state
の値を RecursiveWalk
から Disabled
に変更します。
6.10.11. Amazon Elastic File Storage のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
次の情報は、Amazon Elastic File Storage (Amazon EFS) に関する問題のトラブルシューティング方法に関するガイダンスです。
-
AWS EFS Operator と CSI ドライバーは、namespace
openshift-cluster-csi-drivers
で実行されます。 AWS EFS Operator と CSI ドライバーのログ収集を開始するには、以下のコマンドを実行します。
oc adm must-gather
$ oc adm must-gather [must-gather ] OUT Using must-gather plugin-in image: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:125f183d13601537ff15b3239df95d47f0a604da2847b561151fedd699f5e3a5 [must-gather ] OUT namespace/openshift-must-gather-xm4wq created [must-gather ] OUT clusterrolebinding.rbac.authorization.k8s.io/must-gather-2bd8x created [must-gather ] OUT pod for plug-in image quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:125f183d13601537ff15b3239df95d47f0a604da2847b561151fedd699f5e3a5 created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AWS EFS Operator のエラーを表示するには、
ClusterCSIDriver
のステータスを表示します。oc get clustercsidriver efs.csi.aws.com -o yaml
$ oc get clustercsidriver efs.csi.aws.com -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod にボリュームをマウントできない場合 (以下のコマンドの出力に示す):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ボリュームがマウントされていないことを示す警告メッセージ。
このエラーは、OpenShift Container Platform ノードと Amazon EFS 間のパケットを AWS がドロップすることで頻繁に発生します。
以下が正しいことを確認します。
- AWS のファイアウォールとセキュリティーグループ
- ネットワーク: ポート番号と IP アドレス
6.10.12. AWS EFS CSI Driver Operator のアンインストール リンクのコピーリンクがクリップボードにコピーされました!
AWS EFS CSI Driver Operator (Red Hat Operator) をアンインストールすると、すべての EFS PV にアクセスできなくなります。
前提条件
- OpenShift Container Platform Web コンソールにアクセスできる。
手順
Web コンソールから AWS EFS CSI Driver Operator をアンインストールするには、以下を実行します。
- Web コンソールにログインします。
- AWS EFS PV を使用するすべてのアプリケーションを停止します。
すべての AWS EFS PV を削除します。
-
Storage
PersistentVolumeClaims をクリックします。 - AWS EFS CSI Driver Operator が使用している各 PVC を選択し、PVC の右端にあるドロップダウンメニューをクリックして、Delete PersistentVolumeClaims をクリックします。
-
Storage
AWS EFS CSI ドライバー をアンインストールします。
注記Operator をアンインストールする前に、まず CSI ドライバーを削除する必要があります。
-
Administration
CustomResourceDefinitions ClusterCSIDriver をクリックします。 - Instances タブの efs.csi.aws.com の左端にあるドロップダウンメニューをクリックし、Delete ClusterCSIDriver をクリックします。
- プロンプトが表示されたら、Delete をクリックします。
-
Administration
AWS EFS CSI Operator をアンインストールします。
-
Ecosystem
Installed Operators をクリックします。 - Installed Operators ページで、スクロールするか、Search by name ボックスに AWS EFS CSI と入力して Operator を見つけてクリックします。
-
Installed Operators > Operator details ページの右上にある Actions
Uninstall Operator をクリックします。 Uninstall Operator ウィンドウでプロンプトが表示されたら、Uninstall ボタンをクリックして namespace から Operator を削除します。Operator によってクラスターにデプロイされたアプリケーションは手動でクリーンアップする必要があります。
アンインストールすると、AWS EFS CSI Driver Operator が Web コンソールの Installed Operators セクションにリスト表示されなくなります。
-
Ecosystem
クラスターを破棄 (openshift-install destroy cluster
) する前に、AWS の EFS ボリュームを削除する必要があります。クラスターの VPC を使用する EFS ボリュームがある場合、OpenShift Container Platform クラスターを破棄することはできません。Amazon はこのような VPC の削除を許可していません。