本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

VMware vSphere 存储

为了为有状态工作负载提供 VMware vSphere 存储,我们建议创建一个 vSphereVolume 存储类。当工作负载通过 PersistentVolumeClaim 请求卷时,此操作会动态配置 vSphere 存储。

为了在 vSphere 中动态配置存储,必须启用 vSphere 提供程序。有关更多信息,请参见以下页面:Out-of-tree vSpherein-tree vSphere

先决条件

为了在使用 RKE2 创建的集群中配置 vSphere 卷,必须在 集群选项 中显式启用 vSphere 云提供程序

创建 StorageClass

以下步骤也可以使用 kubectl 命令行工具执行。有关详细信息,请参见 Kubernetes 持久卷文档

  1. 单击 ☰ > 集群管理

  2. 选择您要提供 vSphere 存储的集群,然后单击 探索

  3. 在左侧导航栏中,选择 存储  存储类

  4. 单击*创建*。

  5. 为存储类输入一个 名称

  6. 提供者 下,选择 VMWare vSphere 卷

    vsphere storage class
  7. 可选地,在 参数 下为此存储类指定其他属性。有关详细信息,请参阅 vSphere 存储文档

  8. 单击*创建*。

使用 VMware vSphere 卷创建工作负载

  1. 在左侧导航栏中,点击 工作负载

  2. 单击*创建*。

  3. 点击 StatefulSet

  4. 卷声明模板 标签中,点击 添加声明模板

  5. 输入持久卷名称。

  6. 在存储类字段中,选择您创建的 vSphere 存储类。

  7. 输入卷所需的 容量。然后点击 定义

  8. 安装点 字段中分配一个路径。这是卷将在容器文件系统中挂载的完整路径,例如 /persistent

  9. 单击*创建*。

验证卷的持久性

  1. 在左侧导航栏中,点击 工作负载  Pods

  2. 转到您刚创建的工作负载,点击 ⋮ > 执行 Shell

  3. 注意卷挂载到的根目录(在这种情况下是 /persistent)。

  4. 通过执行命令 touch /<volumeMountPoint>/data.txt 在卷中创建一个文件。

  5. 关闭外壳窗口。

  6. 点击工作负载的名称以显示详细信息。

  7. 点击 ⋮ > 删除

  8. 观察到 pod 被删除。然后调度一个新的 pod 来替换它,以便工作负载保持其配置的单个有状态 pod 的规模。

  9. 一旦替换 pod 正在运行,点击 执行 Shell

  10. 通过输入 ls -l /<volumeMountPoint> 检查挂载卷的目录内容。请注意,您之前创建的文件仍然存在。

    workload-persistent-data

为什么要使用 StatefulSets 而不是 Deployments

对于消耗 vSphere 存储的工作负载,您应该始终使用 StatefulSets,因为此资源类型旨在解决 VMDK 块存储的缺陷。

由于 vSphere 卷是由 VMDK 块存储支持的,因此它们仅支持 访问模式ReadWriteOnce。此设置限制卷只能一次挂载到单个 pod,除非所有消耗该卷的 pod 都位于同一节点上。这种行为使得如果消耗 vSphere 卷,部署资源在扩展到单个副本以上时变得不可用。

即使使用仅有一个副本的部署资源,在更新部署时也可能导致死锁情况。如果更新的 pod 被调度到与现有 pod 不同的节点上,它将无法启动,因为 VMDK 仍然附加在另一个节点上。