如何部署 JuiceFS

JuiceFS 的部署非常简单,只需完成下列步骤:

  1. 在 juicefs 网站控制台上创建文件系统

  2. 下载 juicefs 命令行工具

  3. 挂载 juicefs 文件系统

这几个步骤既可以手动完成,也可以通过脚本或 DevOps 工具自动化处理。

手动

依次执行下列几个命令下载并挂载 juicefs

  1. curl -L juicefs.com/static/juicefs -o juicefs && chmod +x juicefs
  2. sudo ./juicefs auth --token $JFS_TOKEN --accesskey $ACCESSKEY --secretkey $SECRETKEY $JFS_NAME
  3. sudo ./juicefs mount $JFS_NAME $JFS_MOUNTPONT

etc/fstab 中增加配置项以便能在系统启动时自动加载,例如:

  1. JFS_NAME /jfs juicefs _netdev 0 0

其中 _netdev 表示 juicefs 需要在网络设备之后挂载。

注解

在默认情况下,CentOS 6 不会 在启动后自动挂载网络文件系统,需要运行 sudo chkconfig --add netfs 来使能。

使用 Shell 脚本

  1. #!/bin/sh
  2. cd /tmp
  3. curl -L juicefs.com/static/juicefs -o juicefs && chmod +x juicefs
  4. sudo ./juicefs auth "$1" --token "$2" --accesskey "$3" --secretkey "$4"
  5. sudo ./juicefs mount "$1" "$5"

将上述内容保存到 shell 脚本中,如 setup-juicefs.sh,然后使用下面的命令一次性完成挂载:

  1. ./setup-juicefs.sh $JFS_NAME $JFS_TOKEN $ACCESSKEY $SECRETKEY $JFS_MOUNTPONT

注解

accesskey 和 secretkey 在某些环境中不是必需的,例如在 AWS 中可以采用 IAM role 来完 成认证。在这种情况下,需要给命令行提供占位符 '' 作为参数

使用 Salt

下面是使用 Salt 部署 juicefs 的代码样例:

  1. /root/juicefs:
  2. file.managed:
  3. - source: https://juicefs.com/static/juicefs
  4. - mode: 0755
  5. - skip_verify: True
  6. juicefs auth:
  7. cmd.run:
  8. - name: /root/juicefs auth {{jfs_name}} --token {{jfs_token}} --accesskey={{accesskey}} --secretkey={{secretkey}}
  9. - creates: /root/.juicefs/{{jfs_name}}.conf
  10. require:
  11. - file: /root/juicefs
  12. /jfs:
  13. mount.mounted:
  14. - device: {{jfs_name}}
  15. - fstype: juicefs
  16. - mkmnt: True
  17. - opts: _netdev
  18. - device_name_regex:
  19. - JuiceFS:{{jfs_name}}
  20. require:
  21. - cmd: juicefs auth

注解

使用 juicefs 命令行工具挂载文件系统时,设备名称会自动添加 JuiceFS: 前缀。因此,需要 使用正则表达式进行匹配。

使用 Ansible

使用 Ansible 在本机挂载 juicefs 文件系统的 playbook 样例如下:

  1. - hosts: localhost
  2. tasks:
  3. - set_fact:
  4. jfs_bin: /usr/local/bin/juicefs
  5. - get_url:
  6. url: https://juicefs.com/static/juicefs
  7. mode: 0755
  8. dest: "{{jfs_bin}}"
  9. - command: {{jfs_bin}} auth {{jfs_name}} --token {{jfs_token}} --accesskey={{accesskey}} --secretkey={{secretkey}}
  10. args:
  11. creates: /root/.juicefs/{{jfs_name}}.conf
  12. - mount:
  13. path: "{{jfs_path}}"
  14. src: "{{jfs_name}}"
  15. fstype: juicefs
  16. opts: _netdev
  17. state: mounted

注解

对于使用腾讯云的文件系统,--bucketjuicefs auth 的必要参数,请使用带有 APPID 的完整 endpoint 作为值。