手动扩缩容

最后更新时间:2021-11-18 12:47:32

    前提条件

    已安装 Fluid(version >= 0.5.0)。

    说明:

    请参见 安装 文档完成安装。

    新建工作环境

    $ mkdir <any-path>/dataset_scale
    $ cd <any-path>/dataset_scale
    

    运行示例

    创建 Dataset 和 GooseFSRuntime 资源对象

    $ cat << EOF > dataset.yaml
    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
     name: hbase
    spec:
     mounts:
       - mountPoint: https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/
     name: hbase
    ---
    apiVersion: data.fluid.io/v1alpha1
    kind: GooseFSRuntime
    metadata:
     name: hbase
    spec:
     replicas: 1
     tieredstore:
       levels:
         - mediumtype: MEM
           path: /dev/shm
           quota: 2G
           high: "0.95"
           low: "0.7"
    EOF
    
    说明:

    为了方便用户进行测试,mountPoint 这里使用的是 Web UFS,使用 COS 作为 UFS 可见 使用 GooseFS 挂载 COS(COSN)

    在上述示例中,我们设置 GooseFSRuntime.spec.replicas 为1,这意味着我们将启动一个带有一个 Worker 节点的 GooseFS 集群来缓存数据集中的数据。

    $ kubectl create -f dataset.yaml
    dataset.data.fluid.io/hbase created
    goosefsruntime.data.fluid.io/hbase created
    

    等待 GooseFS 集群正常启动后,可以看到此时创建完成的 Dataset 以及 GooseFSRuntime 处于如下状态:

    GooseFS 各组件运行状态:

    $ kubectl get pod
    NAME                 READY   STATUS    RESTARTS   AGE
    hbase-fuse-6pcnc     1/1     Running   0          3m15s
    hbase-master-0       2/2     Running   0          3m50s
    hbase-worker-w9wxh   2/2     Running   0          3m15s
    

    Dataset 状态:

    $ kubectl get dataset hbase
    NAME    UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    hbase   544.77MiB        0.00B    2.00GiB          0.0%                Bound   3m28s
    

    GooseFSRuntime 状态:

    $ kubectl get goosefsruntime hbase -o wide
    NAME    READY MASTERS   DESIRED MASTERS   MASTER PHASE   READY WORKERS   DESIRED WORKERS   WORKER PHASE   READY FUSES   DESIRED FUSES   FUSE PHASE   AGE
    hbase   1               1                 Ready          1               1                 Ready          1             1               Ready        4m55s
    

    Dataset 扩容

    $ kubectl scale goosefsruntime hbase --replicas=2
    goosefsruntime.data.fluid.io/hbase scaled
    

    直接使用 kubectl scale 命令即可完成 Dataset 的扩容操作。在成功执行上述命令并等待一段时间后可以看到 Dataset 以及 GooseFSRuntime 的状态均发生了变化:

    一个新的 GooseFS Worker 以及对应的 GooseFS Fuse 组件成功启动:

    $ kubectl get pod
    NAME                 READY   STATUS    RESTARTS   AGE
    hbase-fuse-6pcnc     1/1     Running   0          13m
    hbase-fuse-8qgww     1/1     Running   0          6m49s
    hbase-master-0       2/2     Running   0          13m
    hbase-worker-l4c8n   2/2     Running   0          6m49s
    hbase-worker-w9wxh   2/2     Running   0          13m
    

    Dataset 中的 Cache Capacity 从原来的 2.00GiB 变为 4.00GiB,表明该 Dataset 的可用缓存容量增加:

    $ kubectl get dataset hbase
    NAME    UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    hbase   544.77MiB        0.00B    4.00GiB          0.0%                Bound   15m
    

    GooseFSRuntime 中的 Ready Workers 以及 Ready Fuses 属性均变为2:

    $ kubectl get goosefsruntime hbase -o wide
    NAME    READY MASTERS   DESIRED MASTERS   MASTER PHASE   READY WORKERS   DESIRED WORKERS   WORKER PHASE   READY FUSES   DESIRED FUSES   FUSE PHASE   AGE
    hbase   1               1                 Ready          2               2                 Ready          2             2               Ready        17m
    

    查看 GooseFSRuntime 的具体描述信息可以了解最新的扩缩容信息:

    $ kubectl describe goosefsruntime hbase
    ...
     Conditions:
       ...
       Last Probe Time:                2021-04-23T07:54:03Z
       Last Transition Time:           2021-04-23T07:54:03Z
       Message:                        The workers are scale out.
       Reason:                         Workers scaled out
       Status:                         True
       Type:                           Workers scaled out
       Last Probe Time:                2021-04-23T07:54:03Z
       Last Transition Time:           2021-04-23T07:54:03Z
       Message:                        The fuses are scale out.
       Reason:                         Fuses scaled out
       Status:                         True
       Type:                           FusesScaledOut
    ...
    Events:
     Type    Reason   Age   From            Message
     ----    ------   ----  ----            -------
     Normal  Succeed  2m2s  GooseFSRuntime  GooseFS runtime scaled out. current replicas: 2, desired replicas: 2.
    

    Dataset 缩容

    与扩容类似,缩容时同样可以使用 kubectl scale 对 Runtime 的 Worker 数量进行调整:

    $ kubectl scale goosefsruntime hbase --replicas=1
    goosefsruntime.data.fluid.io/hbase scaled
    

    成功执行上述命令后,如果目前环境中没有应用正在尝试访问该数据集,那么就会触发 Runtime 的缩容。

    超出指定 replicas 数量的 Runtime Worke r将会被停止:

    NAME                 READY   STATUS        RESTARTS   AGE
    hbase-fuse-8qgww     1/1     Running       0          21m
    hbase-fuse-zql96     1/1     Terminating   0          17m32s
    hbase-master-0       2/2     Running       0          22m
    hbase-worker-f92vv   2/2     Terminating   0          17m32s
    hbase-worker-l4c8n   2/2     Running       0          21m
    

    Dataset 的缓存容量 Cache Capacity 恢复到 2.00GiB

    $ kubectl get dataset hbase
    NAME    UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    hbase   544.77MiB        0.00B    2.00GiB          0.0%                Bound   30m
    
    注意:

    在目前版本的 Fluid 中,缩容时 Dataset 中 Cache Capacity 属性字段的变化存在几分钟的延迟,因此您可能无法迅速观察到这一属性的变化。

    GooseFSRuntime 中的 Ready Workers 以及 Ready Fuses 字段同样变为 1

    $ kubectl get goosefsruntime hbase -o wide
    NAME    READY MASTERS   DESIRED MASTERS   MASTER PHASE   READY WORKERS   DESIRED WORKERS   WORKER PHASE   READY FUSES   DESIRED FUSES   FUSE PHASE   AGE
    hbase   1               1                 Ready          1               1                 Ready          1             1               Ready        30m
    

    查看 GooseFSRuntime 的具体描述信息可以了解最新的扩缩容信息:

    $ kubectl describe goosefsruntime hbase
    ...
     Conditions:
       ...
       Last Probe Time:                2021-04-23T08:00:55Z
       Last Transition Time:           2021-04-23T08:00:55Z
       Message:                        The workers scaled in.
       Reason:                         Workers scaled in
       Status:                         True
       Type:                           WorkersScaledIn
       Last Probe Time:                2021-04-23T08:00:55Z
       Last Transition Time:           2021-04-23T08:00:55Z
       Message:                        The fuses scaled in.
       Reason:                         Fuses scaled in
       Status:                         True
       Type:                           FusesScaledIn
    ...
    Events:
     Type     Reason               Age    From            Message
     ----     ------               ----   ----            -------
     Normal   Succeed              6m56s  GooseFSRuntime  GooseFS runtime scaled out. current replicas: 2, desired replicas: 2.
     Normal   Succeed              4s     GooseFSRuntime  GooseFS runtime scaled in. current replicas: 1, desired replicas: 1.
    

    Fluid 提供的这种扩缩容能力,能够帮助用户或是集群管理员适时地调整数据集缓存所占用的集群资源,减少某个不频繁使用的数据集的缓存容量(缩容),或者按需增加某数据集的缓存容量(扩容),以实现更加精细的资源分配,提高资源利用率。

    环境清理

    $ kubectl delete -f dataset.yaml