5.19. VMware vSphere CSI ドライバー Operator

5.19.1. 概要

OpenShift Container Platform は、Virtual Machine Disk (VMDK) ボリュームの永続ディスク (PD) ストレージの Container Storage Interface (CSI) VMware vSphere ドライバーを使用して永続ボリューム (PV) をプロビジョニングできます。

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

vSphere ストレージアセットにマウントする CSI でプロビジョニングされた永続ボリューム (PV) を作成するには、OpenShift Container Platform は、デフォルトで vSphere CSI Driver Operator および vSphere CSI ドライバーを openshift-cluster-csi-drivers namespace にインストールします。

  • vSphere CSI Driver Operator: Operator は、永続ボリューム要求 (PVC) の作成に使用できる thin-csi というストレージクラスを提供します。vSphere CSI ドライバー Operator は、ストレージボリュームをオンデマンドで作成できるようにし、クラスター管理者がストレージを事前にプロビジョニングする必要がなくすことで、動的ボリュームのプロビジョニングをサポートします。
  • vSphere CSI ドライバー: このドライバーを使用すると、vSphere PV を作成し、マウントできます。OpenShift Container Platform 4.12.21 以降では、ドライバーのバージョンは 2.7.1 です。4.12.21 より前の OpenShift Container Platform 4.12 バージョンでは、バージョンは 2.6.1 です。vSphere CSI ドライバーは、XFS や Ext4 など、基盤となる Red Hat Core OS リリースでサポートされるすべてのファイルシステムをサポートします。サポートされているファイルシステムの詳細は、利用可能なファイルシステムの概要 を参照してください。
重要

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

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

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

注記

vSphere CSI Driver は、動的および静的なプロビジョニングをサポートします。PV 仕様で静的プロビジョニングを使用する場合、 csi.volumeAttributesでキーstorage.kubernetes.io/csiProvisionerIdentityを使用しないでください。このキーは動的にプロビジョニングされた PV を示すためです。

5.19.2. CSI について

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

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

5.19.3. vSphere ストレージポリシー

vSphere CSI Driver Operator ストレージクラスは、vSphere のストレージポリシーを使用します。OpenShift Container Platform は、クラウド設定で設定されるデータストアをターゲットにするストレージポリシーを自動的に作成します。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: thin-csi
provisioner: csi.vsphere.vmware.com
parameters:
  StoragePolicyName: "$openshift-storage-policy-xxxx"
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: false
reclaimPolicy: Delete

5.19.4. ReadWriteMany vSphere ボリュームのサポート

基盤となる vSphere 環境が vSAN ファイルサービスをサポートしている場合、OpenShift Container Platform によってインストールされた vSphere Container Storage Interface (CSI) Driver Operator は ReadWriteMany (RWX) ボリュームのプロビジョニングをサポートします。vSAN ファイルサービスが設定されていない場合、使用可能なアクセスモードは ReadWriteOnce (RWO) のみです。vSAN ファイルサービスが設定されていない場合に RWX を要求すると、ボリュームの作成に失敗し、エラーがログに記録されます。

ご使用の環境で vSAN ファイルサービスを設定する方法について、詳しくは vSAN File Service を参照してください。

次の永続ボリューム要求 (PVC) を行うことで、RWX ボリュームを要求できます。

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  resources:
    requests:
      storage: 1Gi
  accessModes:
     - ReadWriteMany
  storageClassName: thin-csi

RWX ボリュームタイプの PVC を要求すると、vSAN ファイルサービスによってサポートされる永続ボリューム (PV) がプロビジョニングされます。

5.19.5. VMware vSphere CSI Driver Operator の要件

vSphere CSI Driver Operator をインストールするには、次の要件を満たす必要があります。

  • VMware vSphere バージョン: 7.0 Update 2 以降、8.0 Update 1 以降
  • vCenter バージョン: 7.0 Update 2 以降、8.0 Update 1 以降
  • ハードウェアバージョン 15 以降の仮想マシン
  • クラスターにサードパーティーの vSphere CSI ドライバーがインストールされていない

サードパーティーの vSphere CSI ドライバーがクラスターに存在する場合、OpenShift Container Platform はそれを上書きしません。サードパーティーの vSphere CSI ドライバーが存在すると、OpenShift Container Platform を OpenShift Container Platform 4.13 以降にアップグレードできなくなります。

注記

VMware vSphere CSI Driver Operator は、インストールマニフェストの platform: vsphere でデプロイされたクラスターでのみサポートされます。

サードパーティーの CSI ドライバーを削除するには、サードパーティーの vSphere CSI ドライバーの削除 を参照してください。

5.19.6. サードパーティー vSphere CSI Driver Operator の削除

OpenShift Container Platform 4.10 以降には、Red Hat がサポートする vSphere Container Storage Interface (CSI) Operator ドライバーの組み込みバージョンが含まれます。コミュニティーまたは別のベンダーが提供する vSphere CSI ドライバーをインストールした場合、OpenShift Container Platform の次のメジャーバージョン (4.13 以降など) への更新がクラスターで無効になる可能性があります。

