Nomad 系列-Nomad 挂载存储卷

打印 上一主题 下一主题

主题 761|帖子 761|积分 2283

系列文章

概述

显然,如果 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:
  1. sudo mkdir -p /opt/mysql/data
复制代码
配置 Nomad 客户端

编辑对应的 Nomad 客户端上的 Nomad 配置以创建主机卷。
将 host_volume 块添加到 Nomad 配置的 client 块:
  1.   host_volume "mysql" {
  2.     path      = "/opt/mysql/data"
  3.     read_only = false
  4.   }
复制代码
保存,然后在此客户端上重新启动 Nomad 服务,以激活主机卷。在客户端上,您可以使用 nomad node status 命令验证主机卷是否已配置,如下所示:
  1. $ nomad node status -short -self
  2. ID           = 12937fa7
  3. Name         = ip-172-31-15-65
  4. Class        = <none>
  5. DC           = dc1
  6. Drain        = false
  7. Eligibility  = eligible
  8. Status       = ready
  9. Host Volumes = mysql
  10. Drivers      = docker,exec,java,mock_driver,raw_exec,rkt
  11. ...
复制代码
Job 使用 Nomad 主机卷

以一个 MySQL Job - mysql.nomad.hcl 为例,示例如下:
  1. job "mysql-server" {
  2.   type        = "service"
  3.   group "mysql-server" {
  4.     count = 1
  5.     volume "mysql" {
  6.       type      = "host"
  7.       read_only = false
  8.       source    = "mysql"
  9.     }
  10.     task "mysql-server" {
  11.       driver = "docker"
  12.       volume_mount {
  13.         volume      = "mysql"
  14.         destination = "/var/lib/mysql"
  15.         read_only   = false
  16.       }
  17.       env = {
  18.         "MYSQL_ROOT_PASSWORD" = "password"
  19.       }
  20.       config {
  21.         image = "hashicorp/mysql-portworx-demo:latest"
  22.         ports = ["db"]
  23.       }
  24.     }
  25.     network {
  26.       port "db" {
  27.         static = 3306
  28.       }
  29.     }
  30.   }
  31. }
复制代码
具体说明如下:

  • 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:
  1. nomad run mysql.nomad.hcl
复制代码
完成
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王柳

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表