Nomad 系列-Nomad 挂载存储卷

nomad,系列,挂载,存储 · 浏览次数 : 85

小编点评

## Nomad 主机卷简介 Nomad 主机卷是管理 Nomad 集群内运行的有状态工作负载的存储。它提供了一种与工作负载无关的方式来指定资源,可用于 Nomad 驱动程序,如 exec 、java 和 docker 。 **主要功能:** * 管理 Nomad 集群内运行的有状态工作负载的存储 * 提供了一种与工作负载无关的方式来指定资源 * 可用于 Nomad 驱动程序,如 exec 、java 和 docker **步骤创建主机卷:** 1. 在 Nomad 配置中创建 `host_volume` 块 2. 将 `host_volume` 添加到 `client` 块中 3. 重启 Nomad 服务 **使用示例:** ``` host_volume "mysql" { path = "/opt/mysql/data" read_only = false } ``` **用法:** * 创建一个将此卷挂载到 Docker MySQL 容器的作业 * 在主机卷中写入数据 **其他说明:** * 可以在 Nomad 配置中设置 `host_volume` 的默认值 * 使用 `read_only` 参数控制主机卷的读写状态

正文

系列文章

概述

显然,如果 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 驱动程序,如 execjavadocker

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:

nomad run mysql.nomad.hcl

完成🎉🎉🎉

总结

在本文中,使用客户端本地目录在 Nomad 客户端上配置了主机卷。我们创建了一个将此卷挂载到 Docker MySQL 容器的作业,并可以在主机卷中写入数据。并为后文 Nomad + Traefik + Tailscale 打下基础。

📚️参考文档

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

与Nomad 系列-Nomad 挂载存储卷相似的内容:

Nomad 系列-Nomad 挂载存储卷

## 系列文章 * [Nomad 系列文章](https://ewhisper.cn/tags/Nomad/) ## 概述 显然,如果 Nomad 要运行有状态存储,那么挂载存储卷就是必备功能。 Nomad 允许用户通过多种方式将持久数据从本地或远程存储卷装载到任务环境中: * 容器存储接口(CSI

Nomad 系列-Nomad+Traefik+Tailscale 集成实现零信任安全

## 系列文章 * [Nomad 系列文章](https://ewhisper.cn/tags/Nomad/) * [Traefik 系列文章](https://ewhisper.cn/tags/Traefik/) * [Tailscale 系列文章](https://ewhisper.cn/tag

Nomad系列-Nomad网络模式

系列文章 Nomad 系列文章 概述 Nomad 的网络和 Docker 的也有很大不同, 和 K8s 的有很大不同. 另外, Nomad 不同版本(Nomad 1.3 版本前后)或是否集成 Consul 及 CNI 等不同组件也会导致网络模式各不相同. 本文详细梳理一下 Nomad 的主要几种网络

Nomad 系列-安装

## 系列文章 * [Nomad 系列文章](https://ewhisper.cn/tags/Nomad/) ## Nomad 简介 开新坑!近期算是把自己的家庭实验室环境初步搞好了,终于可以开始进入正题研究了。 首先开始的是 HashiCorp Nomad 系列,欢迎阅读。 关于 Nomad 的

Nomad 系列-快速上手

## 系列文章 * [Nomad 系列文章](https://ewhisper.cn/tags/Nomad/) ## Nomad 重要术语 ![Nomad Terms](https://img2023.cnblogs.com/other/3034537/202309/3034537-20230906

大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad

前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介 大规模 IoT 边缘容器集群管理的几种架构-1-Rancher+K3s 📚️Reference: IoT 边缘计算系列文章 HashiCorp 解决方案 - Nomad + Docker 简介 Nomad: 一个简单而灵

大规模 IoT 边缘容器集群管理的几种架构-3-Portainer

前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介 大规模 IoT 边缘容器集群管理的几种架构-1-Rancher+K3s 大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad 大规模 IoT 边缘容器集群管理的几种架构-3-Portai

大规模 IoT 边缘容器集群管理的几种架构-4-Kubeedge

前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介 大规模 IoT 边缘容器集群管理的几种架构-1-Rancher+K3s 大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad 大规模 IoT 边缘容器集群管理的几种架构-3-Portai

大规模 IoT 边缘容器集群管理的几种架构-5-总结

前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介 大规模 IoT 边缘容器集群管理的几种架构-1-Rancher+K3s 大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad 大规模 IoT 边缘容器集群管理的几种架构-3-Portai