OpenShift Container Platform 4.12 以降では、クラスターは引き続き完全にサポートされており、4.12.z などの 4.12 の z ストリームリリースの更新はブロックされませんが、OpenShift Container Platform の次のメジャーバージョンに更新する前に、サードパーティーの vSphere CSI Driver ドライバーを削除してこの状態を修正する必要があります。サードパーティーの vSphere CSI ドライバーの削除には、関連する永続ボリューム (PV) オブジェクトの削除が必要ないため、データ喪失は発生しません。

注記

以下の手順は完全ではない可能性があるため、ベンダーまたはコミュニティープロバイダーのアンインストールガイドを参照して、ドライバーおよびコンポーネントを完全に削除してください。

サードパーティーの vSphere CSI Driver をアンインストールするには、以下を実行します。

  1. サードパーティーの vSphere CSI Driver(VMware vSphere Container Storage プラグイン) の Deployment および Daemonset オブジェクトを削除します。
  2. サードパーティーの vSphere CSI Driver で以前にインストールされた configmap およびシークレットオブジェクトを削除します。
  3. サードパーティーの vSphere CSI ドライバー CSIDriver オブジェクトを削除します。

    ~ $ oc delete CSIDriver csi.vsphere.vmware.com
    csidriver.storage.k8s.io "csi.vsphere.vmware.com" deleted

OpenShift Container Platform クラスターからサードパーティーの vSphere CSI Driver を削除した後に、Red Hat の vSphere CSI Driver Operatorr のインストールが自動的に再開され、OpenShift Container Platform 4.11 以降へのアップグレードをブロックする可能性のある条件は自動的に削除されます。既存の vSphere CSI PV オブジェクトがある場合、それらのライフサイクルは Red Hat の vSphere CSI Driver Operator で管理されるようになります。

5.19.7. vSphere CSI トポロジーの設定

OpenShift Container Platform は、異なるゾーンおよびリージョンに OpenShift Container Platform for vSphere をデプロイする機能を提供します。これにより、複数のコンピューティングクラスターにデプロイできるため、単一障害点を回避するのに役立ちます。

注記

OpenShift Container Platform on vSphere は、複数のデータセンターをサポートしていません。

これは、vCenter でゾーンとリージョンのカテゴリーを定義し、これらのゾーンとリージョンのカテゴリーのタグを作成して、コンピューティングクラスターなどのさまざまな障害ドメインにこれらのカテゴリーを割り当てることによって実現されます。適切なカテゴリーを作成し、vCenter オブジェクトにタグを割り当てたら、それらの障害ドメインで Pod のスケジュールを担当する仮想マシン (VM) を作成する追加のマシンセットを作成できます。

