5.4. AWS Elastic File Service CSI Driver Operator
この手順は、AWS EFS CSI Driver Operator (Red Hat Operator) に固有のものであり、Red Hat OpenShift Service on AWS 4.10 にのみ適用されます。
5.4.1. 概要 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Service on AWS は、AWS Elastic File Service (EFS) の Container Storage Interface (CSI) ドライバーを使用して永続ボリューム (PV) をプロビジョニングできます。
CSI Operator およびドライバーを使用する場合は、永続ストレージ および CSI ボリュームの設定 を理解しておくことが推奨されます。
AWS EFS CSI Driver Operator をインストールした後、Red Hat OpenShift Service on AWS は、デフォルトで 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 を作成し、マウントできます。
5.4.2. CSI について リンクのコピーリンクがクリップボードにコピーされました!
ストレージベンダーはこれまで Kubernetes の一部としてストレージドライバーを提供してきました。Container Storage Interface (CSI) の実装では、サードパーティーのプロバイダーは、コア Kubernetes コードを変更せずに標準のインターフェイスを使用してストレージプラグインを提供できます。
CSI Operator は、in-tree (インツリー) ボリュームプラグインでは不可能なボリュームスナップショットなどのストレージオプションを Red Hat OpenShift Service on AWS ユーザーに付与します。
5.4.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 ドライバーをインストールします。
5.4.3.1. Security Token Service のロール Amazon Resource Name の取得 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、AWS Security Token Service (STS) 環境の Red Hat OpenShift Service on AWS で AWS EFS CSI Driver Operator を設定するために、ロールの Amazon Resource Name (ARN) を取得する方法を説明します。
AWS EFS CSI Driver Operator をインストールする前に、この手順を実行してください (AWS EFS CSI Driver Operator のインストール に記載された手順を参照)。
前提条件
- cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。
- AWS アカウントの認証情報。
手順
以下の内容を含む IAM ポリシー JSON ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の内容で IAM 信頼 JSON ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IAM ロールを作成します。
ROLE_ARN=$(aws iam create-role \ --role-name "<your_cluster_name>-aws-efs-csi-operator" \ --assume-role-policy-document file://<your_trust_file_name>.json \ --query "Role.Arn" --output text); echo $ROLE_ARN
ROLE_ARN=$(aws iam create-role \ --role-name "<your_cluster_name>-aws-efs-csi-operator" \ --assume-role-policy-document file://<your_trust_file_name>.json \ --query "Role.Arn" --output text); echo $ROLE_ARNCopy to Clipboard Copied! Toggle word wrap Toggle overflow ロール ARN をコピーします。AWS EFS CSI Driver Operator をインストールするときに必要になります。
IAM ポリシーを作成します。
POLICY_ARN=$(aws iam create-policy \ --policy-name "<your_cluster_name>-aws-efs-csi" \ --policy-document file://<your_policy_file_name>.json \ --query 'Policy.Arn' --output text); echo $POLICY_ARN
POLICY_ARN=$(aws iam create-policy \ --policy-name "<your_cluster_name>-aws-efs-csi" \ --policy-document file://<your_policy_file_name>.json \ --query 'Policy.Arn' --output text); echo $POLICY_ARNCopy to Clipboard Copied! Toggle word wrap Toggle overflow IAM ポリシーを IAM ロールに割り当てます。
aws iam attach-role-policy \ --role-name "<your_cluster_name>-aws-efs-csi-operator" \ --policy-arn $POLICY_ARN
$ aws iam attach-role-policy \ --role-name "<your_cluster_name>-aws-efs-csi-operator" \ --policy-arn $POLICY_ARNCopy to Clipboard Copied! Toggle word wrap Toggle overflow
次のステップ
5.4.3.2. AWS EFS CSI Driver Operator のインストール リンクのコピーリンクがクリップボードにコピーされました!
AWS EFS CSI Driver Operator (Red Hat Operator) は、デフォルトでは Red Hat OpenShift Service on AWS にインストールされていません。以下の手順を使用して、クラスター内で AWS EFS CSI Driver Operator をインストールおよび設定します。
前提条件
- Red Hat OpenShift Service on AWS 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 のページで、以下のことを確認してください。
- All namespaces on the cluster (default) が選択されている。
- Installed Namespace が openshift-cluster-csi-drivers に設定されている。
Install をクリックします。
インストールが終了すると、AWS EFS CSI Operator が Web コンソールの Installed Operators に表示されます。
-
Ecosystem
次のステップ
5.4.3.3. AWS EFS CSI ドライバーのインストール リンクのコピーリンクがクリップボードにコピーされました!
AWS EFS CSI Driver Operator (Red Hat Operator) をインストールした後、AWS EFS CSI ドライバー をインストールします。
前提条件
- Red Hat OpenShift Service on AWS Web コンソールにアクセスできる。
手順
-
Administration
CustomResourceDefinitions ClusterCSIDriver をクリックします。 - Instances タブで Create ClusterCSIDriver をクリックします。
以下の YAML ファイルを使用します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Create をクリックします。
以下の条件が "True" に変わるのを待ちます。
- AWSEFSDriverNodeServiceControllerAvailable
- AWSEFSDriverControllerServiceControllerAvailable
5.4.4. AWS EFS ストレージクラスの作成 リンクのコピーリンクがクリップボードにコピーされました!
ストレージクラスを使用すると、ストレージのレベルや使用状況を区別し、記述することができます。ストレージクラスを定義することにより、ユーザーは動的にプロビジョニングされた永続ボリュームを取得できます。
AWS EFS CSI Driver Operator (Red Hat Operator) は、インストール後、デフォルトではストレージクラスを作成しません。ただし、AWS EFS ストレージクラスを手動で作成することは可能です。
5.4.4.1. コンソールを使用した AWS EFS ストレージクラスの作成 リンクのコピーリンクがクリップボードにコピーされました!
手順
-
Red Hat OpenShift Service on AWS Web コンソールで、Storage
StorageClasses をクリックします。 - StorageClasses ページで、Create StorageClass をクリックします。
StorageClass ページで、次の手順を実行します。
- ストレージクラスを参照するための名前を入力します。
- オプション: 説明を入力します。
- 回収ポリシーを選択します。
-
Provisioner ドロップダウンリストから
efs.csi.aws.comを選択します。 - オプション: 選択したプロビジョナーの設定パラメーターを設定します。
- Create をクリックします。
5.4.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オブジェクトを作成することができます。
5.4.5. AWS EFS CSI クロスアカウントのサポート リンクのコピーリンクがクリップボードにコピーされました!
クロスアカウントのサポートにより、1 つの AWS アカウントに Red Hat OpenShift Service on AWS クラスターを配置し、AWS Elastic File System (EFS) Container Storage Interface (CSI) ドライバーを使用して別の AWS アカウントにファイルシステムをマウントできます。
前提条件
- 管理者権限による Red Hat OpenShift Service on AWS クラスターへのアクセス
- 2 つの有効な AWS アカウント
- EFS CSI Operator がインストールされている。EFS CSI Operator のインストール方法は、AWS EFS CSI Driver Operator のインストール セクションを参照してください。
- Red Hat OpenShift Service on AWS クラスターと EFS ファイルシステムがどちらも、同じ AWS リージョンに配置されている。
- 次の手順で使用する 2 つの仮想プライベートクラウド (VPC) が異なるネットワーク Classless Inter-Domain Routing (CIDR) 範囲を使用していることを確認する。
-
Red Hat OpenShift Service on AWS 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_DIRCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat OpenShift Service on AWS CLI で次のコマンドを実行して、クラスターの接続を確認します。
oc whoami
$ oc whoamiCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat OpenShift Service on AWS クラスターを決定し、ノードセレクターを設定します。
EFS クロスアカウント機能を使用するには、EFS CSI コントローラー Pod が稼働しているノードに AWS IAM ポリシーを割り当てる必要があります。ただし、これは Red Hat OpenShift Service on AWS タイプで一貫しているわけではありません。
クラスターが Hosted Control Plane (HyperShift) としてデプロイされている場合は、次のコマンドを実行して、ワーカーノードのラベルを格納するように
NODE_SELECTOR環境変数を設定します。export NODE_SELECTOR=node-role.kubernetes.io/worker
export NODE_SELECTOR=node-role.kubernetes.io/workerCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat OpenShift Service on AWS タイプでは、次のコマンドを実行して、マスターノードのラベルを保持するように
NODE_SELECTOR環境変数を設定します。export NODE_SELECTOR=node-role.kubernetes.io/master
export NODE_SELECTOR=node-role.kubernetes.io/masterCopy 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 outputexport AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_A} aws configure get output export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B} aws configure get outputCopy 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_PROFILECopy 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-operatorexport ACCOUNT_B_ROLE_NAME=${CLUSTER_NAME}-cross-account-aws-efs-csi-operatorCopy 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_ARNACCOUNT_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_ARNCopy 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" を Red Hat OpenShift Service on AWS クラスターのマスターロールにアタッチします。
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.jsonaws iam put-user-policy \ --user-name "${EFS_CSI_DRIVER_OPERATOR_USER}" \ --policy-name efs-cross-account-inline-policy \ --policy-document file://$SCRATCH_DIR/AssumeRoleInlinePolicyPolicyInAccountA.jsonCopy 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.jsonaws iam put-role-policy \ --role-name "${EFS_CSI_DRIVER_OPERATOR_ROLE}" \ --policy-name efs-cross-account-inline-policy \ --policy-document file://$SCRATCH_DIR/AssumeRoleInlinePolicyPolicyInAccountA.jsonCopy 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_IDCROSS_ACCOUNT_FS_ID=$(aws efs create-file-system --creation-token efs-token-1 \ --region ${AWS_REGION} \ --encrypted | jq -r '.FileSystemId') \ && echo $CROSS_ACCOUNT_FS_IDCopy 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-crossCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat OpenShift Service on AWS で次のコマンドを実行して、アカウント 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 Red Hat OpenShift Service on AWS で次のコマンドを実行して、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-saoc -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-saCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat OpenShift Service on AWS で次のコマンドを実行して、アカウント B の EFS ID と以前に作成したシークレットを参照する新しいストレージクラスを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4.6. One Zone ファイルシステム リンクのコピーリンクがクリップボードにコピーされました!
5.4.6.1. One Zone ファイルシステムの概要 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Service on AWS は、単一のアベイラビリティーゾーン (AZ) 内にデータを冗長的に格納する EFS ストレージオプションである AWS Elastic File System (EFS) One Zone ファイルシステムをサポートしています。これは、リージョン内の複数の AZ をまたいでデータを冗長的に保存するデフォルトの EFS ストレージオプションとは対照的です。
Red Hat OpenShift Service on AWS 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 ファイルシステムのセットアップ セクションの手順を使用します。
5.4.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
5.4.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 のトラブルシューティング を参照してください。
5.4.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 のトラブルシューティング を参照してください。
5.4.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 を無視します。Red Hat OpenShift Service on AWS は、ボリューム上のファイルの GID を FSGroup に置き換えることができません。マウントされた EFS アクセスポイントにアクセスできる Pod は、そこにあるすべてのファイルにアクセスできます。
これとは関係ありませんが、転送中の暗号化はデフォルトで有効になっています。詳細は、https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html を参照してください。
5.4.10. AWS EFS ストレージ CSI 使用状況メトリクス リンクのコピーリンクがクリップボードにコピーされました!
5.4.10.1. 使用状況メトリクスの概要 リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) Elastic File Service (EFS) Container Storage Interface (CSI) 使用状況メトリクスを使用すると、動的または静的にプロビジョニングされた EFS ボリュームによって使用されているスペースの量を監視できます。
メトリクスを有効にするとパフォーマンスが低下する可能性があるため、この機能はデフォルトで無効になっています。
AWS EFS 使用状況メトリクス機能は、ボリューム内のファイルを再帰的にウォークスルーし、AWS EFS CSI ドライバーのボリュームメトリクスを収集します。この作業によりパフォーマンスが低下する可能性があるため、管理者はこの機能を明示的に有効にする必要があります。
5.4.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 に変更します。
5.4.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.comCopy 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 に変更します。
5.4.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 createdCopy 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 yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod にボリュームをマウントできない場合 (以下のコマンドの出力に示す):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ボリュームがマウントされていないことを示す警告メッセージ。
このエラーは、AWS が Red Hat OpenShift Service on AWS ノードと Amazon EFS の間でパケットをドロップすることで頻繁に発生します。
以下が正しいことを確認します。
- AWS のファイアウォールとセキュリティーグループ
- ネットワーク: ポート番号と IP アドレス
5.4.12. AWS EFS CSI Driver Operator のアンインストール リンクのコピーリンクがクリップボードにコピーされました!
AWS EFS CSI Driver Operator (Red Hat Operator) をアンインストールすると、すべての EFS PV にアクセスできなくなります。
前提条件
- Red Hat OpenShift Service on AWS 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 ボリュームがある場合、Red Hat OpenShift Service on AWS クラスターを破棄できません。Amazon はこのような VPC の削除を許可していません。