动态在线扩容存储卷¶
在 K8s 环境中,NebulaGraph 的数据存储在持久化存储卷(PV)上。动态在线扩容存储卷指的是在不停机的情况下增加存储卷的容量,以满足 NebulaGraph 数据增长的需求。本文介绍如何在 K8s 环境中为 NebulaGraph 的服务动态在线扩容存储卷。
Note
- 集群创建后,不支持在集群运行时动态增加 PV 的数量。
- 本文介绍的方法仅使用在线扩容存储卷,不支持在线缩容存储卷。
背景信息¶
K8s 中,StorageClass 是定义了一种存储类型的资源,它描述了一种存储的类,包括存储的提供者(provisioner)、参数和其他细节。当创建一个 PersistentVolumeClaim(PVC)并指定一个 StorageClass 时,K8s 会自动创建一个对应的 PV。动态扩容存储卷的原理是编辑 PVC 并增加存储卷的容量,然后 K8s 会根据 PVC 中指定的storageClassName
自动扩容该 PVC 对应的 PV 的容量。在这个过程中,不会创建新的 PV,而是改变现有的 PV 的容量大小。只有动态存储卷才支持存储卷的动态扩容,即配置了storageClassName
的 PVC。同时 StorageClass 的allowVolumeExpansion
字段必须为true
。详情参见 Expanding Persistent Volumes Claims。
在 Operator 中,不能直接编辑 PVC,因为 Operator 会根据 NebulaGraph 集群服务的配置spec.<metad|storaged>.dataVolumeClaim
自动创建 PVC。因此,需要通过修改集群的配置来实现 PVC 的配置更新,然后自动触发 PV 的动态在线扩容。
前提条件¶
- K8s 的版本等于或高于 1.18。
- 已在 K8s 环境中创建 StorageClass。详情参见 Expanding Persistent Volumes Claims。
- 确保 StorageClass 配置了
allowVolumeExpansion
字段并且值为true
。 - 确保 StorageClass 配置的
provisioner
支持动态扩容。
- 确保 StorageClass 配置了
- 在 K8s 中创建一个 NebulaGraph 集群。具体步骤,参见创建 NebulaGraph 集群。
- NebulaGraph 集群 Pod 处于运行状态。
在线扩容存储卷示例¶
以下示例假设 StorageClass 的名称为ebs-sc
,NebulaGraph 集群的名称为nebula
,演示如何在线扩容 Storage 服务的存储卷。
-
查看 Storage 服务 Pod 的状态。
kubectl get pod
示例输出:
nebula-storaged-0 1/1 Running 0 43h
-
查看 Storage 服务的 PVC 和 PV 信息。
# 查看 PVC 信息 kubectl get pvc
示例输出:
storaged-data-nebula-storaged-0 Bound pvc-36ca3871-9265-460f-b812-7e73a718xxxx 5Gi RWO ebs-sc 43h
# 查看 PV 信息,确认 PV 的容量为 5Gi kubectl get pv
示例输出:
pvc-36ca3871-9265-460f-b812-xxx 5Gi RWO Delete Bound default/storaged-data-nebula-storaged-0 ebs-sc 43h
-
在符合前提条件的情况下,执行以下命令请求扩容 Storage 服务的存储卷至 10Gi。
kubectl patch nc nebula --type='merge' --patch '{"spec": {"storaged": {"dataVolumeClaims":[{"resources": {"requests": {"storage": "10Gi"}}, "storageClassName": "ebs-sc"}]}}}'
示例输出:
nebulacluster.apps.nebula-graph.io/nebula patched
-
等待一分钟左右查看扩容后的 PVC 和 PV 信息。
kubectl get pvc
示例输出:
storaged-data-nebula-storaged-0 Bound pvc-36ca3871-9265-460f-b812-7e73a718xxxx 10Gi RWO ebs-sc 43h
kubectl get pv
示例输出:
pvc-36ca3871-9265-460f-b812-xxx 10Gi RWO Delete Bound default/storaged-data-nebula-storaged-0 ebs-sc 43h
由上可见,PVC 和 PV 的容量都已扩容至 10Gi。