4.13. 使用 VMware vSphere 卷的持久性存储

OpenShift Container Platform 允许使用 VMware vSphere 的虚拟机磁盘 (VMDK) 卷。您可以使用 VMware vSphere 为 OpenShift Container Platform 集群置备持久性存储。我们假设您对 Kubernetes 和 VMware vSphere 已有一定了解。

VMware vSphere 卷可以动态置备。OpenShift Container Platform 在 vSphere 中创建磁盘,并将此磁盘附加到正确的镜像。

注意

OpenShift Container Platform 将新卷置备为独立持久性卷,它们可以在集群中的任何节点上自由附加和分离卷。因此,您无法备份使用快照的卷,或者从快照中恢复卷。如需更多信息 ,请参阅快照限制

Kubernetes 持久性卷框架允许管理员提供带有持久性存储的集群,并使用户可以在不了解底层存储架构的情况下请求这些资源。

持久性卷不与某个特定项目或命名空间相关联,它们可以在 OpenShift Container Platform 集群间共享。持久性卷声明是针对某个项目或者命名空间的,相应的用户可请求它。

重要

OpenShift Container Platform 默认使用 in-tree (非 CSI)插件来置备 vSphere 存储。

在以后的 OpenShift Container Platform 版本中,计划使用现有树内插件置备的卷迁移到对应的 CSI 驱动程序。CSI 自动迁移应该可以无缝进行。迁移不会改变您使用所有现有 API 对象的方式,如持久性卷、持久性卷声明和存储类。有关迁移的更多信息,请参阅 CSI 自动迁移

完全迁移后,未来的 OpenShift Container Platform 版本将最终删除树内插件。

其他资源

4.13.1. 动态置备 VMware vSphere 卷

动态置备 VMware vSphere 卷是推荐的方法。

4.13.2. 先决条件

  • 在一个满足您使用的组件要求的 VMware vSphere 版本上安装了 OpenShift Container Platform 集群。有关 vSphere 版本支持的信息,请参阅在 vSphere 上安装集群

您可以通过以下任一流程使用默认的存储类动态置备这些卷。

4.13.2.1. 使用 UI 动态置备 VMware vSphere 卷

OpenShift Container Platform 安装了一个默认的存储类,其名为 thin,使用 thin 磁盘格式置备卷。

先决条件

  • 当存储可以被挂载为 OpenShift Container Platform 中的卷之前,它必须已存在于底层的存储系统中。

流程

  1. 在 OpenShift Container Platform 控制台中,点击 StoragePersistent Volume Claims
  2. 在持久性卷声明概述页中,点 Create Persistent Volume Claim
  3. 在接下来的页面中定义所需选项。

    1. 选择 thin 存储类。
    2. 输入存储声明的唯一名称。
    3. 选择访问模式来决定所创建存储声明的读写访问权限。
    4. 定义存储声明的大小。
  4. 点击 Create 创建持久性卷声明,并生成一个持久性卷。

4.13.2.2. 使用 CLI 动态置备 VMware vSphere 卷

OpenShift Container Platform 安装了一个默认的 StorageClass,其名为 thin,使用 thin 磁盘格式置备卷。

先决条件

  • 当存储可以被挂载为 OpenShift Container Platform 中的卷之前,它必须已存在于底层的存储系统中。

流程 (CLI)

  1. 您可以通过创建一个包含以下内容的 pvc.yaml 文件来定义 VMware vSphere PersistentVolumeClaim:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc 1
    spec:
      accessModes:
      - ReadWriteOnce 2
      resources:
        requests:
          storage: 1Gi 3
    1
    代表持久性卷声明的唯一名称。
    2
    持久性卷声明的访问模式。使用 ReadWriteOnce 时,单个节点可以通过读写权限挂载该卷。
    3
    持久性卷声明的大小。
  2. 从文件创建 PersistentVolumeClaim 对象:

    $ oc create -f pvc.yaml

4.13.3. 静态置备 VMware vSphere 卷

要静态置备 VMware vSphere 卷,您必须创建虚拟机磁盘供持久性卷框架引用。

先决条件

  • 当存储可以被挂载为 OpenShift Container Platform 中的卷之前,它必须已存在于底层的存储系统中。

流程

  1. 创建虚拟机磁盘。在静态置备 VMware vSphere 卷前,必须手动创建虚拟机磁盘 (VMDK)。可使用以下任一方法:

    • 使用 vmkfstools 创建。通过 Secure Shel (SSH) 访问 ESX,然后使用以下命令创建 VMDK 卷:

      $ vmkfstools -c <size> /vmfs/volumes/<datastore-name>/volumes/<disk-name>.vmdk
    • 使用 vmware-diskmanager 创建:

      $ shell vmware-vdiskmanager -c -t 0 -s <size> -a lsilogic <disk-name>.vmdk
  2. 创建引用 VMDK 的持久性卷。创建包含 PersistentVolume 对象定义的 pv1.yaml 文件:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv1 1
    spec:
      capacity:
        storage: 1Gi 2
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      vsphereVolume: 3
        volumePath: "[datastore1] volumes/myDisk"  4
        fsType: ext4  5
    1
    卷的名称。持久性卷声明或 pod 识别它的名称。
    2
    为这个卷分配的存储量。
    3
    使用的卷类型,vsphereVolume 表示 vSphere 卷。此标签用于将 vSphere VMDK 卷挂载到 Pod 中。卸载卷时会保留卷内容。卷类型支持 VMFS 和 VSAN 数据存储。
    4
    要使用的现有 VMDK 卷。如果使用 vmkfstools,在卷定义中数据存储名称必须放在方括号 [] 内,如前面所示。
    5
    要挂载的文件系统类型。例如: ext4、xfs 或者其他文件系统。
    重要

    在格式化并置备卷后更改 fsType 参数的值可能会导致数据丢失和 pod 故障。

  3. 从文件创建 PersistentVolume 对象:

    $ oc create -f pv1.yaml
  4. 创建一个映射到您在上一步中创建的持久性卷声明。创建包含 PersistentVolumeClaim 对象定义的 pvc1.yaml 文件:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc1 1
    spec:
      accessModes:
        - ReadWriteOnce 2
      resources:
       requests:
         storage: "1Gi" 3
      volumeName: pv1 4
    1
    代表持久性卷声明的唯一名称。
    2
    持久性卷声明的访问模式。使用 ReadWriteOnce 时,单个节点可以通过读写权限挂载这个卷。
    3
    持久性卷声明的大小。
    4
    现有持久性卷的名称。
  5. 从文件创建 PersistentVolumeClaim 对象:

    $ oc create -f pvc1.yaml

4.13.3.1. 格式化 VMware vSphere 卷

在 OpenShift Container Platform 挂载卷并将其传递给容器之前,它会检查卷是否包含由 PersistentVolume(PV)定义中 fsType 参数值指定的文件系统。如果没有使用文件系统格式化设备,该设备中的所有数据都会被清除,设备也会自动格式化为指定的文件系统。

因为 OpenShift Container Platform 在首次使用卷前会进行格式化,所以您可以使用未格式化的 vSphere 卷作为 PV。