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

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

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

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

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

其他参考资源

2.15.1. 动态置备 VMware vSphere 卷

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

先决条件

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

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

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

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

先决条件

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

流程

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

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

2.15.1.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
    代表 PersistentVolumeClaim 的唯一名称。
    2
    PersistentVolumeClaim 的访问模式。使用 ReadWriteOnce 时,单个节点可以通过读写权限挂载这个卷。
    3
    PersistentVolumeClaim 的大小。
  2. 从文件创建 PersistentVolumeClaim:

    $ oc create -f pvc.yaml

2.15.2. 静态置备 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。使用 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
    卷的名称。PersistentVolumeClaim 或 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. 创建一个映射到您在前一步中创建的 PersistentVolume 的 PersistentVolumeClaim:创建包括 PVC 对象定义的一个 pv1.yaml 文件:

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

    $ oc create -f pvc1.yaml

2.15.2.1. 格式化 VMware vSphere 卷

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

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