绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
JuiceFS容器存储接口的使用
2023-04-20 18:24:55

JuiceFS容器存储接口(CSI)驱动程序实现的CSI规范,以管理JuiceFS文件系统的生命周期

一、JuiceFS 是什么?

JuiceFS 是为云端设计的共享文件系统。

  • 云端:采用云服务中的对象存储作为后端,综合性价比极高。
  • 共享:上千台机器同时挂载,高性能并发读写,共享数据。
  • 易用:POSIX、HDFS、NFS 兼容,无门槛对接现有应用。

二、juicFS核心特征

  1. POSIX 兼容:像本地文件系统一样使用,无缝对接已有应用,无业务侵入性;
  2. HDFS 兼容:完整兼容 HDFS API,并提供更强的元数据性能,云上 Hadoop 数据存储的理想选择;
  3. 强一致性:所有确认的修改会立即在所有客户端可见,保证强一致性;
  4. 卓越的性能:低至几毫秒的时延和无限的吞吐量(通过增加客户端数量);
  5. 高可用性:元数据集群通过 Raft 协议实现高可用;
  6. 可扩展:为几十 PB 级数据和几亿级文件数设计,平滑扩容,无运维干预;
  7. 跨云跨区的复制:数据可以像 RAID-1 一样自动复制到不同区甚至不同云平台;
  8. 数据安全:所有文件数据保存在您自己的对象存储中,我们接触不到您的数据,传输过程中也是加密的。
  9. 高性价比:所有数据存储于对象存储,并经过特殊设计和压缩,大幅降低 TCO。

JuiceFS 适用于所有文件形式数据的管理、分析、归档、备份。 尤其可以支持大数据分析和机器学习对数据存储的需求。

POSIX、HDFS、NFS 兼容让 JuiceFS 不会对客户的业务系统带来任何侵入性,零成本替换。运维人员不用再为可用性、灾难恢复、监控、扩容等工作烦恼,专注于业务开发,提升研发效率。同时运维细节的简化,也让研发团队更容易向 DevOps 团队转型。

三、JuiceFS 主体架构

JuiceFS 由两个主要部分组成:

  • JuiceFS 元数据(Metadata)服务:元数据服务是由我们负责运维的一个集群,它们通过 Raft 算法实现高可用并同时保证数据的强一致性。 元数据服务是专为文件系统优化的服务,非常高效和稳定。
  • JuiceFS 挂载客户端:即下图的 jfsmount, 它负责跟元数据服务和对象存储通信,并通过 FUSE 实现 POSIX API。 另外,我们还提供一个脚本 juicefs, 用于 JuiceFS 的授权、挂载等所有操作。


注:元数据(metadata)包含文件名、文件大小、权限组、创建修改时间和目录结构。

当 JuiceFS 挂载到主机时,下图展示了它们是如何工作的:


当您的应用或者工具(可以使用任何语言编写)在使用内置的 API(open, read, write 等)访问数据时,会在底层通过系统调用经过内核中的 VFS 以及 FUSE 模块转发到 jfsmount, 再请求元数据服务或者对象存储完成操作。

、在Kubernetes的创建动态存储类和持久化存储创建示例

1、定义values.yaml,包含了redis metadata 存储和对象存储信息

文件values.yaml

image:
  repository: juicedata/juicefs-csi-driver
  tag: "latest"
  pullPolicy: "Always"

storageClasses:
- name: juicefs-sc
  enabled: true
  reclaimPolicy: Retain
  backend:
    name: "s3private"
    metaurl: "redis://:password@192.168.32.10/3"
    storage: "s3"
    accessKey: "AK"
    secretKey: "SK"
    bucket: "https://<your-bucket>.s3.cn-northwest-1.amazonaws.com.cn/"

2、使用helm安装juicefs-csi-driver,此处安装的是近的版本。(请在配置生产环境的时候,指明版本信息。)创建动态卷

helm repo add juicefs-csi-driver https://juicedata.github.io/juicefs-csi-driver/
helm repo update
helm upgrade juicefs-csi-driver juicefs-csi-driver/juicefs-csi-driver --install -f ./values.yaml

3、创建secret 用于auth,静态的持久化存储

文件 config/secrets.env

name=s3private
metaurl=redis://:password@192.168.32.10/3
access-key=AK
secret-key=SK
storage=s3
bucket="https://<your-bucket>.s3.cn-northwest-1.amazonaws.com.cn/"

4、kustomize创建secret,用于静态持久存储卷的认证

文件 kustomization.yaml

secretGenerator:
- name: jfs-auth
  type: Opaque
  env: config/secrets.env

5、创建pv和pvc,注意subpath需要已经存在。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-jfs-wwwlogs
spec:
  capacity:
    storage: 100Gi
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: juicefs-sc
  csi:
    driver: csi.juicefs.com
    fsType: juicefs
    volumeHandle: s3private
    volumeAttributes:
      subPath: eedir
    nodePublishSecretRef:
    name: jfs-auth
    namespace: default
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-jfs-wwwlogs
  namespace: loon
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: juicefs-sc
  resources:
    requests:
      storage: 100Gi
  volumeName: pv-jfs-wwwlogs


参考:

JuiceFS文档: JuiceFS Help Center 文档

JuiceFS-csi-driver

分享好友

分享这个小栈给你的朋友们,一起进步吧。

容器化的边边角角
创建时间:2020-02-14 17:28:00
从前在通往容器化的道路上低头踩坑无数,现如今抬头看路,总结过去,希望能走快些。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • frogwisperer
    栈主

小栈成员

查看更多
  • abc
  • 我没
  • 飘絮絮絮丶
  • Jack2k
戳我,来吐槽~