手順

  1. VMware vCenter vSphere クライアント GUI で、適切なゾーンとリージョンのカテゴリーとタグを定義します。

    vSphere では任意の名前でカテゴリーを作成できますが、OpenShift Container Platform では、トポロジーを定義するために openshift-region および openshift-zone 名を使用することを強く推奨します。

    次の例では、1 つのリージョンと 2 つのゾーンを持つ 2 つの障害ドメインを定義しています。

    表5.4 1 つのリージョンと 2 つのゾーンを持つ vSphere トポロジー

    計算クラスター障害ドメイン説明

    コンピューティングクラスター: ocp1、データセンター: アトランタ

    openshift-region: us-east-1 (タグ)、openshift-zone: us-east-1a (タグ)

    これにより、リージョン us-east-1 にゾーン us-east-1a を持つ障害ドメインが定義されます。

    コンピュータークラスター: ocp2、データセンター: アトランタ

    openshift-region: us-east-1 (タグ)、openshift-zone: us-east-1b (タグ)

    これにより、us-east-1b と呼ばれる同じリージョン内の別の障害ドメインが定義されます。

    vSphere のカテゴリーとタグの詳細については、VMware vSphere のドキュメントを参照してください。

  2. Container Storage Interface (CSI) ドライバーがこのトポロジーを検出できるようにするには、clusterCSIDriver オブジェクトの YAML ファイルの driverConfig セクションを編集します。

    • 以前に作成した openshift-zone および openshift-region カテゴリーを指定します。
    • driverTypevSphere に設定します。

      ~ $ oc edit clustercsidriver csi.vsphere.vmware.com -o yaml

      出力例

      apiVersion: operator.openshift.io/v1
      kind: ClusterCSIDriver
      metadata:
       name: csi.vsphere.vmware.com
      spec:
       logLevel: Normal
       managementState: Managed
       observedConfig: null
       operatorLogLevel: Normal
       unsupportedConfigOverrides: null
       driverConfig:
        driverType: vSphere 1
          vSphere:
            topologyCategories: 2
            - openshift-zone
            - openshift-region

      1
      driverTypevSphere に設定されていることを確認します。
      2
      vCenter で以前に作成された openshift-zone および openshift-region カテゴリー。
  3. 次のコマンドを実行して、CSINode オブジェクトにトポロジーキーがあることを確認します。

    ~ $ oc get csinode

    出力例

    NAME                        DRIVERS     AGE
    co8-4s88d-infra-2m5vd       1           27m
    co8-4s88d-master-0          1           70m
    co8-4s88d-master-1          1           70m
    co8-4s88d-master-2          1           70m
    co8-4s88d-worker-j2hmg      1           47m
    co8-4s88d-worker-mbb46      1           47m
    co8-4s88d-worker-zlk7d      1           47m

    ~ $ oc get csinode co8-4s88d-worker-j2hmg -o yaml

    出力例

    ...
    spec:
        drivers:
        - allocatable:
            count: 59
        name: csi-vsphere.vmware.com
        nodeID: co8-4s88d-worker-j2hmg
        topologyKeys: 1
        - topology.csi.vmware.com/openshift-zone
        - topology.csi.vmware.com/openshift-region

    1
    vSphere openshift-zone および openshift-region カテゴリーからのトポロジーキー。
    注記

    CSINode オブジェクトは、更新されたトポロジー情報を受信するのに時間がかかる場合があります。ドライバーが更新された後、CSINode オブジェクトにはトポロジーキーが含まれている必要があります。

  4. 障害ドメイン全体のデータストアに割り当てるタグを作成します。

    OpenShift Container Platform が複数の障害ドメインにまたがる場合、データストアがそれらの障害ドメイン間で共有されない可能性があります。この場合、永続ボリューム (PV) のトポロジーを意識したプロビジョニングが役立ちます。

    1. vCenter で、データストアにタグを付けるためのカテゴリーを作成します。例: openshift-zonal-datastore-cat。カテゴリーが OpenShift Container Platform クラスターに参加するデータストアのタグ付けに一意に使用される場合、他のカテゴリー名を使用できます。また、作成したカテゴリーの関連付け可能なエンティティーとして StoragePodDatastore、および Folder が選択されていることを確認します。
    2. vCenter で、以前に作成したカテゴリーを使用するタグを作成します。この例では、タグ名 openshift-zonal-datastore を使用しています。
    3. 以前に作成したタグ (この例では openshift-zonal-datastore) を、動的プロビジョニングと見なされる障害ドメイン内の各データストアに割り当てます。

      注記

      カテゴリーとタグには、好きな名前を使用できます。この例で使用されている名前は、推奨事項として提供されています。定義するタグとカテゴリーが、OpenShift Container Platform クラスター内のすべてのホストと共有されるデータストアのみを一意に識別するようにします。

  5. 各障害ドメインのタグベースのデータストアを対象とするストレージポリシーを作成します。

    1. vCenter で、メインメニューから Policies and Profiles をクリックします。
    2. Policies and Profiles ページのナビゲーションペインで、VM Storage Policies をクリックします。
    3. CREATE をクリックします。
    4. ストレージポリシーの名前を入力します。
    5. ルールについては、Tag Placement rules を選択し、目的のデータストアを対象とするタグとカテゴリーを選択します (この例では、openshift-zonal-datastore タグ)。

      データストアは、ストレージ互換性テーブルにリストされています。

  6. 新しいゾーンストレージポリシーを使用する新しいストレージクラスを作成します。

    1. Storage > StorageClasses をクリックします。
    2. StorageClasses ページで、Create StorageClass をクリックします。
    3. Name に新しいストレージクラスの名前を入力します。
    4. Provisioner で、csi.vsphere.vmware.com を選択します。
    5. Additional parameters で、StoragePolicyName パラメーターの Value を、前に作成した新しいゾーンストレージポリシーの名前に設定します。
    6. Create をクリックします。

      出力例

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
        name: zoned-sc 1
      provisioner: csi.vsphere.vmware.com
      parameters:
        StoragePolicyName: zoned-storage-policy 2
      reclaimPolicy: Delete
      allowVolumeExpansion: true
      volumeBindingMode: WaitForFirstConsumer

      1
      新しいトポロジー対応ストレージクラス名。
      2
      ゾーンストレージポリシーを指定します。
      注記

      前述の YAML ファイルを編集し、コマンド oc create -f $FILE を実行して、ストレージクラスを作成することもできます。

結果

トポロジー対応ストレージクラスからの永続ボリュームクレーム (PVC) と PV の作成は完全にゾーンであり、Pod のスケジュール方法に応じて、それぞれのゾーンでデータストアを使用する必要があります。

~ $ oc get pv <pv-name> -o yaml

出力例

...
nodeAffinity:
  required:
    nodeSelectorTerms:
    - matchExpressions:
      - key: topology.csi.vmware.com/openshift-zone 1
        operator: In
        values:
        - <openshift-zone>
      -key: topology.csi.vmware.com/openshift-region 2
        operator: In
        values:
        - <openshift-region>
...
peristentVolumeclaimPolicy: Delete
storageClassName: <zoned-storage-class-name> 3
volumeMode: Filesystem
...

1 2
PV にはゾーン化されたキーがあります。
3
PV はゾーンストレージクラスを使用しています。

5.19.8. 関連情報