Lustreサービスを使用したファイル・ストレージでのPVCのプロビジョニング

File Storage with Lustreサービスからファイル・システムをマウントすることで、Kubernetes Engine (OKE)を使用して作成したクラスタに対して永続ボリューム要求をプロビジョニングする方法をご紹介します。

Oracle Cloud Infrastructure File Storage with Lustreサービスは、AI/MLのトレーニングと推論、および高パフォーマンス・コンピューティングのニーズを満たすように設計されたフルマネージド・ストレージ・サービスです。Lustre CSIプラグインを使用して、LustreサービスでFile Storageのファイル・システムにクラスタを接続します。

File Storage with Lustreサービスを使用すると、File Storage with Lustreサービスにファイル・システムを手動で作成し、新しいファイル・システムに支えられた永続ボリューム(PV)を定義して作成し、最後に新しいPVCを定義することで、永続ボリューム要求(PVC)をプロビジョニングできます。PVCを作成すると、Kubernetes EngineはLustreサービスでFile Storageに支えられたPVにPVCをバインドします。

Lustre CSIドライバは、コンテナ・ストレージ・インタフェース(CSI)を介してLustreファイル・システムをKubernetesで使用できるようにする全体的なソフトウェアです。Lustre CSIプラグインは、Kubernetes APIサーバーとの対話とLustreボリュームのライフサイクルの管理を担当する、ドライバ内の特定のコンポーネントです。

次の点に注意してください:

  • Lustre CSIドライバは、Kubernetesバージョン1.29以降を実行しているKubernetes Engineによって作成されたクラスタでサポートされています。
  • Lustre CSIドライバは、Oracle Linux 8 x86およびUbuntu x86 22.04でサポートされています。
  • Kubernetes Engineによって作成されたクラスタでLustreファイル・システムを使用するには、Lustreクライアント・パッケージを、ファイル・システムをマウントする必要があるワーカー・ノードにインストールする必要があります。Lustreクライアントの詳細は、Lustre File Systemのマウントおよびアクセスを参照してください。

既存のファイル・システムでのPVCのプロビジョニング

