2.5. Amazon EC2 ストレージ最適化 i3en.2xlarge インスタンスタイプでの OpenShift Container Storage クラスターの作成

以下の手順を使用して、Amazon EC2(ストレージ最適化 i3en.2xlarge インスタンスタイプ)インフラストラクチャーに OpenShift Container Storage クラスターを作成します。これには、以下が含まれます。

  1. LocalVolume CR の使用による PV の作成
  2. 新規 StorageClass の作成
重要

ローカルストレージ Operator を使用した Amazon EC2 ストレージ最適化 i3en.2xlarge インスタンスへの OpenShift Container Storage のインストールはテクノロジープレビュー機能です。テクノロジープレビュー機能は Red Hat の実稼働環境でのサービスレベルアグリーメント (SLA) ではサポートされていないため、Red Hat では実稼働環境での使用を推奨していません。Red Hat は実稼働環境でこれらを使用することを推奨していません。これらの機能は、近々発表予定の製品機能をリリースに先駆けてご提供することにより、お客様は機能性をテストし、開発プロセス中にフィードバックをお寄せいただくことができます。Red Hat OpenShift Container Storage デプロイメントでは、3 つのワーカーノードで実行されるアプリケーションやその他のワークロードを使用せずに、新規クラスターを使用することが想定されます。アプリケーションは追加のワーカーノードで実行する必要があります。

Amazon EC2 ストレージ最適化 i3en.2xlarge インスタンスタイプには、2 つの NVMe (non-volatile memory express) ディスクが含まれます。この手順の例では、このインスタンスタイプと共に提供される 2 つのディスクの使用方法について説明します。

警告

OpenShift Container Storage 永続データには、Amazon EC2 I3 の一時ストレージを使用することは推奨されません。3 つのノードすべてを停止するとデータが損失する可能性があるためです。一時ストレージは、以下のようなシナリオでのみ使用することが推奨されます。

  • 特定のデータ処理 (data crunching) のためにデータがある場所からコピーされるクラウドバースト (時間に制限がある) が想定される場合。
  • 開発環境またはテスト環境が想定される場合。

Amazon EC2 I3 の一時ストレージを使用している場合は、以下を行うことが推奨されます。

  • 3 つのアベイラビリティーゾーンすべてを使用し、すべてのデータを失うリスクを軽減する。
  • ec2:StopInstances パーミッションを持つユーザーの数を制限し、インスタンスを誤ってシャットダウンすることを回避する。

前提条件

  • ローカルストレージデバイスを使用した OpenShift Container Storage のインストールの要件に記載されるすべての要件を満たしていることを確認します。
  • OpenShift Container Platform ワーカーノードに OpenShift Contaner Storage ラベルを付けられていることを確認します。これは nodeSelector として使用されます。

    $ oc get nodes -l cluster.ocs.openshift.io/openshift-storage -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}'

    出力例:

    ip-10-0-135-71.us-east-2.compute.internal
    ip-10-0-145-125.us-east-2.compute.internal
    ip-10-0-160-91.us-east-2.compute.internal

