存储

本页面介绍 Anthos GKE On-Prem (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 PersistentVolumes 表示。

用户集群的默认 StorageClass 指向 vSphere 数据存储区,该数据存储区在 StorageClass 配置的 datastore 字段中设置。默认情况下,为用户集群预配的 Kubernetes PersistentVolume 就是该数据存储区的 VMDK。这并未是管理员集群使用的那个数据存储区。

在 GKE On-Prem 中,Kubernetes StatefulSets(通常需要永久性存储空间的有状态工作负载)默认使用 PersistentVolumeClaim,后者由指向 vSphere 存储的 StorageClass 提供支持。

容器存储接口

容器存储接口 (CSI) 是一种开放式标准 API,可让 Kubernetes 将任意存储系统提供给容器化工作负载。当您将 CSI 兼容的卷驱动程序部署到 GKE On-Prem 集群时,工作负载可直接连接到兼容的存储设备,无需通过 vSphere 存储。

GKE On-Prem 支持 CSI v1.0。要在集群中使用 CSI,您需要部署由存储供应商提供的 CSI 驱动程序。然后,您可以将工作负载配置为使用驱动程序的 StorageClass,或将其设置为默认 StorageClass

我们与许多存储设备供应商合作,利用 GKE On-Prem 来对其存储系统进行限定。请参阅符合条件的存储合作伙伴的完整列表。

默认情况下,GKE On-Prem 会利用来自 VMware 的树内卷插件 vSphere Cloud Provider (VCP),该插件自动对 VMware 数据存储区(包括 vSAN)启用支持。目前,手动部署 vSphere CSI 驱动程序不是必需的也不推荐,因为 GKE On-Prem 会在未来版本中包含 vSphere CSI 驱动程序。

Kubernetes 树内卷插件

Kubernetes 随附了很多树内卷插件。您可以选择使用其中任何一种来为您的有状态工作负载提供块或文件存储。借助树内插件,工作负载可以直接连接到存储空间,而无需通过 vSphere 存储。

vSphere 存储可在由任意 iSCSI、FC 或 NFS 存储设备支持的数据存储区内自动动态预配卷,而许多树内插件不支持动态配置。它们需要您手动创建 PersistentVolume。

下表介绍了几种树内卷插件:

树内卷插件说明支持的访问模式动态预配
Fibre Channel通用存储插件读取/写入单个 Pod
iSCSI通用存储插件读取/写入单个 Pod
NFS通用存储插件读取/写入多个 Pod
Ceph RBD开源软件定义存储读取/写入单个 Pod
CephFS开源软件定义存储读取/写入多个 Pod
Portworx专有软件定义存储读取/写入多个 Pod
Quobyte专有软件定义存储读取/写入单个 Pod
StorageOS专有软件定义存储读取/写入单个 Pod

配置集群存储

如果要预配 vSphere 数据存储区之外的存储卷,则可以在使用其他存储驱动程序的集群中创建新的 StorageClass。 然后,您可以将 StorageClass 设置为集群的默认类别,或使用 StorageClass(StatefulSet 示例)配置工作负载。

问题排查

请参阅排查存储问题

更多详情