本页面介绍 GKE on VMware 存储概念。
摘要
GKE on VMware 通过以下方式与外部块存储或文件存储系统集成:
- vSphere 容器存储接口 (CSI) 驱动程序
- 第三方 CSI 驱动程序
- Kubernetes 树内卷插件
vSphere 数据存储区
创建管理员集群时,您可以为集群的 etcd 数据指定现有的 vSphere datastore。
创建用户集群时,您可以使用与管理员集群相同的数据存储区,也可以指定其他数据存储区。您还可以为单个节点池指定数据存储区。
管理员集群和用户集群使用的 vSphere 数据存储区可由块存储设备(例如外部存储阵列)上的 NFS、vSAN 或 VMFS 提供支持。在多主机环境中,每个块存储设备都必须挂接到环境中的所有主机,并且必须通过在其他主机上装载数据存储区选项在每个主机上配置数据存储区。
StorageClasses
创建 PersistentVolumeClaim 时,您可以指定 StorageClass,提供有关存储空间预配方式的信息。如果您未指定 StorageClass,则使用默认的 StorageClass。
管理员集群 StorageClass
管理员集群有一个名为 standard
的 StorageClass,它被指定为默认 StorageClass。standard
StorageClass 会将 vSphere 树内卷插件列为预配工具。
如需查看 standard
StorageClass,请执行以下操作:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get storageclass \ standard --output yaml
在以下输出中,您可以看到 standard
是默认 StorageClass,预配工具是 vSphere 树内卷插件 kubernetes.io/vsphere-volume
。您还可以查看 vSphere 数据存储区的名称。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: storageclass.kubernetes.io/is-default-class: "true" ... labels: bundle.gke.io/component-name: admin-storage-class name: standard ... parameters: datastore: vsanDatastore provisioner: kubernetes.io/vsphere-volume ...
用户集群 StorageClass
用户集群中有一个名为 standard
的 StorageClass 和另一个名为 standard-rwo
的 StorageClass。
standard-rwo
StorageClass 被指定为默认 StorageClass,并且列出了 vSphere CSI 驱动程序作为预配工具。
如需查看 standard-rwo
StorageClass,请执行以下操作:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get storageclass \ standard-rwo --output yaml
在以下输出中,您可以看到 standard-rwo
是默认 StorageClass,预配工具是 vSphere CSI 驱动程序 csi.vsphere.vmware.com
。您还可以查看 vSphere 数据存储区的网址:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: storageclass.kubernetes.io/is-default-class: "true" ... labels: bundle.gke.io/component-name: user-vsphere-csi-driver-addon ... name: standard-rwo ... parameters: datastoreURL: ds:///vmfs/volumes/vsan:52fb6ca22be2454e-e67f620175964a9f/ provisioner: csi.vsphere.vmware.com ...
Kubernetes 树内卷插件
Kubernetes 随附了很多树内卷插件。但是,大多数树内卷插件(包括 vSphere 树内卷插件)已弃用,如需了解详情,请参阅 CSI 迁移项目。
适用于 vSphere 存储驱动程序的 CSI 迁移
过去,树内 vSphere 卷插件是用户集群中默认 StorageClass 的预配工具。但现在树内 vSphere 卷插件已弃用,并且 vSphere CSI 驱动程序是用户集群中默认 StorageClass 的预配工具。我们建议您使用 vSphere CSI 驱动程序,而不是树内卷插件。
从 GKE on VMware 1.15 版开始,默认情况下,系统会为树内 vSphere 卷插件启用 Kubernetes CSI 迁移功能。这意味着,如果工作负载使用树内 vSphere 卷,则所有内部存储操作调用都会自动重定向到 vSphere CSI 驱动程序。
例如,假设 PersistentVolumeClaim 将 standard
StorageClass 指定为预配工具,以列出 vSphere 树内卷插件 kubernetes.io/vsphere-volume
。然后,使用该 PersistentVolumeClaim 的任何工作负载都会将其存储操作调用重定向到 vSphere CSI 驱动程序 csi.vsphere.vmware.com
。
预检检查
当您创建新集群或升级集群时,系统会进行预检检查,以确保您的环境适合 CSI 迁移。
例如,预检检查:
- 验证您的 vCenter 和 ESXI 版本是否合适。
- 如果存在树内 vSphere PersistentVolume,请验证 vSphere CSI 驱动程序已启用。
- 验证 vSphere StorageClass 没有在 CSI 迁移后被忽略的特定参数。
- 验证 CSI 迁移所需的静态创建的树内 PersistentVolume 和 PersistentVolumeClaim 的注释。
- 验证集群是否可以使用由 vSphere CSI 驱动程序预配的 CSI 卷成功运行工作负载。
如需了解详情,请参阅运行预检检查。
已知问题
关于 vSphere CSI 驱动程序,有几个已知问题。如需了解相关信息和解决方法,请参阅 VMWare vSphere CSI 驱动程序 3.0 版本说明中的“已知问题”部分。
使用第三方驱动程序
如果要预配 vSphere 数据存储区之外的存储卷,您可以在使用其他存储驱动程序的集群中创建新的 StorageClass。然后,您可以将 StorageClass 设置为集群的默认,或者将工作负载配置为使用 StorageClass(StatefulSet 示例)。
存储合作伙伴
我们与许多存储设备供应商合作,以使其存储系统符合 GKE on VMware 要求。请参阅符合要求的存储合作伙伴的完整列表。
卷扩展
永久性卷预配完成后,您便可以通过在 PersistentVolumeClaim 中修改容量请求来扩展该卷的大小。您可以在 Pod 使用卷时进行在线扩展,或者在未使用卷的情况下进行离线扩展。
对于 vSphere CSI 驱动程序,vSphere 7.0 及更高版本支持离线扩展,vSphere 7.0(更新 2)及更高版本支持在线扩展。
对于在 vSphere 7.0 及更高版本上运行的新建集群,standard-rwo
StorageClass 默认将 allowVolumeExpansion
设置为 true。您可以使用此 StorageClass 对卷进行在线和离线扩展。对于升级后的集群,由于系统不会在集群升级时修改 StorageClass,因此当集群从 1.7 升级到 1.8 时,standard-rwo
中的 allowVolumeExpansion
设置将保持未设置状态,这意味着不会启用卷扩展。
如需详细了解卷扩展,请参阅使用卷扩展。
CSI 卷快照
您可以使用 VolumeSnapshot 和 VolumeSnapshotClass 资源创建永久性存储的快照。如需对 CSI 卷使用此功能,CSI 驱动程序必须支持卷快照,并且 external-snapshotter
Sidecar 容器必须包含在 CSI 驱动程序部署中。
如需详细了解卷快照,请参阅使用卷快照。
系统会在您创建集群时自动部署 CSI 快照控制器。
卷清理
删除用户集群时,系统不会删除 vSphere CSI 驱动程序预配的卷。在删除集群之前,您应该先删除所有卷、PersistentVolumeClaim 和 StatefulSet。
问题排查
请参阅排查存储问题。