缓存管理自动化:JuiceFS 企业版 Cache Group Operator 新特性发布

近期,JuiceFS 企业版推出了 Cache Group Operator,用于自动化创建和管理缓存组集群。Operator 是一种简化 Kubernetes 应用管理的工具,它能够自动化应用程序的生命周期管理任务,使部署、扩展和运维更加高效。

在推出 Operator 之前,我们曾通过 StatefulSet 或 DaemonSet 的方式为用户提供缓存组创建功能,但用户在使用这种方式时存在以下不便之处:

  • 节点配置不灵活:无法在同一集群内针对不同节点类型或资源(如挂载参数、缓存组权重、缓存盘等)进行单独配置;
  • 手动管理节点:需要依赖人工监控并手动添加或移除节点,操作繁琐且易出错;
  • 缓存清理不自动化:缓存清理需手动执行,缺乏自动化支持。

为了解决这些问题,JuiceFS 推出了 Cache Group Operator,提供以下功能:

  • 在同一集群中配置不同的节点类型和资源,满足不同的节点的需求;
  • 支持平滑添加或移除节点,尽可能减小加减节点期间缓存命中率波动;
  • 自动缓存清理;
  • 通过 UI 的形式可视化管理缓存组集群。

01 如何使用 Operator

安装 Operator

首先,添加 JuiceFS Helm 仓库并更新:

sh 复制代码
helm repo add juicefs https://juicedata.github.io/charts/
helm repo update

使用 Helm 安装 JuiceFS Cache Group Operator:

sh 复制代码
helm upgrade --install juicefs-cache-group-operator juicefs/juicefs-cache-group-operator -n juicefs-cache-group --create-namespace

用户可以使用 kubectl wait 等待 Operator 准备就绪:

sh 复制代码
kubectl wait -n juicefs-cache-group --for=condition=Available=true --timeout=120s deployment/juicefs-cache-group-operator

创建缓存组集群

yaml 复制代码
apiVersion: v1
kind: Secret
metadata:
  name: juicefs-secret
  namespace: juicefs-cache-group
type: Opaque
stringData:
  name: juicefs-xx
  token: xx
  access-key: xx
  secret-key: xx
---
apiVersion: juicefs.io/v1
kind: CacheGroup
metadata:
  name: cachegroup-sample
  namespace: juicefs-cache-group
spec:
  secretRef:
    name: juicefs-secret
  worker:
    template:
      nodeSelector:
        juicefs.io/cg-worker: "true"
      image: juicedata/mount:ee-5.1.1-1faf43b
      opts:
        - group-weight=100
      resources:
        requests:
          cpu: 100m
          memory: 128Mi
        limits:
          cpu: 1
          memory: 1Gi

我们给需要节点添加如下标签,即可添加一个缓存组节点

sh 复制代码
kubectl label node node1 juicefs.io/cg-worker=true

缓存节点可能存在异构的配置(例如缓存盘的大小不一样),此时可以通过 spec.worker.overwrite 字段来为不同的节点指定不同的配置:

yaml 复制代码
apiVersion: juicefs.io/v1
kind: CacheGroup
metadata:
  name: cachegroup-sample
spec:
  worker:
    template:
      nodeSelector:
        juicefs.io/cg-worker: "true"
      image: juicedata/mount:ee-5.1.1-1faf43b
      hostNetwork: true
      cacheDirs:
        - path: /var/jfsCache-0
          type: HostPath
      opts:
        - group-weight=100
        # 单位 MiB
        - cache-size=2048
    overwrite:
      - nodes:
          - k8s-03
        # 也可以使用 nodeSelector
        # nodeSelector:
        #   kubernetes.io/hostname: k8s-02
        opts:
          # 单位 MiB
          - cache-size=1024
          - group-weight=50
        cacheDirs:
        - path: /var/jfsCache-1
          type: HostPath
        - path: /var/jfsCache-2
          type: HostPath

获取缓存组状态

sh 复制代码
$ kubectl get cachegroups


NAME                CACHE GROUP NAME                        PHASE   READY   AGE
cachegroup-sample   juicefs-cache-group-cachegroup-sample   Ready   1/1     10s

当 phase 状态变为 Ready 时,表示缓存组已成功创建。接下来,用户可以在客户端上添加挂载参数,以开始使用缓存组:

sh 复制代码
juicefs mount xx -o cache-group=juicefs-cache-group-cachegroup-sample,no-sharing

平滑增删节点

当节点发生变更时,缓存组 Operator 会以平滑的形式增删节点,具体逻辑如下:

  • 当新增节点时,缓存组 Operator 会自动创建新的 Worker Pod,并添加 group-backup 挂载参数。如果新的 Worker Pod 接收到应用请求,并且发现缓存未命中,这个 Worker Pod 会将请求转发给其它缓存节点,确保缓存可以命中。默认 10 分钟后,group-backup 挂载参数会被移除掉,可以通过 spec.backupDuration 来控制默认时间:

    yaml 复制代码
    apiVersion: juicefs.io/v1
    kind: CacheGroup
    metadata:
      name: cachegroup-sample
    spec:
      backupDuration: 10m
  • 当移除节点时,缓存组 Operator 会先尝试将节点上的缓存数据迁移到其它节点,然后再删除节点。最长等待数据迁移时间默认为 1 小时,可以通过 spec.waitingDeletedMaxDuration 来控制默认时间:

    yaml 复制代码
    apiVersion: juicefs.io/v1
    kind: CacheGroup
    metadata:
      name: cachegroup-sample
    spec:
      waitingDeletedMaxDuration: 1h

02 在 CSI Dashboard 中使用

安装完成后,用户可以通过 JuiceFS CSI Dashboard 轻松查看和管理缓存组集群。Dashboard 提供了直观的界面,帮助实时监控缓存组的运行状态,灵活添加或移除缓存节点,并详细查看缓存的使用情况。

通过 Dashboard 管理缓存组集群

  1. 添加/移除缓存节点

2.查看缓存使用情况

3.预热缓存组集群

通过点击添加节点的旁边的「预热」按钮对缓存组进行预热。你可以通过调整下面的参数来实现自定义的目的,例如默认会对整个文件系统进行预热,可以调整 subpath 对指定目录进行预热。

有关 JuiceFS Cache Group Operator 的更多详细信息,请参考官方文档:

JuiceFS Cache Group Operator 文档

相关推荐
爱宇阳2 分钟前
从容器化到自动化:Spring Boot 项目 Docker 部署与 GitLab CI/CD 集成 Harbor 全流程
spring boot·docker·自动化
非典型代码7 分钟前
Jenkins发不出邮件
运维·servlet·jenkins
b***251111 分钟前
储能电池组的生产流程|深圳比斯特自动化
运维·自动化
实心儿儿16 分钟前
Linux系统 —— 基础命令1
linux·运维·服务器
FreeBuf_1 小时前
SesameOp 恶意软件滥用 OpenAI Assistants API 实现与 C2 服务器的隐蔽通信
运维·服务器·网络
噜啦噜啦嘞好1 小时前
Linux进程信号
linux·运维·服务器
REDcker2 小时前
Linux 进程资源占用分析指南
linux·运维·chrome
samroom2 小时前
Linux系统管理与常用命令详解
linux·运维·服务器
PKNLP2 小时前
07.docker介绍与常用命令
运维·docker·容器
rising start2 小时前
五、RPA案例:起点中文网强推小说自动化保存
自动化·rpa