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.15 中,驱动程序版本为 3.0.2。vSphere CSI 驱动程序支持底层红帽核心操作系统发行版本支持的所有文件系统,包括 XFS 和 Ext4。有关支持的文件系统的更多信息,请参阅 可用文件系统概述
注意

对于新安装,OpenShift Container Platform 4.13 及更新的版本为 vSphere in-tree 卷插件提供自动迁移到对应的 CSI 驱动程序。更新至 OpenShift Container Platform 4.15 及更新的版本还提供自动迁移。有关更新和迁移的更多信息,请参阅 CSI 自动迁移

CSI 自动迁移应该可以无缝进行。迁移不会改变您使用所有现有 API 对象的方式,如持久性卷、持久性卷声明和存储类。

5.22.2. 关于 CSI

在过去,存储厂商一般会把存储驱动作为 Kubernetes 的一个部分提供。随着容器存储接口 (CSI) 的实现,第三方供应商可以使用标准接口来提供存储插件,而无需更改核心 Kubernetes 代码。

CSI Operators 为 OpenShift Container Platform 用户提供了存储选项,如卷快照,它无法通过 in-tree 卷插件实现。

5.22.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.22.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.22.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.22.6. VMware vSphere CSI Driver Operator 要求

要安装 vSphere Container Storage Interface (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。

您可以为 Container Storage Interface (CSI) 驱动程序、vSphere CSI Driver Operator 和 vSphere Problem Detector Operator 创建自定义角色。自定义角色可以包含为每个 vSphere 对象分配最小权限集的权限集。这意味着 CSI 驱动程序、vSphere CSI Driver Operator 和 vSphere Problem Detector Operator 可以建立与这些对象的基本交互。

重要

在 vCenter 中安装 OpenShift Container Platform 集群会根据完整权限列表进行测试,如 "Required vCenter account privileges" 部分所述。通过遵循完整的特权列表,您可以减少创建具有一组受限权限的自定义角色时可能会出现意外和不支持的行为的可能性。

要删除第三方 CSI 驱动程序,请参阅删除第三方 vSphere CSI 驱动程序

5.22.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 驱动程序:

  1. 删除第三方 vSphere CSI 驱动程序(VMware vSphere Container Storage 插件)部署和 Daemonset 对象。
  2. 删除之前使用第三方 vSphere CSI 驱动程序安装的 configmap 和 secret 对象。
  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 驱动程序后,Red Hat 的 vSphere CSI Driver Operator 安装会自动恢复,以及阻止升级到 OpenShift Container Platform 4.11 或更高版本的任何条件。如果您已有 vSphere CSI PV 对象,它们的生命周期现在由红帽的 vSphere CSI Driver Operator 管理。

5.22.8. vSphere 持久性磁盘加密

您可以在 vSphere 上运行的 OpenShift Container Platform 上对虚拟机 (VM) 和动态置备的持久性卷 (PV) 进行加密。

注意

OpenShift Container Platform 不支持 RWX 加密 PV。您无法从使用加密存储策略的存储类中请求 RWX PV。

您必须先加密虚拟机,然后才能加密 PV,您可以在安装过程中或安装后操作。

有关加密虚拟机的详情,请参考:

加密虚拟机后,您可以使用 vSphere Container Storage Interface (CSI) 驱动程序配置支持动态加密卷置备的存储类。这可以通过两种方式之一完成:

  • 数据存储 URL :此方法不灵活,它会强制您使用单个数据存储。它还不支持拓扑感知置备。
  • 基于标签的放置:加密置备的卷,并使用基于标签的放置来针对特定的数据存储为目标。

5.22.8.1. 使用数据存储 URL

流程

使用数据存储 URL 加密:

  1. 在支持加密的数据存储中找到默认存储策略的名称。

    这与用于加密虚拟机的策略相同。

  2. 创建使用此存储策略的存储类:

    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.8.2. 使用基于标签的放置

流程

使用基于标签的放置进行加密:

  1. 在 vCenter 中,创建一个用于标记数据存储的类别,该类别将可供此存储类使用。此外,确保 StoragePod(Datastore clusters)Datastore, and Folder 被选为创建类别的可关联实体。
  2. 在 vCenter 中,创建使用之前创建的类别的标签。
  3. 将之前创建的标签分配给可用于存储类的每个数据存储。确保数据存储与参与 OpenShift Container Platform 集群的主机共享。
  4. 在 vCenter 中,从主菜单中点 Policies and Profiles
  5. Policies and Profiles 页面中,在导航窗格中点 VM Storage Policies
  6. CREATE
  7. 输入存储策略的名称。
  8. 选择 Enable host based rulesEnable tag based placement rules
  9. Next 选项卡中:

    1. 选择 EncryptionDefault Encryption Properties
    2. 选择之前创建的标签类别,然后选择 tag selected。验证策略是否选择匹配的数据存储。
  10. 创建存储策略。
  11. 创建使用存储策略的存储类:

    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.9. vSphere CSI 拓扑概述

OpenShift Container Platform 提供了将 OpenShift Container Platform for vSphere 部署到不同的区域和区域的功能,允许您在多个计算集群和数据中心上部署,这有助于避免单点故障。

这可以通过在 vCenter 中定义区域和区域类别来实现,然后将这些类别分配给不同的故障域,如计算集群,方法是为这些区域和区域类别创建标签。创建适当的类别并给 vCenter 对象分配了标签后,您可以创建额外的机器集来创建负责在这些故障域中调度 pod 的虚拟机(VM)。

以下示例定义了两个区域和两个区的故障域:

表 5.6. 带有一个区域和两个区域的 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 的同一区域中定义不同的故障域。

5.22.9.1. 在安装过程中创建 vSphere 存储拓扑

5.22.9.1.1. 流程
  • 在安装过程中指定拓扑。请参阅为 VMware vCenter 配置区域和区域部分。

不需要额外的操作,且 OpenShift Container Platform 创建的默认存储类是拓扑感知的,并允许在不同故障域中置备卷。

5.22.9.2. 安装后创建 vSphere 存储拓扑

5.22.9.2.1. 流程
  1. 在 VMware vCenter vSphere 客户端 GUI 中,定义适当的区域和区域校准和标签。

    虽然 vSphere 允许您使用任意名称创建类别,但 OpenShift Container Platform 强烈建议您使用 openshift-regionopenshift-zone 名称来定义拓扑类别。

    有关 vSphere 类别和标签的更多信息,请参阅 VMware vSphere 文档。

  2. 在 OpenShift Container Platform 中,创建故障域。请参阅在 vSphere 上为集群指定多个区域和区部分。
  3. 创建标签以在故障域间分配给数据存储:

    当 OpenShift Container Platform 跨越多个故障域时,可能无法在这些故障域间共享数据存储,即持久性卷 (PV) 的拓扑感知置备会很有用。

    1. 在 vCenter 中,创建一个类别来标记数据存储。例如,openshift-zonal-datastore-cat。您可以使用任何其他类别名称,只要类别唯一用于标记参与 OpenShift Container Platform 集群的数据存储。此外,确保 StoragePodDatastore, and Folder 被选为创建类别的可关联实体。
    2. 在 vCenter 中,创建使用之前创建的类别的标签。本例使用标签名称 openshift-zonal-datastore
    3. 将之前创建的标签(本例中为 openshift-zonal-datastore)分配给故障域中的每个数据存储,并被视为动态置备。

      注意

      您可以使用您想用于数据存储类别和标签的任何名称。本例中使用的名称作为建议提供。确保定义仅唯一标识与 OpenShift Container Platform 集群中所有主机共享的数据存储的标签和类别。

  4. 根据需要,创建一个存储策略,该策略以每个故障域中基于标签的数据存储为目标:

    1. 在 vCenter 中,从主菜单中点 Policies and Profiles
    2. Policies and Profiles 页面中,在导航窗格中点 VM Storage Policies
    3. CREATE
    4. 输入存储策略的名称。
    5. 对于规则,选择 Tag 放置规则并选择以所需数据存储为目标的标签和类别(本例中为 openshift-zonal-datastore 标签)。

      数据存储列在存储兼容性表中。

  5. 创建新使用新区存储策略的存储类:

    1. Storage > StorageClasses
    2. StorageClasses 页面中,点 Create StorageClass
    3. Name 中输入新存储类的名称。
    4. Provisioner 下,选择 csi.vsphere.vmware.com
    5. Additional parameter 下,对于 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 命令来创建存储类。

5.22.9.3. 在没有 infra 拓扑的情况下创建 vSphere 存储拓扑

注意

OpenShift Container Platform 建议使用基础架构对象在拓扑了解设置中指定故障域。在 infrastructure 对象中指定故障域,并在 ClusterCSIDriver 对象中指定 topology-categories 是一个不受支持的操作。

5.22.9.3.1. 流程
  1. 在 VMware vCenter vSphere 客户端 GUI 中,定义适当的区域和区域校准和标签。

    虽然 vSphere 允许您使用任意名称创建类别,但 OpenShift Container Platform 强烈建议您使用 openshift-regionopenshift-zone 名称来定义拓扑。

    有关 vSphere 类别和标签的更多信息,请参阅 VMware vSphere 文档。

  2. 要允许容器存储接口(CSI)驱动程序检测到这个拓扑,请编辑 clusterCSIDriver 对象 YAML 文件 driverConfig 部分:

    • 指定之前创建的 openshift-zoneopenshift-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

      1
      确保 driverType 设置为 vSphere
      2
      在 vCenter 前面创建的 openshift-zoneopenshift-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-zoneopenshift-region 目录中的拓扑键。
    注意

    CSINode 对象可能需要一些时间才能接收更新的拓扑信息。更新驱动程序后,CSI Node 对象应具有拓扑键。

  4. 创建标签以在故障域间分配给数据存储:

    当 OpenShift Container Platform 跨越多个故障域时,可能无法在这些故障域间共享数据存储,即持久性卷 (PV) 的拓扑感知置备会很有用。

    1. 在 vCenter 中,创建一个类别来标记数据存储。例如,openshift-zonal-datastore-cat。您可以使用任何其他类别名称,只要类别唯一用于标记参与 OpenShift Container Platform 集群的数据存储。此外,确保 StoragePodDatastore, and 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 放置规则并选择以所需数据存储为目标的标签和类别(本例中为 openshift-zonal-datastore 标签)。

      数据存储列在存储兼容性表中。

  6. 创建新使用新区存储策略的存储类:

    1. Storage > StorageClasses
    2. StorageClasses 页面中,点 Create StorageClass
    3. Name 中输入新存储类的名称。
    4. Provisioner 下,选择 csi.vsphere.vmware.com
    5. Additional parameter 下,对于 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 命令来创建存储类。

5.22.9.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
...

1 2
PV 具有区域的密钥。
3
PV 使用区域存储类。

5.22.10. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.