跳转至

动态在线扩容存储卷

在 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支持动态扩容。
  • 在 K8s 中创建一个 NebulaGraph 集群。具体步骤,参见创建 NebulaGraph 集群
  • NebulaGraph 集群 Pod 处于运行状态。

在线扩容存储卷示例

以下示例假设 StorageClass 的名称为ebs-sc,NebulaGraph 集群的名称为nebula,演示如何在线扩容 Storage 服务的存储卷。

  1. 查看 Storage 服务 Pod 的状态。

    kubectl get pod
    

    示例输出:

    nebula-storaged-0                                                1/1     Running   0                43h
    

  2. 查看 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
    
  3. 在符合前提条件的情况下,执行以下命令请求扩容 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
    

  4. 等待一分钟左右查看扩容后的 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。


最后更新: April 26, 2024