5.10. AWS Elastic File Service CSI Driver Operator
5.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 を作成し、マウントできます。
AWS EFS はリージョナルボリュームのみをサポートしており、ゾーンボリュームはサポートしていません。
5.10.2. CSI について
ストレージベンダーはこれまで Kubernetes の一部としてストレージドライバーを提供してきました。Container Storage Interface (CSI) の実装では、サードパーティーのプロバイダーは、コア Kubernetes コードを変更せずに標準のインターフェイスを使用してストレージプラグインを提供できます。
CSI Operator は、インツリーボリュームプラグインでは不可能なボリュームスナップショットなどのストレージオプションを OpenShift Container Platform ユーザーに付与します。
5.10.3. AWS EFS CSI Driver Operator の設定
- AWS EFS と AWS Secure Token Service (STS) を使用している場合は、STS の Amazon リソース名 (ARN) ロールを取得します。これは、AWS EFS CSI Driver Operator をインストールするために必要です。
- AWS EFS CSI Driver Operator をインストールします。
- AWS EFS CSI ドライバーをインストールします。
5.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 つの方法を示しています。
STS を使用して AWS EFS CSI Driver Operator を設定するための ARN ロールを取得するには、以下を実行します。
-
STS でクラスターをインストールするために使用した OpenShift Container Platform リリースイメージから
ccoctl
を展開します。詳細は、「Cloud Credential Operator ユーティリティーの設定」を参照してください。 以下の例に示されているように EFS
CredentialsRequest
YAML ファイルを作成および保存してから、それをcredrequests
ディレクトリーに配置します。例
apiVersion: cloudcredential.openshift.io/v1 kind: CredentialsRequest metadata: name: openshift-aws-efs-csi-driver namespace: openshift-cloud-credential-operator spec: providerSpec: apiVersion: cloudcredential.openshift.io/v1 kind: AWSProviderSpec statementEntries: - action: - elasticfilesystem:* effect: Allow resource: '*' secretRef: name: aws-efs-cloud-credentials namespace: openshift-cluster-csi-drivers serviceAccountNames: - aws-efs-csi-driver-operator - aws-efs-csi-driver-controller-sa
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
-
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
出力例
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-
-
前の手順の 出力例 の最初の行から、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 ロールが必要になります。
次のステップ
5.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 をインストールします。
-
Operators
OperatorHub をクリックします。 - フィルターボックスに 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 フィールドに、セキュリティートークンサービスの Amazon リソース名ロールの取得 に記載されている最後の手順からコピーした ARN ロールを入力します。
- All namespaces on the cluster (default) が選択されている。
- Installed Namespace が openshift-cluster-csi-drivers に設定されている。
Install をクリックします。
インストールが終了すると、AWS EFS CSI Operator が Web コンソールの Installed Operators に表示されます。
-
Operators
次のステップ
5.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 ファイルを使用します。
apiVersion: operator.openshift.io/v1 kind: ClusterCSIDriver metadata: name: efs.csi.aws.com spec: managementState: Managed
- Create をクリックします。
以下の条件が "True" に変わるのを待ちます。
- AWSEFSDriverNodeServiceControllerAvailable
- AWSEFSDriverControllerServiceControllerAvailable
5.10.4. AWS EFS ストレージクラスの作成
ストレージクラスを使用すると、ストレージのレベルや使用状況を区別し、記述することができます。ストレージクラスを定義することにより、ユーザーは動的にプロビジョニングされた永続ボリュームを取得できます。
AWS EFS CSI Driver Operator (Red Hat Operator) は、インストール後、デフォルトではストレージクラスを作成しません。ただし、AWS EFS ストレージクラスを手動で作成することは可能です。
5.10.4.1. コンソールを使用した AWS EFS ストレージクラスの作成
手順
-
OpenShift Container Platform コンソールで、Storage
StorageClasses をクリックします。 - StorageClasses ページで、Create StorageClass をクリックします。
StorageClass ページで、次の手順を実行します。
- ストレージクラスを参照するための名前を入力します。
- オプション: 説明を入力します。
- 回収ポリシーを選択します。
-
Provisioner ドロップダウンリストから
efs.csi.aws.com
を選択します。 - オプション: 選択したプロビジョナーの設定パラメーターを設定します。
- Create をクリックします。
5.10.4.2. CLI を使用した AWS EFS ストレージクラスの作成
手順
StorageClass
オブジェクトを作成します。kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: efs-sc provisioner: efs.csi.aws.com parameters: provisioningMode: efs-ap 1 fileSystemId: fs-a5324911 2 directoryPerms: "700" 3 gidRangeStart: "1000" 4 gidRangeEnd: "2000" 5 basePath: "/dynamic_provisioning" 6
- 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.10.5. AWS EFS CSI クロスアカウントのサポート
クロスアカウントのサポートにより、1 つの AWS アカウントに OpenShift Container Platform クラスターを配置し、AWS Elastic File System (EFS) Container Storage Interface (CSI) ドライバーを使用して別の AWS アカウントにファイルシステムをマウントできます。
OpenShift Container Platform クラスターと EFS ファイルシステムの両方が同じリージョンに存在する必要があります。
前提条件
- 管理者権限を持つ OpenShift Container Platform クラスターへのアクセス
- 2 つの有効な AWS アカウント
手順
次の手順は、セットアップ方法を示しています。
- AWS アカウント A の OpenShift Container Platform クラスター
- アカウント B に AWS EFS ファイルシステムをマウントします。
アカウント間で AWS EFS を使用するには:
- AWS アカウント A を使用して OpenShift Container Platform クラスターをインストールし、EFS CSI Driver Operator をインストールします。
AWS アカウント B に EFS ボリュームを作成します。
- たとえば、CIDR (たとえば、“172.20.0.0/16”) と AWS EFS ボリュームのサブネットを使用して、"my-efs-vpc” という名前の Virtual Private Cloud (VPC) を作成します。
- AWS コンソールで、https://console.aws.amazon.com/efs に移動します。
新しいファイルシステムの作成 をクリックします。
- たとえば、"my-filesystem" という名前のファイルシステムを作成します。
- 先ほど作成した VPC ("my-efs-vpc") を選択します。
- 残りの設定はデフォルトを受け入れます。
ボリュームとマウントターゲットが作成されていることを確認します。
- https://console.aws.amazon.com/efs#/file-systems を確認してください。
- ボリュームをクリックし、Network タブで、すべてのマウントターゲットが使用可能になるまで待ちます (約 1 ~ 2 分)。
- Network タブで、セキュリティーグループ ID をコピーします。次のステップで必要になります。
AWS アカウント B の AWS EFS ボリュームへのネットワークアクセスを設定します。
- https://console.aws.amazon.com/ec2/v2/home#SecurityGroups に移動します。
- 前にコピーしたグループ ID をフィルタリングして、AWS EFS ボリュームで使用されているセキュリティーグループを見つけます。
Inbound rules タブで、Edit inbound rules をクリックし、OpenShift Container Platform ノードが AWS EFS ボリュームにアクセスできるようにする (つまり、クラスターからの NFS ポートを使用する) 新しいルールを追加します。
- Type: NFS
- Protocol: TCP
- Port range: 2049
- Source: OpenShift Container Platform クラスターノードのカスタム/IP アドレス範囲 (例: "10.0.0.0/16")
ルールを保存します。
注記マウントの問題が発生した場合は、ポート番号、IP アドレスの範囲を再確認し、AWS EFS ボリュームが予期したセキュリティーグループを使用していることを確認してください。
AWS アカウント A の OpenShift Container Platform クラスター VPC と AWS アカウント B の AWS EFS VPC の間に VPC ピアリングを作成します。
2 つの VPC が異なるネットワーク CIDR を使用していることを確認し、VPC ピアリングを作成した後、各 VPC にルートを追加して 2 つの VPC ネットワークを接続します。
- たとえば、アカウント B に "my-efs-crossaccount-peering-connection" というピアリング接続を作成します。ローカル VPC ID には、EFS にある VPC を使用します。アカウント A の VPC とピアするには、VPC ID として OpenShift Container Platform クラスター VPC ID を使用します。
- AWS アカウント A でピア接続を受け入れます。
AWS アカウント B の各サブネット (EFS ボリュームが使用するサブネット) のルートテーブルを変更します。
- 左側のペインの Virtual private cloud で、下矢印をクリックして利用可能なオプションをデプロイメントします。
- Virtual private cloud で、Route tables" をクリックします。
- Routes タブをクリックします。
- Destination で 10.0.0.0/16 を入力します。
- Target で、作成されたピア接続からピア接続タイプポイントを使用します。
AWS アカウント A の各サブネット (サブネットを使用する OpenShift Container Platform クラスターノード) のルートテーブルを変更します。
- 左側のペインの Virtual private cloud で、下矢印をクリックして利用可能なオプションをデプロイメントします。
- Virtual private cloud で、Route tables" をクリックします。
- Routes タブをクリックします。
- Destination で、アカウント B の VPC の CIDR を入力します。この例では 172.20.0.0/16 です。
- Target で、作成されたピア接続からピア接続タイプポイントを使用します。
AWS アカウント A と信頼関係がある AWS アカウント B に IAM ロール (たとえば、"my-efs-acrossaccount-role") を作成し、"my-efs-acrossaccount-role" を呼び出す権限を持つインライン AWS EFS ポリシーを追加します。ドライバーポリシー。
このロールは、AWS アカウント A の OpenShift Container Platform クラスター上で実行されている CSI ドライバーのコントローラーサービスによって使用され、AWS アカウント B のファイルシステムのマウントターゲットを決定します。
# Trust relationships trusted entity trusted account A configuration on my-efs-acrossaccount-role in account B { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::301721915996:root" }, "Action": "sts:AssumeRole", "Condition": {} } ] } # my-cross-account-assume-policy policy attached to my-efs-acrossaccount-role in account B { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::589722580343:role/my-efs-acrossaccount-role" } } # my-efs-acrossaccount-driver-policy attached to my-efs-acrossaccount-role in account B { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ec2:DescribeNetworkInterfaces", "ec2:DescribeSubnets" ], "Resource": "*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "elasticfilesystem:DescribeMountTargets", "elasticfilesystem:DeleteAccessPoint", "elasticfilesystem:ClientMount", "elasticfilesystem:DescribeAccessPoints", "elasticfilesystem:ClientWrite", "elasticfilesystem:ClientRootAccess", "elasticfilesystem:DescribeFileSystems", "elasticfilesystem:CreateAccessPoint" ], "Resource": [ "arn:aws:elasticfilesystem:*:589722580343:access-point/*", "arn:aws:elasticfilesystem:*:589722580343:file-system/*" ] } ] }
AWS アカウント A で、セキュリティートークンサービス (STS) を実行するために必要なアクセス許可を持つインラインポリシーを AWS EFS CSI ドライバーのコントローラーサービスアカウントの IAM ロールにアタッチし、前に作成した IAM ロールでロールを引き受けます。
# my-cross-account-assume-policy policy attached to Openshift cluster efs csi driver user in account A { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::589722580343:role/my-efs-acrossaccount-role" } }
-
AWS アカウント A で、AWS 管理ポリシー "AmazonElasticFileSystemClientFullAccess" を OpenShift Container Platform クラスターマスターロールにアタッチします。ロール名の形式は
<clusterID>-master-role
(例:my-0120ef-czjrl-master-role
) です。 awsRoleArn
をキーとして、前に作成したロールを値として使用して、Kubernetes シークレットを作成します。$ oc -n openshift-cluster-csi-drivers create secret generic my-efs-cross-account --from-literal=awsRoleArn='arn:aws:iam::589722580343:role/my-efs-acrossaccount-role'
ドライバーコントローラーはシークレットからクロスアカウントロール情報を取得する必要があるため、シークレットロールバインディングを AWS EFS CSI ドライバーコントローラー ServiceAccount (SA) に追加する必要があります。
$ oc -n openshift-cluster-csi-drivers create role access-secrets --verb=get,list,watch --resource=secrets $ oc -n openshift-cluster-csi-drivers create rolebinding --role=access-secrets default-to-secrets --serviceaccount=openshift-cluster-csi-drivers:aws-efs-csi-driver-controller-sa
アカウント B のファイルシステム (AWS EFS ボリューム) の
filesystem
ポリシーを作成します。これにより、AWS アカウント A がそのボリュームでマウントを実行できるようになります。This step is not mandatory, but can be safer for AWS EFS volume usage.
# EFS volume filesystem policy in account B { "Version": "2012-10-17", "Id": "efs-policy-wizard-8089bf4a-9787-40f0-958e-bc2363012ace", "Statement": [ { "Sid": "efs-statement-bd285549-cfa2-4f8b-861e-c372399fd238", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "elasticfilesystem:ClientRootAccess", "elasticfilesystem:ClientWrite", "elasticfilesystem:ClientMount" ], "Resource": "arn:aws:elasticfilesystem:us-east-2:589722580343:file-system/fs-091066a9bf9becbd5", "Condition": { "Bool": { "elasticfilesystem:AccessedViaMountTarget": "true" } } }, { "Sid": "efs-statement-03646e39-d80f-4daf-b396-281be1e43bab", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::589722580343:role/my-efs-acrossaccount-role" }, "Action": [ "elasticfilesystem:ClientRootAccess", "elasticfilesystem:ClientWrite", "elasticfilesystem:ClientMount" ], "Resource": "arn:aws:elasticfilesystem:us-east-2:589722580343:file-system/fs-091066a9bf9becbd5" } ] }
次と同様の設定を使用して、AWS EFS ボリュームストレージクラスを作成します。
# The cross account efs volume storageClass kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: efs-cross-account-mount-sc provisioner: efs.csi.aws.com mountOptions: - tls parameters: provisioningMode: efs-ap fileSystemId: fs-00f6c3ae6f06388bb directoryPerms: "700" gidRangeStart: "1000" gidRangeEnd: "2000" basePath: "/account-a-data" csi.storage.k8s.io/provisioner-secret-name: my-efs-cross-account csi.storage.k8s.io/provisioner-secret-namespace: openshift-cluster-csi-drivers volumeBindingMode: Immediate
5.10.6. AWS における EFS ボリュームへのアクセスの作成と設定
この手順では、OpenShift Container Platform で使用できるように、AWS で EFS ボリュームを作成および設定する方法を説明します。
前提条件
- AWS アカウントの認証情報。
手順
AWS で EFS ボリュームへのアクセスを作成および設定するには、以下の手順を実施します。
- AWS のコンソールで、https://console.aws.amazon.com/efs を開きます。
Create file system をクリックします。
- ファイルシステムの名前を入力します。
- Virtual Private Cloud (VPC) には、OpenShift Container Platform の仮想プライベートクラウド (VPC) を選択します。
- その他の選択項目については、デフォルト設定を受け入れます。
ボリュームとマウントターゲットが完全に作成され終わるのを待ちます。
- https://console.aws.amazon.com/efs#/file-systems にアクセスしてください。
- ボリュームをクリックし、Network タブで、すべてのマウントターゲットが利用可能になるまで待ちます (最長で 1 - 2 分間)。
- Network タブでセキュリティーグループ ID をコピーします (次のステップで必要になります)。
- https://console.aws.amazon.com/ec2/v2/home#SecurityGroups にアクセスし、EFS ボリュームで使用されているセキュリティーグループを探します。
Inbound rulesタブでEdit inbound rules をクリックし、OpenShift Container Platform ノードが EFS ボリュームにアクセスできるようにするために、次の設定で新しいルールを追加します。
- Type: NFS
- Protocol: TCP
- Port range: 2049
Source: ノードのカスタム/IP アドレス範囲 (例:"10.0.0.0/16")
このステップで、OpenShift Container Platform がクラスターから NFS ポートを使用できるようになります。
- ルールを保存します。
5.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) を作成します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test spec: storageClassName: efs-sc accessModes: - ReadWriteMany resources: requests: storage: 5Gi
動的プロビジョニングのセットアップに問題がある場合は、AWS EFS のトラブルシューティング を参照してください。
5.10.8. Amazon Elastic File Storage を使用した静的 PV の作成
動的プロビジョニングを行わずに、Amazon Elastic File Storage (Amazon EFS) ボリュームを単一の PV として使用できます。ボリューム全体が Pod にマウントされます。
前提条件
- Amazon EFS ボリュームが作成されている。
手順
以下の YAML ファイルで PV を作成します。
apiVersion: v1 kind: PersistentVolume metadata: name: efs-pv spec: capacity: 1 storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany - ReadWriteOnce persistentVolumeReclaimPolicy: Retain csi: driver: efs.csi.aws.com volumeHandle: fs-ae66151a 2 volumeAttributes: encryptInTransit: "false" 3
- 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.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 を参照してください。
5.10.10. 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 [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
AWS EFS Operator のエラーを表示するには、
ClusterCSIDriver
のステータスを表示します。$ oc get clustercsidriver efs.csi.aws.com -o yaml
Pod にボリュームをマウントできない場合 (以下のコマンドの出力に示す):
$ oc describe pod ... Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m13s default-scheduler Successfully assigned default/efs-app to ip-10-0-135-94.ec2.internal Warning FailedMount 13s kubelet MountVolume.SetUp failed for volume "pvc-d7c097e6-67ec-4fae-b968-7e7056796449" : rpc error: code = DeadlineExceeded desc = context deadline exceeded 1 Warning FailedMount 10s kubelet Unable to attach or mount volumes: unmounted volumes=[persistent-storage], unattached volumes=[persistent-storage kube-api-access-9j477]: timed out waiting for the condition
- 1
- ボリュームがマウントされていないことを示す警告メッセージ。
このエラーは、OpenShift Container Platform ノードと Amazon EFS 間のパケットを AWS がドロップすることで頻繁に発生します。
以下が正しいことを確認します。
- AWS のファイアウォールとセキュリティーグループ
- ネットワーク: ポート番号と IP アドレス
5.10.11. 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 をアンインストールします。
-
Operators
Installed Operators をクリックします。 - Installed Operatorsページで、スクロールするか、Search by name ボックスに AWS EFS CSI と入力してオペレーターを見つけ、クリックします。
-
Installed Operators > Operator details ページの右上にある Actions
Uninstall Operator をクリックします。 Uninstall Operator ウィンドウでプロンプトが表示されたら、Uninstall ボタンをクリックして namespace から Operator を削除します。Operator によってクラスターにデプロイされたアプリケーションは手動でクリーンアップする必要があります。
アンインストールすると、AWS EFS CSI Driver Operator が Web コンソールの Installed Operators セクションにリスト表示されなくなります。
-
Operators
クラスターを破棄 (openshift-install destroy cluster
) する前に、AWS の EFS ボリュームを削除する必要があります。クラスターの VPC を使用する EFS ボリュームがある場合、OpenShift Container Platform クラスターを破棄することはできません。Amazon はこのような VPC の削除を許可していません。