5.19. VMware vSphere CSI ドライバー Operator
5.19.1. 概要
OpenShift Container Platform は、Virtual Machine Disk (VMDK) ボリュームの 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 の今後のバージョンで削除されます。
5.19.2. CSI について
ストレージベンダーはこれまで Kubernetes の一部としてストレージドライバーを提供してきました。Container Storage Interface (CSI) の実装では、サードパーティーのプロバイダーは、コア Kubernetes コードを変更せずに標準のインターフェイスを使用してストレージプラグインを提供できます。
CSI Operator は、インツリーボリュームプラグインでは不可能なボリュームスナップショットなどのストレージオプションを OpenShift Container Platform ユーザーに付与します。
5.19.3. vSphere CSI の制限
次の制限は、vSphere Container Storage Interface (CSI) Driver Operator に適用されます。
-
vSphere CSI Driver は、動的および静的なプロビジョニングをサポートします。ただし、PV 仕様で静的プロビジョニングを使用する場合は、
csi.volumeAttributes
でキーstorage.kubernetes.io/csiProvisionerIdentity
を使用しないでください。このキーは動的にプロビジョニングされた PV を示すためです。 - vSphere クライアントインターフェイスを使用してデータストア間で永続コンテナーボリュームを移行することは、OpenShift Container Platform ではサポートされていません。
5.19.4. 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.5. 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.6. VMware vSphere CSI Driver Operator の要件
vSphere CSI Driver Operator をインストールするには、次の要件を満たす必要があります。
- VMware vSphere バージョン: 7.0 Update 2 以降、または VMware Cloud Foundation 4.3 以降、8.0 Update 1 以降、または VMware Cloud Foundation 5.0 以降
- vCenter バージョン: 7.0 Update 2 以降、または VMware Cloud Foundation 4.3 以降、8.0 Update 1 以降、または VMware Cloud Foundation 5.0 以降
- ハードウェアバージョン 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.7. サードパーティー 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 をアンインストールするには、以下を実行します。
- サードパーティーの vSphere CSI Driver(VMware vSphere Container Storage プラグイン) の Deployment および Daemonset オブジェクトを削除します。
- サードパーティーの vSphere CSI Driver で以前にインストールされた configmap およびシークレットオブジェクトを削除します。
サードパーティーの 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 Operator のインストールが自動的に再開され、OpenShift Container Platform 4.11 以降へのアップグレードをブロックする可能性のある条件は自動的に削除されます。既存の vSphere CSI PV オブジェクトがある場合、それらのライフサイクルは Red Hat の vSphere CSI Driver Operator で管理されるようになります。
5.19.8. vSphere CSI トポロジーの設定
OpenShift Container Platform は、異なるゾーンおよびリージョンに OpenShift Container Platform for vSphere をデプロイする機能を提供します。これにより、複数のコンピューティングクラスターにデプロイできるため、単一障害点を回避するのに役立ちます。
OpenShift Container Platform on vSphere は、複数のデータセンターをサポートしていません。
これは、vCenter でゾーンとリージョンのカテゴリーを定義し、これらのゾーンとリージョンのカテゴリーのタグを作成して、コンピューティングクラスターなどのさまざまな障害ドメインにこれらのカテゴリーを割り当てることによって実現されます。適切なカテゴリーを作成し、vCenter オブジェクトにタグを割り当てたら、それらの障害ドメインで Pod のスケジュールを担当する仮想マシン (VM) を作成する追加のマシンセットを作成できます。
手順
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 のドキュメントを参照してください。
Container Storage Interface (CSI) ドライバーがこのトポロジーを検出できるようにするには、
clusterCSIDriver
オブジェクトの YAML ファイルのdriverConfig
セクションを編集します。-
以前に作成した
openshift-zone
およびopenshift-region
カテゴリーを指定します。 driverType
をvSphere
に設定します。~ $ 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
-
以前に作成した
次のコマンドを実行して、
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
オブジェクトにはトポロジーキーが含まれている必要があります。障害ドメイン全体のデータストアに割り当てるタグを作成します。
OpenShift Container Platform が複数の障害ドメインにまたがる場合、データストアがそれらの障害ドメイン間で共有されない可能性があります。この場合、永続ボリューム (PV) のトポロジーを意識したプロビジョニングが役立ちます。
-
vCenter で、データストアにタグを付けるためのカテゴリーを作成します。例:
openshift-zonal-datastore-cat
。カテゴリーが OpenShift Container Platform クラスターに参加するデータストアのタグ付けに一意に使用される場合、他のカテゴリー名を使用できます。また、作成したカテゴリーの関連付け可能なエンティティーとしてStoragePod
、Datastore
、およびFolder
が選択されていることを確認します。 -
vCenter で、以前に作成したカテゴリーを使用するタグを作成します。この例では、タグ名
openshift-zonal-datastore
を使用しています。 以前に作成したタグ (この例では
openshift-zonal-datastore
) を、動的プロビジョニングと見なされる障害ドメイン内の各データストアに割り当てます。注記カテゴリーとタグには、好きな名前を使用できます。この例で使用されている名前は、推奨事項として提供されています。定義するタグとカテゴリーが、OpenShift Container Platform クラスター内のすべてのホストと共有されるデータストアのみを一意に識別するようにします。
-
vCenter で、データストアにタグを付けるためのカテゴリーを作成します。例:
各障害ドメインのタグベースのデータストアを対象とするストレージポリシーを作成します。
- vCenter で、メインメニューから Policies and Profiles をクリックします。
- Policies and Profiles ページのナビゲーションペインで、VM Storage Policies をクリックします。
- CREATE をクリックします。
- ストレージポリシーの名前を入力します。
ルールについては、Tag Placement rules を選択し、目的のデータストアを対象とするタグとカテゴリーを選択します (この例では、
openshift-zonal-datastore
タグ)。データストアは、ストレージ互換性テーブルにリストされています。
新しいゾーンストレージポリシーを使用する新しいストレージクラスを作成します。
- Storage > StorageClasses をクリックします。
- StorageClasses ページで、Create StorageClass をクリックします。
- Name に新しいストレージクラスの名前を入力します。
- Provisioner で、csi.vsphere.vmware.com を選択します。
- Additional parameters で、StoragePolicyName パラメーターの Value を、前に作成した新しいゾーンストレージポリシーの名前に設定します。
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
注記前述の 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 ...