5.4. AWS Elastic File Service CSI ドライバー Operator の設定

重要

この手順は、AWS EFS CSI Driver Operator (Red Hat Operator) に固有であり、OpenShift Dedicated 4.10 以降のバージョンにのみ適用されます。

5.4.1. 概要

OpenShift Dedicated は 、AWS EFS CSI ドライバー を使用して永続ボリューム (PV) をプロビジョニングできます。

CSI Operator およびドライバーを使用する場合は、永続ストレージ および CSI ボリュームの設定 について理解しておくことが推奨されます。

AWS EFS CSI ドライバー Operator をインストールすると、OpenShift Dedicated はデフォルトで AWS EFS CSI Operator と AWS EFS CSI ドライバーを openshift-cluster-csi-drivers namespace にインストールします。これにより、AWS EFS CSI ドライバー Operator は、AWS EFS アセットにマウントする CSI がプロビジョニングする PV を作成することができます。

  • AWS EFS CSI ドライバー Operatorをインストールしても、永続ボリューム要求 (PVC) の作成に使用するストレージクラスがデフォルトで作成されません。ただし、AWS EFS StorageClass を手動で作成することは可能です。AWS EFS CSI ドライバー Operator は、ストレージボリュームをオンデマンドで作成できるようにし、クラスター管理者がストレージを事前にプロビジョニングする必要がなくすことで、動的ボリュームのプロビジョニングをサポートします。
  • AWS EFS CSI ドライバー を使用すると、AWS EFS PV を作成し、マウントできます。
注記

Amazon Elastic File Storage (Amazon EFS) は、ゾーンボリュームではなく、リージョンボリュームのみをサポートします。

5.4.2. CSI について

ストレージベンダーはこれまで Kubernetes の一部としてストレージドライバーを提供してきました。Container Storage Interface (CSI) の実装では、サードパーティーのプロバイダーは、コア Kubernetes コードを変更せずに標準のインターフェイスを使用してストレージプラグインを提供できます。

CSI Operator は、in-tree (インツリー) ボリュームプラグインでは不可能なボリュームスナップショットなどのストレージオプションを OpenShift Dedicated ユーザーに付与します。

5.4.3. AWS EFS CSI ドライバー Operator の設定

  1. AWS EFS CSI Driver Operator (Red Hat Operator) をインストールします。
  2. AWS EFS CSI ドライバードライバーをインストールします。
  3. AWS EFS CSI ドライバーをインストールします。

5.4.3.1. AWS EFS CSI ドライバー Operator のインストール

AWS EFS CSI Driver Operator (Red Hat Operator) は、デフォルトでは OpenShift Dedicated にインストールされません。以下の手順を使用して、クラスター内で AWS EFS CSI ドライバー Operator をインストールおよび設定します。

前提条件

  • OpenShift Dedicated Web コンソールへアクセスできる。

手順

Web コンソールから AWS EFS CSI ドライバー Operator をインストールするには、以下を実行します。

  1. Web コンソールにログインします。
  2. AWS EFS CSI Operator をインストールします。

    1. OperatorsOperatorHub をクリックします。
    2. フィルターボックスにAWS EFS CSIと入力して、AWS EFS CSI Operator を探します。
    3. AWS EFS CSI Driver Operatorボタンをクリックします。

      重要

      AWS EFS OperatorではなくAWS EFS CSI Driver Operatorを必ず選択してください。AWS EFS Operatorはコミュニティー Operator であり、Red Hat ではサポートしていません。

    4. AWS EFS CSI Driver OperatorページでInstallをクリックします。
    5. Install Operatorのページで、以下のことを確認してください。

      • All namespaces on the cluster (default)が選択されている。
      • Installed Namespaceopenshift-cluster-csi-driversに設定されている。
    6. Install をクリックします。

      インストールが終了すると、AWS EFS CSI Operator が Web コンソールのInstalled Operatorsに表示されます。

5.4.3.2. AWS EFS CSI ドライバーのインストール

AWS EFS CSI Driver Operator をインストールしたら、AWS EFS CSI Driver をインストールします。

前提条件

  • OpenShift Dedicated Web コンソールへアクセスできる。

手順

  1. AdministrationCustomResourceDefinitionsClusterCSIDriver をクリックします。
  2. InstancesタブでCreate ClusterCSIDriverをクリックします。
  3. 以下の YAML ファイルを使用します。

    apiVersion: operator.openshift.io/v1
    kind: ClusterCSIDriver
    metadata:
        name: efs.csi.aws.com
    spec:
      managementState: Managed
  4. Create をクリックします。
  5. 以下の条件が "true" に変わるのを待ちます。

    • AWSEFSDriverNodeServiceControllerAvailable
    • AWSEFSDriverControllerServiceControllerAvailable

5.4.4. AWS EFS ストレージクラスの作成

ストレージクラスを使用すると、ストレージのレベルや使用状況を区別し、記述することができます。ストレージクラスを定義することにより、ユーザーは動的にプロビジョニングされた永続ボリュームを取得できます。

AWS EFS CSI Driver Operator (Red Hat Operator) は、インストール後、デフォルトではストレージクラスを作成しません。ただし、AWS EFS ストレージクラスを手動で作成することは可能です。

5.4.4.1. コンソールを使用した AWS EFS ストレージクラスの作成

手順

  1. OpenShift Dedicated コンソールで、StorageStorageClasses をクリックします。
  2. StorageClasses ページで、Create StorageClass をクリックします。
  3. StorageClass ページで、次の手順を実行します。

    1. ストレージクラスを参照するための名前を入力します。
    2. オプション: 説明を入力します。
    3. 回収ポリシーを選択します。
    4. Provisionerドロップダウンリストからefs.csi.aws.comを選択します。
    5. オプション: 選択したプロビジョナーの設定パラメーターを設定します。
  4. Create をクリックします。

