Skip to main content

JuiceFS 云服务自动化部署

获取文件系统信息

自动化部署方式通常不具备人机交互的条件,从客户端安装到部署挂载文件系统的整个过程都要自动完成,因此需要提前准备好文件系统的相关信息,以便于执行自动化任务的工具能够读取。

常用的预先提供信息的方式有以下 2 种:

方式一:环境变量

Linux 和 macOS 系统使用 export 命令创建临时的环境变量,例如,创建一个名为 JFS_TOKEN 的环境变量:

$ export JFS_TOKEN=bbab8801xxxxxxxx90ee3435f3095ffbd5

对于在终端或 Shell 脚本中访问,只需在变量名前添加 $ 符号:

$ echo $JFS_TOKEN
bbab8801xxxxxxxx90ee3435f3095ffbd5

有关于如何在你使用的其他自动化部署工具中读取系统的环境变量,请查阅相关文档了解详情。

方式二:配置文件

JuiceFS 云服务客户端内置的 auth 命令主要用作预先创建文件系统的配置文件,该配置文件记录了文件系统的名称、对象存储、Token 等关键信息。

在挂载文件系统时,客户端总是会先查找并从配置文件中读取密钥等信息,只有当配置文件不存在时才会要求用户手动输入。

例如,为名为 jfs8 的文件系统创建配置文件:

$ sudo juicefs auth jfs8 --token bbab8801xxxxxxxx90ee3435f3095ffbd5 --accesskey LTAI5txxxmxxxxgGDt --secretkey b8Szbxxxxxxxxxxxxxx0oHX1U9

其中,--token 用来指定文件系统的 Token,--accesskey--secretkey 是对象存储的 API 访问密钥。

创建好的配置文件位于 $HOME/.juicefs 目录中,但需要注意,因为这个命令中使用了 sudo 即以超级管理员身份执行的命令,因此配置文件会创建在 root 用户的家目录,即 /root/.juicefs/jfs8.conf

以下是一份配置文件示例:

{
"rootname": "jfs8",
"storage": "oss",
"region": "cn-shanghai",
"bucket": "jfs8.oss-cn-shanghai.aliyuncs.com",
"partitions": 0,
"replicated": false,
"compatible": false,
"public": false,
"blockSize": 4096,
"master": "aliyun-shanghai-1.meta.juicefs.com:9408",
"master_ip": [
"106.4.4.94",
"47.100.10.252",
"47.123.123.227"
],
"password": "216eea4xxxxxxxxxxx08e5e0cd2cab",
"compress": "lz4",
"accesskey": "LTAI5txxxmxxxxgGDt",
"secretkey": "b8Szbxxxxxxxxxxxxxx0oHX1U9",
"tested": 1,
"token": "bbab8801xxxxxxxx90ee3435f3095ffbd5"
}

Shell 脚本

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

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

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

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

SaltStack

下面是使用 SaltStack 部署 JuiceFS 的代码样例:

/root/juicefs:
file.managed:
- source: https://juicefs.com/static/juicefs
- mode: 0755
- skip_verify: True

juicefs auth:
cmd.run:
- name: /root/juicefs auth {{jfs_name}} --token {{jfs_token}} --accesskey={{accesskey}} --secretkey={{secretkey}}
- creates: /root/.juicefs/{{jfs_name}}.conf
require:
- file: /root/juicefs

/jfs:
mount.mounted:
- device: {{jfs_name}}
- fstype: juicefs
- mkmnt: True
- opts: _netdev
- device_name_regex:
- JuiceFS:{{jfs_name}}
require:
- cmd: juicefs auth
提示

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

Ansible

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

- hosts: localhost
tasks:
- set_fact:
jfs_bin: /usr/local/bin/juicefs

- get_url:
url: https://juicefs.com/static/juicefs
mode: 0755
dest: "{{jfs_bin}}"

- command: {{jfs_bin}} auth {{jfs_name}} --token {{jfs_token}} --accesskey={{accesskey}} --secretkey={{secretkey}}
args:
creates: /root/.juicefs/{{jfs_name}}.conf

- mount:
path: "{{jfs_path}}"
src: "{{jfs_name}}"
fstype: juicefs
opts: _netdev
state: mounted
提示

如果文件系统绑定的是腾讯云 COS 对象存储,--bucketjuicefs auth 的必要参数,请使用带有 APPID 的完整 endpoint。参见 如何获取对象存储的 API 密钥