5.19. VMware vSphere CSI Driver Operator
5.19.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.12.21 及更高版本中,驱动程序版本为 2.7.1。在早于 4.12.21 的 OpenShift Container Platform 4.12 版本中,这个版本为 2.6.1。vSphere CSI 驱动程序支持底层红帽核心操作系统发行版本支持的所有文件系统,包括 XFS 和 Ext4。有关支持的文件系统的更多信息,请参阅可用文件系统概述。
OpenShift Container Platform 默认使用 in-tree (非 CSI)插件来置备 vSphere 存储。
在以后的 OpenShift Container Platform 版本中,计划使用现有树内插件置备的卷迁移到对应的 CSI 驱动程序。CSI 自动迁移应该可以无缝进行。迁移不会改变您使用所有现有 API 对象的方式,如持久性卷、持久性卷声明和存储类。有关迁移的更多信息,请参阅 CSI 自动迁移。
完全迁移后,未来的 OpenShift Container Platform 版本将最终删除树内插件。
5.19.2. 关于 CSI
在过去,存储厂商一般会把存储驱动作为 Kubernetes 的一个部分提供。随着容器存储接口 (CSI) 的实现,第三方供应商可以使用标准接口来提供存储插件,而无需更改核心 Kubernetes 代码。
CSI Operators 为 OpenShift Container Platform 用户提供了存储选项,如卷快照,它无法通过 in-tree 卷插件实现。
5.19.3. vSphere CSI 限制
以下限制适用于 vSphere Container Storage Interface (CSI) Driver Operator:
-
vSphere CSI 驱动程序支持动态和静态置备。但是,当在 PV 规格中使用静态置备时,请不要在
csi.volumeAttributes
中使用键storage.kubernetes.io/csiProvisionerIdentity
,因为这个键代表动态置备的 PV。 - OpenShift Container Platform 不支持使用 vSphere 客户端接口在数据存储之间迁移持久性卷。
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 支持 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.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 或更高版本。
只有在安装清单中使用 platform: vsphere
部署的集群中才支持 VMware vSphere CSI Driver Operator。
要删除第三方 CSI 驱动程序,请参阅删除第三方 vSphere CSI 驱动程序。
5.19.7. 删除第三方 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.19.8. 配置 vSphere CSI 拓扑
OpenShift Container Platform 提供了将 OpenShift Container Platform for vSphere 部署到不同的区域和区域,允许您在多个计算集群中部署,这有助于避免单点故障。
vSphere 上的 OpenShift Container Platform 不支持多个供应商。
这可以通过在 vCenter 中定义区域和区域类别来实现,然后将这些类别分配给不同的故障域,如计算集群,方法是为这些区域和区域类别创建标签。创建适当的类别并给 vCenter 对象分配了标签后,您可以创建额外的机器集来创建负责在这些故障域中调度 pod 的虚拟机(VM)。
流程
在 VMware vCenter vSphere 客户端 GUI 中,定义适当的区域和区域校准和标签。
虽然 vSphere 允许您使用任意名称创建类别,但 OpenShift Container Platform 强烈建议您使用
openshift-region
和openshift-zone
名称来定义拓扑。以下示例定义了两个区域和两个区的故障域:
表 5.4. 带有一个区域的 vSphere 拓扑和两个区 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 的同一区域中定义不同的故障域。
有关 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
命令来创建存储类。
结果
从拓扑创建持久性卷声明(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 ...
其他资源