5.4.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
    動的プロビジョニングを有効にするには、provisioningModeefs-ap を指定する必要があります。
    2
    fileSystemId は、手動で作成した EFS ボリュームの ID でなければなりません。
    3
    directoryPerms は、ボリュームのルートディレクトリーのデフォルトパーミッションです。この場合、ボリュームには所有者のみがアクセスできます。
    4 5
    gidRangeStartgidRangeEnd は、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 ボリュームへのアクセスの作成と設定

この手順では、OpenShift Dedicated で使用できるように、AWS で EFS ボリュームを作成および設定する方法を説明します。

前提条件

  • AWS アカウントの認証情報。

手順

AWS で EFS ボリュームへのアクセスを作成および設定するには、以下の手順を実施します。

  1. AWS のコンソールで、https://console.aws.amazon.com/efs を開きます。
  2. Create file systemをクリックします。

    • ファイルシステムの名前を入力します。
    • Virtual Private Cloud (VPC) には、OpenShift Dedicated の仮想プライベートクラウド(VPC) を選択します。
    • その他の選択項目については、デフォルト設定を受け入れます。
  3. ボリュームとマウントターゲットが完全に作成され終わるのを待ちます。

    1. https://console.aws.amazon.com/efs#/file-systems にアクセスしてください。
    2. ボリュームをクリックし、Networkタブで、すべてのマウントターゲットが利用可能になるまで待ちます (最長で 1 - 2 分間)。
  4. Networkタブでセキュリティーグループ ID をコピーします (次のステップで必要になります)。
  5. https://console.aws.amazon.com/ec2/v2/home#SecurityGroups にアクセスし、EFS ボリュームで使用されているセキュリティーグループを探します。
  6. Inbound rules タブで、Edit inbound rules をクリックし、以下の設定で新規ルールを追加して、OpenShift Dedicated ノードが EFS ボリュームにアクセスできるようにします。

    • Type: NFS
    • Protocol: TCP
    • Port range: 2049
    • Source: ノードのカスタム/IP アドレス範囲 (例:"10.0.0.0/16")

      この手順で、OpenShift Dedicated がクラスターから NFS ポートを使用できるようになります。

  7. ルールを保存します。

5.4.6. 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 では強制されません。

以下の例では、5GiB の容量を要求しています。しかし、作成された 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

動的プロビジョニングの設定で問題が発生した場合は、Amazon Elastic File Storage のトラブルシューティング を参照してください。

5.4.7. 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 の設定に問題がある場合は、Amazon Elastic File Storage のトラブルシューティング を参照してください。

5.4.8. 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 Dedicated は、ボリューム上のファイルの GID を FSGroup で置き換えることができません。マウントされた EFS アクセスポイントにアクセスできる Pod は、そこにあるすべてのファイルにアクセスできます。

これとは関係ありませんが、転送中の暗号化はデフォルトで有効になっています。詳しくは、https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html を参照してください。

5.4.9. 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 Dedicated ノードと Amazon EFS 間のパケットを AWS がドロップすることで頻繁に発生します。

    以下が正しいことを確認します。

    • AWS のファイアウォールとセキュリティーグループ
    • ネットワーク: ポート番号と IP アドレス

5.4.10. AWS EFS CSI ドライバー Operator のアンインストール

AWS EFS CSI Driver Operator (Red Hat Operator) をアンインストールすると、すべての EFS PV にアクセスできなくなります。

前提条件

  • OpenShift Dedicated Web コンソールへアクセスできる。

手順

Web コンソールから AWS EFS CSI ドライバー Operator をアンインストールするには、以下を実行します。

  1. Web コンソールにログインします。
  2. AWS EFS PV を使用するすべてのアプリケーションを停止します。
  3. すべての AWS EFS PV を削除します。

    1. StoragePersistentVolumeClaims をクリックします。
    2. AWS EFS CSI ドライバー Operator が使用している各 PVC を選択し、PVC の右端にあるドロップダウンメニューをクリックして、Delete PersistentVolumeClaimsをクリックします。
  4. AWS EFS CSI ドライバー をアンインストールします。

    注記

    Operator をアンインストールする前に、まず CSI ドライバーを削除する必要があります。

    1. AdministrationCustomResourceDefinitionsClusterCSIDriver をクリックします。
    2. Instancesタブのefs.csi.aws.comの左端にあるドロップダウンメニューをクリックし、Delete ClusterCSIDriverをクリックします。
    3. プロンプトが表示されたら、Deleteをクリックします。
  5. AWS EFS CSI Operator をアンインストールします。

    1. OperatorsInstalled Operators をクリックします。
    2. Installed Operatorsページで、スクロールするか、Search by nameボックスに AWS EFS CSI と入力してオペレーターを見つけ、クリックします。
    3. Installed Operators > Operator detailsページの右上にあるActionsUninstall Operatorをクリックします。
    4. Uninstall Operator ウィンドウでプロンプトが表示されたら、Uninstall ボタンをクリックして namespace から Operator を削除します。Operator によってクラスターにデプロイされたアプリケーションは手動でクリーンアップする必要があります。

      アンインストールすると、AWS EFS CSI ドライバー Operator が Web コンソールの Installed Operators セクションにリスト表示されなくなります。

注記

クラスターを破棄 (openshift-install destroy cluster) する前に、AWS の EFS ボリュームを削除する必要があります。クラスターの VPC を使用する EFS ボリュームがある場合は、OpenShift Dedicated クラスターを破棄できません。Amazon はこのような VPC の削除を許可していません。

5.4.11. 関連情報