4.4. Cinder を使用した永続ストレージ

OpenShift Container Platform は OpenStack Cinder をサポートします。これには、Kubernetes と OpenStack についてある程度の理解があることが前提となります。

Cinder ボリュームは動的にプロビジョニングできます。永続ボリュームは単一のプロジェクトまたは namespace にバインドされず、それらは OpenShift Container Platform クラスター間で共有できます。Persistent volume claim (PVC) はプロジェクトまたは namespace に固有のもので、ユーザーによって要求されます。

重要

OpenShift Container Platform は、Cider ストレージをプロビジョニングするためにデフォルトで in-tree または CSI 以外のドライバーの使用に設定されます。

今後の OpenShift Container Platform バージョンでは、既存の in-tree プラグインを使用してプロビジョニングされるボリュームは、同等の CSI ドライバーに移行される予定です。CSI 自動マイグレーションはシームレスに行ってください。移行をしても、永続ボリューム、永続ボリューム要求、ストレージクラスなどの既存の API オブジェクトを使用する方法は変更されません。移行についての詳細は、CSI の自動移行 を参照してください。

完全な移行後、in-tree プラグインは最終的に OpenShift Container Platform の今後のバージョンで削除されます。

関連情報

  • OpenStack Block Storage が仮想ハードドライブの永続ブロックストレージ管理を提供する方法についての詳細は、OpenStack Cinder を参照してください。

4.4.1. Cinder を使用した手動プロビジョニング

ストレージは、ボリュームとして OpenShift Container Platform にマウントされる前に基礎となるインフラストラクチャーになければなりません。

前提条件

  • Red Hat OpenStack Platform (RHOSP) 用に設定された OpenShift Container Platform
  • Cinder ボリューム ID

4.4.1.1. 永続ボリュームの作成

OpenShift Container Platform に永続ボリューム (PV) を作成する前に、オブジェクト定義でこれを定義する必要があります。

手順

  1. オブジェクト定義をファイルに保存します。

    cinder-persistentvolume.yaml

    apiVersion: "v1"
    kind: "PersistentVolume"
    metadata:
      name: "pv0001" 1
    spec:
      capacity:
        storage: "5Gi" 2
      accessModes:
        - "ReadWriteOnce"
      cinder: 3
        fsType: "ext3" 4
        volumeID: "f37a03aa-6212-4c62-a805-9ce139fab180" 5

    1
    永続ボリューム要求 (PVC) または Pod によって使用されるボリュームの名前。
    2
    このボリュームに割り当てられるストレージの量。
    3
    Red Hat OpenStack Platform (RHOSP) Cinder ボリュームの cinder を示します。
    4
    ボリュームの初回マウント時に作成されるファイルシステム。
    5
    使用する Cinder ボリューム
    重要

    ボリュームをフォーマットしてプロビジョニングした後には、fstype パラメーターの値は変更しないでください。この値を変更すると、データの損失や、Pod の障害につながる可能性があります。

  2. 前のステップで保存したオブジェクト定義ファイルを作成します。

    $ oc create -f cinder-persistentvolume.yaml

4.4.1.2. 永続ボリュームのフォーマット

OpenShift Container Platform は初回の使用前にフォーマットするため、フォーマットされていない Cinder ボリュームを PV として使用できます。

OpenShift Container Platform がボリュームをマウントし、これをコンテナーに渡す前に、システムは PV 定義の fsType パラメーターで指定されたファイルシステムがボリュームに含まれるかどうかをチェックします。デバイスが指定されたファイルシステムでフォーマットされていない場合、デバイスのデータはすべて消去され、デバイスはそのファイルシステムで自動的にフォーマットされます。

4.4.1.3. Cinder ボリュームのセキュリティー

お使いのアプリケーションで Cinder PV を使用する場合に、そのデプロイメント設定にセキュリティーを追加します。

前提条件

  • 適切な fsGroup ストラテジーを使用する SCC が作成される必要があります。

手順

  1. サービスアカウントを作成して、そのアカウントを SCC に追加します。

    $ oc create serviceaccount <service_account>
    $ oc adm policy add-scc-to-user <new_scc> -z <service_account> -n <project>
  2. アプリケーションのデプロイ設定で、サービスアカウント名と securityContext を指定します。

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: frontend-1
    spec:
      replicas: 1  1
      selector:    2
        name: frontend
      template:    3
        metadata:
          labels:  4
            name: frontend 5
        spec:
          containers:
          - image: openshift/hello-openshift
            name: helloworld
            ports:
            - containerPort: 8080
              protocol: TCP
          restartPolicy: Always
          serviceAccountName: <service_account> 6
          securityContext:
            fsGroup: 7777 7
    1
    実行する Pod のコピー数です。
    2
    実行する Pod のラベルセレクターです。
    3
    コントローラーが作成する Pod のテンプレート。
    4
    Pod のラベル。ラベルセレクターからのラベルを組み込む必要があります。
    5
    パラメーター拡張後の名前の最大長さは 63 文字です。
    6
    作成したサービスアカウントを指定します。
    7
    Pod の fsGroup を指定します。

4.4.1.4. ノード上の Cinder ボリュームの最大数

デフォルトでは、OpenShift Container Platform は 1 つのノードにアタッチされた最大 256 個の Cinder ボリュームをサポートし、アタッチ可能なボリュームを制限する Cinder 述語は無効になっています。述語を有効にするには、MaxCinderVolumeCount 文字列をスケジューラーポリシーの predicates フィールドに追加します。

関連情報