5.22. VMware vSphere CSI Driver Operator
5.22.1. 概述
OpenShift Container Platform 可以使用 Container Storage Interface(CSI)VMDK(VMDK)卷的 VMware vSphere 驱动程序来置备持久性卷(PV)。
在使用 CSI Operator 和驱动程序时,建议先熟悉 持久性存储和配置 CSI 卷。
要创建挂载到 vSphere 存储资产中的 CSI 置备持久性卷(PV),OpenShift Container Platform 在 openshift-cluster-csi-drivers
命名空间中默认安装 vSphere CSI Driver Operator 和 vSphere CSI 驱动程序。
-
vSphere CSI Driver Operator :Operator 提供了一个称为
thin-csi
的存储类,您可以使用它来创建持久性卷声明(PVC)。vSphere CSI Driver Operator 支持动态卷置备,允许按需创建存储卷,使集群管理员无需预置备存储。如果需要,您可以禁用此默认存储类 (请参阅管理默认存储类)。 - vSphere CSI driver:这个驱动程序可让您创建并挂载 vSphere PV。在 OpenShift Container Platform 4.14 中,驱动程序版本为 3.0.2。vSphere CSI 驱动程序支持底层红帽核心操作系统发行版本支持的所有文件系统,包括 XFS 和 Ext4。有关支持的文件系统的更多信息,请参阅 可用文件系统概述。
OpenShift Container Platform 默认使用 CSI 插件来置备 vSphere 存储。
vSphere CSI 驱动程序支持动态和静态置备。当在 PV 规格中使用静态置备时,请不要在 csi.volumeAttributes
中使用键 storage.kubernetes.io/csiProvisionerIdentity
,因为这个键代表动态置备的 PV。
5.22.2. 关于 CSI
在过去,存储厂商一般会把存储驱动作为 Kubernetes 的一个部分提供。随着容器存储接口 (CSI) 的实现,第三方供应商可以使用标准接口来提供存储插件,而无需更改核心 Kubernetes 代码。
CSI Operators 为 OpenShift Container Platform 用户提供了存储选项,如卷快照,它无法通过 in-tree 卷插件实现。
5.22.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.22.4. ReadWriteMany vSphere 卷支持
如果底层 vSphere 环境支持 vSAN 文件服务,则 OpenShift Container Platform 安装的 vSphere Container Storage Interface (CSI) Driver Operator 支持 provisioning of 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.22.5. VMware vSphere CSI Driver Operator 要求
要安装 vSphere CSI Driver Operator,必须满足以下要求:
- VMware vSphere 版本 7.0 更新 2 或更高版本
- vCenter 7.0 更新 2 或更高版本
- 硬件版本 15 或更高版本的虚拟机
- 集群中还没有安装第三方 vSphere CSI 驱动程序
如果集群中存在第三方 vSphere CSI 驱动程序,OpenShift Container Platform 不会覆盖它。存在第三方 vSphere CSI 驱动程序可防止 OpenShift Container Platform 更新到 OpenShift Container Platform 4.13 或更高版本。
只有在安装清单中使用 platform: vsphere
部署的集群中才支持 VMware vSphere CSI Driver Operator。
要删除第三方 CSI 驱动程序,请参阅删除第三方 vSphere CSI 驱动程序。
5.22.6. 删除第三方 vSphere CSI Driver Operator
OpenShift Container Platform 4.10 及更新的版本包括红帽支持的 vSphere Container Storage Interface (CSI) Operator Driver 的内置版本。如果您安装了由社区或其他供应商提供的 vSphere CSI 驱动程序,则可能会对集群禁用对下一个 OpenShift Container Platform 主版本(如 4.13 或更高版本)的更新。
OpenShift Container Platform 4.12 及更新的版本仍被完全支持,且对 4.12 的 z-stream 版本的更新(如 4.12.z)不被支持,但您必须在升级到下一个 OpenShift Container Platform 主版本前删除第三方 vSphere CSI Driver 来修正这个状态。删除第三方 vSphere CSI 驱动程序不需要删除关联的持久性卷(PV)对象,也不会发生数据丢失。
这些说明可能不完整,因此请参阅厂商或社区供应商卸载指南,以确保删除驱动程序和组件。
卸载第三方 vSphere CSI 驱动程序:
- 删除第三方 vSphere CSI 驱动程序(VMware vSphere Container Storage 插件)部署和 Daemonset 对象。
- 删除之前使用第三方 vSphere CSI 驱动程序安装的 configmap 和 secret 对象。
删除第三方 vSphere CSI 驱动程序
CSIDriver
对象:~ $ oc delete CSIDriver csi.vsphere.vmware.com
csidriver.storage.k8s.io "csi.vsphere.vmware.com" deleted
从 OpenShift Container Platform 集群中删除了第三方 vSphere CSI 驱动程序后,Red Hat 的 vSphere CSI Driver Operator 安装会自动恢复,以及阻止升级到 OpenShift Container Platform 4.11 或更高版本的任何条件。如果您已有 vSphere CSI PV 对象,它们的生命周期现在由红帽的 vSphere CSI Driver Operator 管理。
5.22.7. vSphere 持久性磁盘加密
您可以在 vSphere 上运行的 OpenShift Container Platform 上对虚拟机 (VM) 和动态置备的持久性卷 (PV) 进行加密。
OpenShift Container Platform 不支持 RWX 加密 PV。您无法从使用加密存储策略的存储类中请求 RWX PV。
您必须在加密 PV 前加密虚拟机,您可以在安装过程中或安装后进行这些 PV。
有关加密虚拟机的详情,请参考:
加密虚拟机后,您可以使用 vSphere Container Storage Interface (CSI) 驱动程序配置支持动态加密卷置备的存储类。这可以通过两种方式之一完成:
5.22.7.1. 使用数据存储 URL
流程
使用数据存储 URL 加密:
在支持加密的数据存储中找到默认存储策略的名称。
这与用于加密虚拟机的策略相同。
创建使用此存储策略的存储类:
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: encryption provisioner: csi.vsphere.vmware.com parameters: storagePolicyName: <storage-policy-name> 1 datastoreurl: "ds:///vmfs/volumes/vsan:522e875627d-b090c96b526bb79c/"
- 1
- 支持加密的数据存储中的默认存储策略名称
5.22.7.2. 使用基于标签的放置
流程
使用基于标签的放置进行加密:
- 在 vCenter 中,创建一个用于标记数据存储的类别,该类别将可供此存储类使用。此外,确保 StoragePod(Datastore clusters)、Datastore, and Folder 被选为创建类别的可关联实体。
- 在 vCenter 中,创建使用之前创建的类别的标签。
- 将之前创建的标签分配给可用于存储类的每个数据存储。确保数据存储与参与 OpenShift Container Platform 集群的主机共享。
- 在 vCenter 中,从主菜单中点 Policies and Profiles。
- 在 Policies and Profiles 页面中,在导航窗格中点 VM Storage Policies。
- 点 CREATE。
- 输入存储策略的名称。
- 选择 Enable host based rules 和 Enable tag based placement rules。
在 Next 选项卡中:
- 选择 Encryption 和 Default Encryption Properties。
- 选择之前创建的标签类别,然后选择 tag selected。验证策略是否选择匹配的数据存储。
- 创建存储策略。
创建使用存储策略的存储类:
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: csi-encrypted provisioner: csi.vsphere.vmware.com reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer parameters: storagePolicyName: <storage-policy-name> 1
- 1
- 为加密创建的存储策略的名称
5.22.8. vSphere CSI 拓扑概述
OpenShift Container Platform 提供了将 OpenShift Container Platform for vSphere 部署到不同的区域和区域的功能,允许您在多个计算集群和数据中心上部署,这有助于避免单点故障。
这可以通过在 vCenter 中定义区域和区域类别来实现,然后将这些类别分配给不同的故障域,如计算集群,方法是为这些区域和区域类别创建标签。创建适当的类别并给 vCenter 对象分配了标签后,您可以创建额外的机器集来创建负责在这些故障域中调度 pod 的虚拟机(VM)。
以下示例定义了两个区域和两个区的故障域:
Compute 集群 | 故障域 | 描述 |
---|---|---|
Compute 集群: ocp1, Datacenter: Atlanta | openshift-region: us-east-1 (tag), openshift-zone: us-east-1a (tag) | 这会在区域 us-east-1 中定义一个带有区域 us-east-1a 的故障域。 |
计算 cluster: ocp2, Datacenter: Atlanta | openshift-region: us-east-1 (tag), openshift-zone: us-east-1b (tag) | 这会在名为 us-east-1b 的同一区域中定义不同的故障域。 |
5.22.8.1. 在安装过程中创建 vSphere 存储拓扑
5.22.8.1.1. 流程
- 在安装过程中指定拓扑。请参阅为 VMware vCenter 配置区域和区域部分。
不需要额外的操作,且 OpenShift Container Platform 创建的默认存储类是拓扑感知的,并允许在不同故障域中置备卷。
5.22.8.2. 安装后创建 vSphere 存储拓扑
5.22.8.2.1. 流程
在 VMware vCenter vSphere 客户端 GUI 中,定义适当的区域和区域校准和标签。
虽然 vSphere 允许您使用任意名称创建类别,但 OpenShift Container Platform 强烈建议您使用
openshift-region
和openshift-zone
名称来定义拓扑类别。有关 vSphere 类别和标签的更多信息,请参阅 VMware vSphere 文档。
- 在 OpenShift Container Platform 中,创建故障域。请参阅在 vSphere 上为集群指定多个区域和区部分。
创建标签以在故障域间分配给数据存储:
当 OpenShift Container Platform 跨越多个故障域时,可能无法在这些故障域间共享数据存储,即持久性卷 (PV) 的拓扑感知置备会很有用。
-
在 vCenter 中,创建一个类别来标记数据存储。例如,
openshift-zonal-datastore-cat
。您可以使用任何其他类别名称,只要类别唯一用于标记参与 OpenShift Container Platform 集群的数据存储。此外,确保StoragePod
、Datastore
, andFolder
被选为创建类别的可关联实体。 -
在 vCenter 中,创建使用之前创建的类别的标签。本例使用标签名称
openshift-zonal-datastore
。 将之前创建的标签(本例中为
openshift-zonal-datastore
)分配给故障域中的每个数据存储,并被视为动态置备。注意您可以使用您想用于数据存储类别和标签的任何名称。本例中使用的名称作为建议提供。确保定义仅唯一标识与 OpenShift Container Platform 集群中所有主机共享的数据存储的标签和类别。
-
在 vCenter 中,创建一个类别来标记数据存储。例如,
根据需要,创建一个存储策略,该策略以每个故障域中基于标签的数据存储为目标:
- 在 vCenter 中,从主菜单中点 Policies and Profiles。
- 在 Policies and Profiles 页面中,在导航窗格中点 VM Storage Policies。
- 点 CREATE。
- 输入存储策略的名称。
对于规则,选择 Tag 放置规则并选择以所需数据存储为目标的标签和类别(本例中为
openshift-zonal-datastore
标签)。数据存储列在存储兼容性表中。
创建新使用新区存储策略的存储类:
- 点 Storage > StorageClasses。
- 在 StorageClasses 页面中,点 Create StorageClass。
- 在 Name 中输入新存储类的名称。
- 在 Provisioner 下,选择 csi.vsphere.vmware.com。
- 在 Additional parameter 下,对于 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
命令来创建存储类。
5.22.8.3. 在没有 infra 拓扑的情况下创建 vSphere 存储拓扑
OpenShift Container Platform 建议使用基础架构对象在拓扑了解设置中指定故障域。在 infrastructure 对象中指定故障域,并在 ClusterCSIDriver
对象中指定 topology-categories 是一个不受支持的操作。
5.22.8.3.1. 流程
在 VMware vCenter vSphere 客户端 GUI 中,定义适当的区域和区域校准和标签。
虽然 vSphere 允许您使用任意名称创建类别,但 OpenShift Container Platform 强烈建议您使用
openshift-region
和openshift-zone
名称来定义拓扑。有关 vSphere 类别和标签的更多信息,请参阅 VMware vSphere 文档。
要允许容器存储接口(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
, andFolder
被选为创建类别的可关联实体。 -
在 vCenter 中,创建使用之前创建的类别的标签。本例使用标签名称
openshift-zonal-datastore
。 将之前创建的标签(本例中为
openshift-zonal-datastore
)分配给故障域中的每个数据存储,并被视为动态置备。注意您可以使用您想要的任何名称进行类别和标签。本例中使用的名称作为建议提供。确保定义仅唯一标识与 OpenShift Container Platform 集群中所有主机共享的数据存储的标签和类别。
-
在 vCenter 中,创建一个类别来标记数据存储。例如,
创建一个存储策略,该策略以每个故障域中基于标签的数据存储为目标:
- 在 vCenter 中,从主菜单中点 Policies and Profiles。
- 在 Policies and Profiles 页面中,在导航窗格中点 VM Storage Policies。
- 点 CREATE。
- 输入存储策略的名称。
对于规则,选择 Tag 放置规则并选择以所需数据存储为目标的标签和类别(本例中为
openshift-zonal-datastore
标签)。数据存储列在存储兼容性表中。
创建新使用新区存储策略的存储类:
- 点 Storage > StorageClasses。
- 在 StorageClasses 页面中,点 Create StorageClass。
- 在 Name 中输入新存储类的名称。
- 在 Provisioner 下,选择 csi.vsphere.vmware.com。
- 在 Additional parameter 下,对于 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
命令来创建存储类。
其他资源
5.22.8.4. 结果
从拓扑创建持久性卷声明(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 ...