存储

10

本页面介绍 Anthos Clusters on VMware (GKE On-Prem) 存储概念。

摘要

Anthos Clusters on VMware 通过 VMware vSphere 存储、Kubernetes 树内卷插件(或“驱动程序”)和容器存储接口 (CSI) 驱动程序与外部块或文件存储系统集成。

Anthos clusters on VMware 使用默认 Kubernetes StorageClass 来为 vSphere 数据存储区上的有状态工作负载预配存储空间。您还可以使用 StorageClass 预配不同的存储卷。

vSphere 存储

默认情况下,Anthos clusters on VMware 使用 vSphere 存储。管理员集群需要为其 etcd 数据预配 vSphere 数据存储区。

当您创建用户集群时,Anthos Clusters on VMware 使用 vSphere Kubernetes 卷插件在 vSphere 数据存储区中动态预配新的虚拟机磁盘 (VMDK)。(请注意,在 1.2 版之前,用户集群使用的数据存储区与管理员集群相同。)

管理员集群和用户集群使用的 vSphere 数据存储区可能由块存储设备(例如外部存储阵列)上的 NFS、vSAN 或 VMFS 提供支持。在多主机环境中,每个块存储设备都必须挂接到环境中的所有主机,并且必须通过在其他主机上装载数据存储区选项在每个主机上配置数据存储区。

默认存储

Anthos clusters on VMware 包含默认的 Kubernetes StorageClass,用于确定 Kubernetes 应如何预配存储空间。在 Kubernetes 预配存储卷后,它们由 Kubernetes PersistentVolume 表示。

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

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

容器存储接口

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

如需在集群中使用 CSI,您必须部署由存储供应商提供的 CSI 驱动程序。然后,您可以将工作负载配置为使用驱动程序的 StorageClass,或将其设置为默认 StorageClass

我们与许多存储设备供应商合作,以使其存储系统符合 Anthos Clusters on VMware 要求。请参阅符合要求的存储合作伙伴的完整列表。

vSphere CSI 驱动程序

默认情况下,Anthos clusters on VMware 会利用来自 VMware 的树内卷插件 vSphere Cloud Provider (VCP),该插件自动对 VMware 数据存储区(包括 vSAN)启用支持。vSphere CSI 驱动程序是 Container Storage Interface 的 vSphere 卷驱动程序实现,它是 VMware Cloud Native Storage 的一个组件。该驱动程序自动部署在 Anthos clusters on VMware 中,并从 Anthos clusters 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 卷快照

您可以使用 VolumeSnapshotVolumeSnapshotClass 资源创建永久性存储的快照。如需对 CSI 卷使用此功能,CSI 驱动程序必须支持卷快照,并且 external-snapshotter Sidecar 容器必须包含在 CSI 驱动程序部署中。

如需详细了解卷快照,请参阅使用卷快照

系统会在您创建集群时自动部署 CSI 快照控制器。

从 Anthos clusters 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 示例)配置工作负载。

问题排查

请参阅排查存储问题

更多详情