本页面介绍了 GKE On-Prem 存储概念。
摘要
GKE On-Prem 通过 VMware vSphere 存储、Kubernetes 树内卷插件(或“驱动程序”)和容器存储接口 (CSI) 驱动程序与外部块或文件存储系统集成。
GKE On-Prem 集群使用默认 Kubernetes StorageClass 来为 vSphere 数据存储区上的有状态工作负载预配存储空间。您还可以使用 StorageClass 预配不同的存储卷。
vSphere 存储
默认情况下,GKE On-Prem 集群会使用 vSphere 存储。管理员集群需要为其 etcd 数据预配 vSphere 数据存储区。
当您创建用户集群时,GKE On-Prem 使用 vSphere Kubernetes 卷插件在 vSphere 数据存储区中动态预配新的虚拟机磁盘 (VMDK)。(请注意,在 1.2 版之前,用户集群使用的数据存储区与管理员集群相同。)
管理员集群和用户集群使用的 vSphere 数据存储区可能由块存储设备(例如外部存储阵列)上的 NFS、vSAN 或 VMFS 提供支持。在多主机环境中,每个块存储设备都必须挂接到环境中的所有主机,并且必须通过在其他主机上装载数据存储区选项在每个主机上配置数据存储区。
默认存储
GKE On-Prem 集群包含默认的 Kubernetes StorageClass,用于确定 Kubernetes 应如何预配存储空间。在 Kubernetes 预配存储卷后,它们由 Kubernetes PersistentVolume 表示。
用户集群的默认 StorageClass 指向 vSphere 数据存储区,该数据存储区在 StorageClass 配置的 datastore
字段中设置。默认情况下,为用户集群预配的 Kubernetes PersistentVolume 就是该数据存储区的 VMDK。这不一定是管理员集群使用的数据存储区。
在 GKE On-Prem 中,Kubernetes StatefulSet(通常需要永久性存储空间的有状态工作负载)默认使用 PersistentVolumeClaim,后者由指向 vSphere 存储的 StorageClass 提供支持。
容器存储接口
容器存储接口 (CSI) 是一种开放式标准 API,可让 Kubernetes 将任意存储系统公开给容器化工作负载。当您将 CSI 兼容的卷驱动程序部署到 GKE On-Prem 集群时,工作负载可直接连接到兼容的存储设备,无需通过 vSphere 存储。
GKE On-Prem 支持 CSI v1.0。要在集群中使用 CSI,您需要部署由存储供应商提供的 CSI 驱动程序。然后,您可以将工作负载配置为使用驱动程序的 StorageClass,或将其设置为默认 StorageClass。
我们与许多存储设备供应商合作,以使其存储系统符合 GKE On-Prem 要求。请参阅符合要求的存储合作伙伴的完整列表。
vSphere CSI 驱动程序
默认情况下,GKE On-Prem 会利用来自 VMware 的树内卷插件 vSphere Cloud Provider (VCP),该插件自动对 VMware 数据存储区(包括 vSAN)启用支持。vSphere CSI 驱动程序自动部署到 GKE On-Prem 集群中,并从 GKE On-Prem 版本 1.5 开始以预览版功能的形式提供。
卷清理
删除用户集群时,系统可能不会删除 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 示例)配置工作负载。
问题排查
请参阅排查存储问题。