手順

  1. LocalVolume カスタムリソース (CR) を使用してストレージノードにローカル永続ボリューム (PV) を作成します。

    OpenShift Storage Container ラベルをノードセレクターおよび by-id デバイス識別子として使用する LocalVolume CR local-storage-block.yaml の例

    apiVersion: local.storage.openshift.io/v1
    kind: LocalVolume
    metadata:
      name: local-block
      namespace: local-storage
      labels:
        app: ocs-storagecluster
    spec:
      tolerations:
      - key: "node.ocs.openshift.io/storage"
        value: "true"
        effect: NoSchedule
      nodeSelector:
        nodeSelectorTerms:
          - matchExpressions:
              - key: cluster.ocs.openshift.io/openshift-storage
                operator: In
                values:
                  - ''
      storageClassDevices:
        - storageClassName: localblock
          volumeMode: Block
          devicePaths:
            - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS10382E5D7441494EC   # <-- modify this line
            - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS1F45C01D7E84FE3E9   # <-- modify this line
            - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS136BC945B4ECB9AE4   # <-- modify this line
            - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS10382E5D7441464EP   # <-- modify this line
            - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS1F45C01D7E84F43E7   # <-- modify this line
            - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS136BC945B4ECB9AE8   # <-- modify this line

    各 Amazon EC2 i3en.2xlarge インスタンスには 2 つのディスクがあり、この例では両方のディスクを使用します。

  2. LocalVolume CR を作成します。

    $ oc create -f local-storage-block.yaml

    出力例:

    localvolume.local.storage.openshift.io/local-block created
  3. Pod が作成されているかどうかを確認します。

    $ oc -n local-storage get pods

    出力例:

    NAME                                      READY   STATUS    RESTARTS   AGE
    local-block-local-diskmaker-59rmn         1/1     Running   0          15m
    local-block-local-diskmaker-6n7ct         1/1     Running   0          15m
    local-block-local-diskmaker-jwtsn         1/1     Running   0          15m
    local-block-local-provisioner-6ssxc       1/1     Running   0          15m
    local-block-local-provisioner-swwvx       1/1     Running   0          15m
    local-block-local-provisioner-zmv5j       1/1     Running   0          15m
    local-storage-operator-7848bbd595-686dg   1/1     Running   0          15m
  4. PV が作成されているかどうかを確認します。

    3 つのワーカーノード上の各ローカルストレージデバイスの新規 PV が表示される必要があります。利用可能なストレージデバイスの検索についてのセクションの例を参照してください。このセクションには、サイズが 2328Gi のワーカーノードごとに利用可能な 2 つのストレージデバイスが示されています。

    $ oc get pv

    出力例:

    NAME               CAPACITY ACCESS MODES  RECLAIM POLICY STATUS       CLAIM     STORAGECLASS  REASON   AGE
    local-pv-1a46bc79  2328Gi   RWO           Delete         Available              localblock             14m
    local-pv-429d90ee  2328Gi   RWO           Delete         Available              localblock             14m
    local-pv-4d0a62e3  2328Gi   RWO           Delete         Available              localblock             14m
    local-pv-55c05d76  2328Gi   RWO           Delete         Available              localblock             14m
    local-pv-5c7b0990  2328Gi   RWO           Delete         Available              localblock             14m
    local-pv-a6b283b   2328Gi   RWO           Delete         Available              localblock             14m
  5. LocalVolume CR の作成により新規の StorageClass が作成されているかどうかを確認します。この StorageClass は、PVC を作成するために StorageCluster を作成する間に使用されます。

    $ oc get sc | grep localblock

    出力例:

    NAME            PROVISIONER                    RECLAIMPOLICY
    VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION     AGE
    localblock      kubernetes.io/no-provisioner   Delete
    WaitForFirstConsumer  false                3h47m
  6. localblock StorageClass および作成される PV を使用する StorageCluster CR を作成します。

    monDataDirHostPath および localblock StorageClass を使用する StorageCluster CR ocs-cluster-service.yaml の例。

    apiVersion: ocs.openshift.io/v1
    kind: StorageCluster
    metadata:
      name: ocs-storagecluster
      namespace: openshift-storage
    spec:
      manageNodes: false
      resources:
        mds:
          limits:
            cpu: 3
            memory: 8Gi
          requests:
            cpu: 1
            memory: 8Gi
        noobaa-core:
          limits:
            cpu: 2
            memory: 8Gi
          requests:
            cpu: 1
            memory: 8Gi
        noobaa-db:
          limits:
            cpu: 2
            memory: 8Gi
          requests:
            cpu: 1
            memory: 8Gi
      monDataDirHostPath: /var/lib/rook
      storageDeviceSets:
        - count: 2
          dataPVCTemplate:
            spec:
              accessModes:
                - ReadWriteOnce
              resources:
                requests:
                  storage: 2328Gi
              storageClassName: localblock
              volumeMode: Block
          name: ocs-deviceset
          placement: {}
          portable: false
          replica: 3
          resources: {}
    重要

    OSD にノード間で保証されたサイズを確保するには、storageDeviceSets のストレージサイズを、ノード上に作成された必要な PV のサイズ以下に指定する必要があります。

  7. StorageCluster CR を作成します。

    $ oc create -f ocs-cluster-service.yaml

    出力例

    storagecluster.ocs.openshift.io/ocs-cluster-service created

検証手順

OpenShift Container Storage デプロイメントの検証について参照してください。