File Storage with Lustreサービスの既存のファイル・システムにPVCを作成するには(Oracle管理の暗号化キーを使用して保存データを暗号化します):

  1. File Storage with Lustreサービスでファイル・システムを作成し、「Oracle管理キーを使用した暗号化」暗号化オプションを選択します。Lustre File Systemの作成を参照してください。
  2. セキュリティ・ルールは、Lustreファイル・システムとクラスタのワーカー・ノード・サブネットの両方について、ネットワーク・セキュリティ・グループ(推奨)またはセキュリティ・リストのいずれかで作成します。
    作成するセキュリティ・ルールは、次のシナリオに従って、Lustreファイル・システムの相対的なネットワークの場所と、クライアントとして機能するワーカー・ノードによって異なります。

    これらのシナリオ、作成するセキュリティ・ルールおよび作成場所は、Lustreを使用したファイル・ストレージ・サービスのドキュメント(必要なVCNセキュリティ・ルールを参照)で詳しく説明されています。

  3. 次のように、File Storage with Lustreサービスでファイル・システムによってバックアップされたPVを作成します。
    1. PVを定義するマニフェスト・ファイルを作成し、csi:セクションで次のように設定します。

      • driverからlustre.csi.oraclecloud.com
      • volumeHandleから<MGSAddress>@<LNetName>:/<MountName>

        ここでは:

        • <MGSAddress>は、Lustreサービスを含むファイル・ストレージ内のファイル・システムの管理サービス・アドレスです
        • <LNetName>は、Lustreサービスのファイル・ストレージ内のファイル・システムのLNetネットワーク名です。
        • <MountName>は、Lustreサービスを使用したファイル・ストレージでのファイル・システムの作成時に使用されるマウント名です。

        たとえば: 10.0.2.6@tcp:/testlustrefs

      • fsTypeからlustre
      • (オプションですが推奨)Lustre CSIドライバで、ファイルシステムをマウントする前にlnet (Lustre Network)設定を実行する場合は、volumeAttributes.setupLnet"true"にします。
      • (オプション)ワーカー・ノードのセカンダリVNICが配置されているサブネットのCIDRブロックへのvolumeAttributes.lustreSubnetCidr。ワーカー・ノードにLustreファイル・システムへのネットワーク接続があることを確認します。例: 10.0.2.0/24

        ノート

        ワーカー・ノードのデフォルトのインタフェース(プライマリVNIC)を使用してLustreファイル・システムに接続する場合は、volumeAttributes.lustreSubnetCidrを指定しないでください。
      • (オプション)Lustreパラメータを設定するvolumeAttributes.lustrePostMountParameters。例:
        ...
            volumeAttributes:
              lustrePostMountParameters: '[{"*.*.*MDT*.lru_size": 11200},{"at_history" :
            600}]'

      たとえば、次のマニフェスト・ファイル(lustre-PV-example.yamlという名前)は、Lustreファイル・システムによってバックアップされるlustre-pv-exampleというPVを定義します。

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: lustre-pv-example
      spec:
        capacity:
          storage: 31Ti
        volumeMode: Filesystem
        accessModes:
          - ReadWriteMany
        persistentVolumeReclaimPolicy: Retain
        csi:
          driver: lustre.csi.oraclecloud.com
          volumeHandle: "10.0.2.6@tcp:/testlustrefs"
          fsType: lustre
          volumeAttributes:
            setupLnet: "true"
    2. 次のように入力して、マニフェスト・ファイルからPVを作成します。
      kubectl apply -f <filename>

      例:

      kubectl apply -f lustre-pv-example.yaml
    3. 次のように入力して、PVが正常に作成されたことを確認します。

      kubectl get pv <pv-name>

      例:

      kubectl get pv lustre-pv-example

      出力例:

      NAME                   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                           STORAGECLASS   REASON   AGE
      lustre-pv-example      m31Ti      RWX            Retain           Bound                                                            56m
      
  4. 次のように、作成したPVによってプロビジョニングされるPVCを作成します。
    1. PVCを定義するマニフェスト・ファイルを作成し、次のように設定します。
      • storageClassNameから""永続ストレージの静的プロビジョニングの場合、ストレージ・クラスを適用できない場合でも、storageClassNameには空の値を指定する必要があります。storageClassNameに空の値を指定しない場合、デフォルトのストレージ・クラス(oci-bv)が使用され、エラーが発生します。
      • volumeName: 作成したPVの名前(lustre-pv-exampleなど)

      たとえば、次のマニフェスト・ファイル(lustre-PVC-example.yamlという名前)は、lustre-pv-exampleという名前のPVにバインドするlustre-pvc-exampleという名前のPVCを定義します。

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: lustre-pvc-example
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: ""
        volumeName: lustre-pv-example
        resources:
          requests:
            storage:  31Ti

      requests: storage:要素はPVCのマニフェスト・ファイルに存在する必要があり、その値はPVのマニフェスト・ファイルのcapacity: storage:要素に指定された値と一致する必要があります。それ以外に、requests: storage:要素の値は無視されます。

    2. 次のように入力して、マニフェスト・ファイルからPVCを作成します。
      kubectl apply -f <filename>
      例:
      kubectl apply -f lustre-pvc-example.yaml
    3. 次のように入力して、PVCが正常に作成され、PVにバインドされていることを確認します:

      kubectl get pvc <pvc-name>

      例:

      kubectl get pvc lustre-pvc-example

      出力例:

      NAME                    STATUS   VOLUME                 CAPACITY   ACCESS MODES   STORAGECLASS   AGE
      lustre-pvc-example      Bound    lustre-pv-example       31Ti      RWX                           57m

    PVCは、File Storage with Lustreサービス・ファイル・システムによってバックアップされたPVにバインドされます。データは、Oracleによって管理される暗号化キーを使用して、保存時に暗号化されます。

  5. デプロイメントなどの他のオブジェクトを作成する場合は、新しいPVCを使用します。例:
    1. 次のように、lustre-app-example-deployment.yamlという名前のマニフェストを作成して、lustre-pvc-example PVCを使用するlustre-app-example-deploymentという名前のデプロイメントを定義します。
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: lustre-app-example-deployment
      spec:
        selector:
          matchLabels:
            app: lustre-app-example
        replicas: 2
        template:
          metadata:
            labels:
              app: lustre-app-example
          spec:
            containers:
            - args:
              - -c
              - while true; do echo $(date -u) >> /lustre/data/out.txt; sleep 60; done
              command:
              - /bin/sh
              image: busybox:latest
              imagePullPolicy: Always
              name: lustre-app-example
              volumeMounts:
              - mountPath: /lustre/data
                name: lustre-volume
            restartPolicy: Always
            volumes:
            - name: lustre-volume
              persistentVolumeClaim:
                claimName: lustre-pvc-example
    2. 次のように入力して、マニフェスト・ファイルからデプロイメントを作成します。
      kubectl apply -f lustre-app-example-deployment.yaml
    3. 次のように入力して、デプロイメント・ポッドが正常に作成され、実行されていることを確認します:
      kubectl get pods

      出力例:

      NAME                                             READY   STATUS              RESTARTS   AGE
      lustre-app-example-deployment-7767fdff86-nd75n   1/1     Running             0          8h
      lustre-app-example-deployment-7767fdff86-wmxlh   1/1     Running             0          8h

マウント・オプションを使用した既存のファイル・システムでのPVCのプロビジョニング

PVのマウント・オプションを指定することで、既存のLustreファイル・システムに対するパフォーマンスを最適化し、アクセスを制御できます。マウント・オプションを指定すると、ポッドがファイル・システムとどのように相互作用するかを微調整できます。

マウント・オプションを含めるには:

  1. 既存のファイル・システムでのPVCのプロビジョニングの手順に従って開始します。
  2. 「既存のファイル・システムでのPVCのプロビジョニング」で説明されているPVマニフェストで、ポッドによるPVのマウント方法を指定できるspec.mountOptionsフィールドを追加します。

    たとえば、「既存のファイル・システムでのPVCのプロビジョニング」に示されているlustre-pv-example.yamlマニフェスト・ファイルでは、次のようにmountOptionsフィールドを含めることができます。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: lustre-pv-example
    spec:
      capacity:
        storage: 31Ti
      volumeMode: Filesystem
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      mountOptions:
        - ro 
      csi:
        driver: lustre.csi.oraclecloud.com
        volumeHandle: "10.0.2.6@tcp:/testlustrefs"
        fsType: lustre
        volumeAttributes:
          setupLnet: "true"

    この例では、mountOptionsフィールドがroに設定されており、ポッドがファイル・システムへの読取り専用アクセス権を持つことを示します。PVマウント・オプションの詳細は、Kubernetesドキュメントの永続ボリュームを参照してください。

既存のファイル・システムでの保存データの暗号化

File Storage with Lustreサービスでは、保存されているデータは常に、デフォルトでOracle管理の暗号化キーを使用して暗号化されます。ただし、Vaultサービスで自分を管理している独自のマスター暗号化キーを使用して保存中の暗号化を指定するオプションがあります。

Oracle管理の暗号化キーを使用するLustreファイル・システムまたは自分で管理する独自のマスター暗号化キーを使用したファイル・ストレージの作成の詳細は、ファイル・システムの暗号化の更新を参照してください。