本页面介绍 GKE on VMware 存储概念。
摘要
GKE on VMware 通过 VMware vSphere 存储、Kubernetes 树内卷插件(或“驱动程序”)和容器存储接口 (CSI) 驱动程序与外部块或文件存储系统集成。
GKE on VMware 使用默认 Kubernetes StorageClass 来为 vSphere 数据存储区上的有状态工作负载预配存储空间。您还可以使用 StorageClass 预配不同的存储卷。
vSphere 存储
默认情况下,GKE on VMware 使用 vSphere 存储。管理员集群需要为其 etcd 数据预配 vSphere 数据存储区。
当您创建用户集群时,GKE on VMware 使用 vSphere Kubernetes 卷插件在 vSphere 数据存储区中动态预配新的虚拟机磁盘 (VMDK)。(请注意,在 1.2 版之前,用户集群使用的数据存储区与管理员集群相同。)
管理员集群和用户集群使用的 vSphere 数据存储区可能由块存储设备(例如外部存储阵列)上的 NFS、vSAN 或 VMFS 提供支持。在多主机环境中,每个块存储设备都必须挂接到环境中的所有主机,并且必须通过在其他主机上装载数据存储区选项在每个主机上配置数据存储区。
默认存储
GKE on VMware 包含默认的 Kubernetes StorageClass,用于确定 Kubernetes 应如何预配存储空间。在 Kubernetes 预配存储卷后,它们由 Kubernetes PersistentVolume 表示。
用户集群的默认 StorageClass 指向 vSphere 数据存储区,该数据存储区在 StorageClass 配置的 datastore
字段中设置。默认情况下,为用户集群预配的 Kubernetes PersistentVolume 就是该数据存储区的 VMDK。这不一定是管理员集群使用的数据存储区。
在 GKE on VMware 中,Kubernetes StatefulSet(通常需要永久性存储空间的有状态工作负载)默认使用 PersistentVolumeClaim,后者由指向 vSphere 存储的 StorageClass 提供支持。
容器存储接口
容器存储接口 (CSI) 是一种开放式标准 API,可让 Kubernetes 将任意存储系统公开给容器化工作负载。当您将 CSI 兼容的卷驱动程序部署到 GKE on VMware 集群时,工作负载可直接连接到兼容的存储设备,无需通过 vSphere 存储。
如需在集群中使用 CSI,您必须部署由存储供应商提供的 CSI 驱动程序。然后,您可以将工作负载配置为使用驱动程序的 StorageClass,或将其设置为默认 StorageClass。
我们与许多存储设备供应商合作,以使其存储系统符合 GKE on VMware 要求。请参阅符合要求的存储合作伙伴的完整列表。
vSphere CSI 驱动程序
默认情况下,GKE on VMware 会利用来自 VMware 的树内卷插件,该插件会自动对 VMware 数据存储区(包括 vSAN)启用支持。vSphere CSI 驱动程序是 Container Storage Interface 的 vSphere 卷驱动程序实现,它是 VMware Cloud Native Storage 的一个组件。该驱动程序自动部署在 GKE on VMware 中,并从 GKE on VMware 1.7 版开始提供正式版。
卷扩展
卷扩展是 Kubernetes 1.20 中的 Beta 版功能。
永久性卷预配完成后,您便可以通过在 PersistentVolumeClaim (PVC) 中修改容量请求来扩展该卷的大小。您可以在 Pod 使用卷时进行在线扩展,或者在未使用卷的情况下进行离线扩展。
对于 vSphere CSI 驱动程序,vSphere 7.0 及更高版本支持离线扩展,vSphere 7.0(更新 2)及更高版本支持在线扩展。
对于在 vSphere 7.0 及更高版本上运行的新创建集群,用户集群中自动安装的 vSphere CSI 驱动程序 StorageClass standard-rwo
默认将其 allowVolumeExpansion
设置为 true。您可以使用此 StorageClass 对卷进行在线和离线扩展。对于升级后的集群,由于系统不会在集群升级时修改 StorageClass,因此当集群从 1.7 升级到 1.8 时,standard-rwo
中的 allowVolumeExpansion
设置将保持未设置状态,这意味着不会启用卷扩展。
如需详细了解卷扩展,请参阅使用卷扩展。
CSI 卷快照
您可以使用 VolumeSnapshot 和 VolumeSnapshotClass 资源创建永久性存储的快照。如需对 CSI 卷使用此功能,CSI 驱动程序必须支持卷快照,并且 external-snapshotter
Sidecar 容器必须包含在 CSI 驱动程序部署中。
如需详细了解卷快照,请参阅使用卷快照。
系统会在您创建集群时自动部署 CSI 快照控制器。
从 GKE on VMware 1.8 开始,v1
版本的 VolumeSnapshot、VolumeSnapshotContent 和 VolumeSnapshotClass 对象可供使用。v1beta1
版本已弃用,并将从之后的版本开始停止提供。
卷清理
删除用户集群时,系统可能不会删除 VMware 树内卷插件预配的卷。但是,删除用户集群时,系统不会删除 vSphere CSI 驱动程序预配的卷。在删除该集群之前,您应该确认所有卷、PVC 和 StatefulSet 都已删除。
Kubernetes 树内卷插件
Kubernetes 随附了很多树内卷插件。您可以选择使用其中任何一种来为您的有状态工作负载提供块或文件存储。借助树内插件,工作负载可以直接连接到存储空间,而无需通过 vSphere 存储。
vSphere 存储可在由任意 iSCSI、FC 或 NFS 存储设备支持的数据存储区内自动动态预配卷,而许多树内插件不支持动态预配。它们需要您手动创建 PersistentVolume。
下表介绍了几种树内卷插件:
树内卷插件 | 说明 | 支持的访问模式 | 动态预配 |
---|---|---|---|
Fibre Channel | 通用存储插件 | 读取/写入单个 Pod | 否 |
iSCSI | 通用存储插件 | 读取/写入单个 Pod | 否 |
NFS | 通用存储插件 | 读取/写入多个 Pod | 否 |
配置集群存储
如果要预配 vSphere 数据存储区之外的存储卷,您可以在使用其他存储驱动程序的集群中创建新的 StorageClass。然后,您可以将 StorageClass 设置为集群的默认类别,或使用 StorageClass(StatefulSet 示例)配置工作负载。
问题排查
请参阅排查存储问题。