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 对象存储,--bucket
是 juicefs auth
的必要参数,请使用带有 APPID
的完整 endpoint
。参见 如何获取对象存储的 API 密钥。