系列文章
•Nomad 系列文章[1]
概述
显然,如果 Nomad 要运行有状态存储,那么挂载存储卷就是必备功能。
Nomad 允许用户通过多种方式将持久数据从本地或远程存储卷装载到任务环境中:
•容器存储接口(CSI)插件•Nomad 主机卷支持•Docker Volume 驱动程序
默认没有安装 CSI 的情况下,主要使用的是 Nomad 主机卷 方式。
Nomad 的主机卷允许将 Nomad 客户端上的任何目录挂载到分配中。这些目录可以是客户机上的简单目录,但也可以是挂载文件系统,如 NFS 或 GlusterFS。然后可以将这些 mounts 连接到任务组中的各个任务。
Tailscale 挂载 socket
在后文中,Traefik 要通过 Tailscale 的 socket 和 Tailscale 通信以获取证书。那么我么也可以通过 Nomad 主机卷(只读)的方式将 socket 挂载到 Traefik 容器中。
Nomad 主机卷简介
Nomad 主机卷 (Host Volume) 可以管理 Nomad 集群内运行的有状态工作负载的存储。
Nomad 主机卷提供了一种与工作负载无关的方式来指定资源,可用于 Nomad 驱动程序,如 exec
、 java
和 docker
。
Nomad 主机卷使用步骤
创建主机目录
在集群中的 Nomad 客户端节点上,创建一个用于持久化 MySQL 数据的目录。对于本例,让我们创建目录 /opt/mysql/data
:
sudo mkdir -p /opt/mysql/data
配置 Nomad 客户端
编辑对应的 Nomad 客户端上的 Nomad 配置以创建主机卷。
将 host_volume
块添加到 Nomad 配置的 client
块:
host_volume "mysql" {
path = "/opt/mysql/data"
read_only = false
}
保存,然后在此客户端上重新启动 Nomad 服务,以激活主机卷。在客户端上,您可以使用 nomad node status
命令验证主机卷是否已配置,如下所示:
$ nomad node status -short -self
ID = 12937fa7
Name = ip-172-31-15-65
Class = <none>
DC = dc1
Drain = false
Eligibility = eligible
Status = ready
Host Volumes = mysql
Drivers = docker,exec,java,mock_driver,raw_exec,rkt
...
Job 使用 Nomad 主机卷
以一个 MySQL Job - mysql.nomad.hcl
为例,示例如下:
job "mysql-server" {
type = "service"
group "mysql-server" {
count = 1
volume "mysql" {
type = "host"
read_only = false
source = "mysql"
}
task "mysql-server" {
driver = "docker"
volume_mount {
volume = "mysql"
destination = "/var/lib/mysql"
read_only = false
}
env = {
"MYSQL_ROOT_PASSWORD" = "password"
}
config {
image = "hashicorp/mysql-portworx-demo:latest"
ports = ["db"]
}
}
network {
port "db" {
static = 3306
}
}
}
}
具体说明如下:
•volume "mysql" {
: 指定要使用的 volume, 类似于 K8s 中的 PV, 这里具体是:•type = "host"
: Nomad Host Volume 类型•read_only = false
: 非只读•source = "mysql"
: source 是 Nomad Client 里配置的host_volume "mysql"
•volume_mount {
: Docker Driver 中的 volume_mount
块,指定挂载到容器中的具体路径,类似于 K8s 中的 PVC:•volume = "mysql"
: 对应的 volume
是上面的 mysql
volume•destination = "/var/lib/mysql"
: 挂载到容器中的 /var/lib/mysql
目录•read_only = false
: volume_mount
块的 read_only
配置
启动该 Job 即可使用 host volume:
代码语言:javascript复制nomad run mysql.nomad.hcl
完成