Skip to main content

自动化部署

当你成功挂载 JuiceFS 并且能正常使用以后,可以用自动化的方式进行批量安装与挂载,在这里介绍一些常用的方案。

你需要提前准备好 JuiceFS Token,以及对象存储的密钥对,在你的自动化方案中运行 juicefs auth,创建出配置文件:

sudo juicefs auth myjfs --token xxxxx --accesskey xxxxx --secretkey xxxxx

创建好的配置文件位于 /root/.juicefs/myjfs.conf,该文件记录了文件系统的名称、对象存储、Token 等关键信息:

/root/.juicefs/myjfs.conf
{
"rootname": "myjfs",
"storage": "oss",
"region": "cn-shanghai",
"bucket": "myjfs.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": "xxxxx",
"compress": "lz4",
"accesskey": "xxxxx",
"secretkey": "xxxxx",
"tested": 1,
"token": "xxxxx"
}

ParallelSSH

ParallelSSH 是一个简单易用的并发 SSH 工具,可以帮助你批量操作多个节点,示范如下:

# 以 Ubuntu 为例,安装 parallel-ssh
apt install -y pssh

# 创建 hosts.txt,该文本文件包含所有主机的名称,每行一个

# 在本机完成挂载后,将配置文件批量复制到所有节点
parallel-scp -h hosts.txt -r /root/.juicefs /root/.juicefs

# 批量挂载 JuiceFS
parallel-ssh -h hosts.txt -i juicefs mount jfs /jfs

Shell 脚本

创建一个名为 setup-juicefs.sh 的简单脚本:

setup-juicefs.sh
#!/bin/sh
set -e
curl -sSL juicefs.com/static/juicefs -o /usr/local/bin/juicefs && chmod +x /usr/local/bin/juicefs
sudo juicefs auth "$1" --token "$2" --accesskey "$3" --secretkey "$4"
sudo juicefs mount "$1" "$5"

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

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

如果你的云服务商支持为虚拟主机绑定对象存储访问策略,实现免秘钥访问(类似 AWS IAM),则在 juicefs authjuicefs mount 时可以省略密钥(留空)。详情参考 juicefs auth

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
# 挂载后,设备名称会包含 `JuiceFS:` 前缀。因此需要使用正则表达式进行匹配
- device_name_regex:
- JuiceFS:{{jfs_name}}
require:
- cmd: juicefs auth

Ansible

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

- hosts: localhost
tasks:
- set_fact:
# 根据实际情况修改
jfs_bin: /usr/local/bin/juicefs
jfs_path: /jfs
jfs_name: jfs-volume
jfs_token: xxx
accesskey: xxx
secretkey: xxx

- 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

- name: Create symbolic for fstab
ansible.builtin.file:
src: "{{jfs_bin}}"
dest: "/sbin/mount.juicefs"
state: link

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

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