Nomad 系列 -Nomad 挂载存储卷

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Nomad 系列 -Nomad 挂载存储卷

概述

显然,如果 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
BASH

配置 Nomad 客户端

编辑对应的 Nomad 客户端上的 Nomad 配置以创建主机卷。

host_volume 块添加到 Nomad 配置的 client 块:

host_volume "mysql" {
  path      = "/opt/mysql/data"
  read_only = false
}
HCL

保存,然后在此客户端上 重新启动 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
...
BASH

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
      }
    }
  }
}
HCL

具体说明如下:

  • 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
BASH

完成🎉🎉🎉

总结

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

📚️参考文档

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 应用服务中间件 nginx
Docker系列-5种方案超详细讲解docker数据存储持久化(volume,bind mounts,NFS等)
Docker系列-5种方案超详细讲解docker数据存储持久化(volume,bind mounts,NFS等)
|
3月前
|
存储 Kubernetes 调度
使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
60 0
|
6月前
|
NoSQL 网络协议 Redis
Nomad 系列 -Nomad 网络模式
Nomad 系列 -Nomad 网络模式
|
6月前
|
存储 Kubernetes 数据安全/隐私保护
|
6月前
|
存储 安全 Linux
|
存储 Kubernetes Cloud Native
实现 Kubernetes 动态LocalVolume挂载本地磁盘
在 Kubernetes 体系中,存在大量的存储插件用于实现基于网络的存储系统挂载,比如NFS、GFS、Ceph和云厂商的云盘设备。但在某些用户的环境中,可能无法或没有必要搭建复杂的网络存储系统,需要一个更简单的存储方案。另外网络存储系统避免不了性能的损耗,然而对于一些分布式数据库,其在应用层已经实现了数据同步和冗余,在存储层只需要一个高性能的存储方案。 在这些情况下如何实现Kubernetes 应用的数据持久化呢?
1685 0
KUBERNETES05_NFS坏境搭建、PV、PVC挂载目录、ConfigMap挂载文件、Secret挂载敏感信息(二)
KUBERNETES05_NFS坏境搭建、PV、PVC挂载目录、ConfigMap挂载文件、Secret挂载敏感信息(二)
227 0
KUBERNETES05_NFS坏境搭建、PV、PVC挂载目录、ConfigMap挂载文件、Secret挂载敏感信息(二)
|
存储 数据可视化 应用服务中间件
【Docker】 Volume存储配置
对于容器来说,持久化存储十分重要,各种集群提供了不同的存储配置
566 0
【Docker】 Volume存储配置
|
Docker 容器
Docker中未指定挂载点容器间volume卷的数据共享
一 背景 在实际使用过程中,我们可能会经常遇到容器间数据共享的情况,怎么处理呢?通过 docker 命令中的一些选项,我们即可完成容器间的数据共享。 二 实验步骤 2.1 创建容器 容器一:gysl-1 [root@dev ~]# docker run -it --rm --name gysl-1.
1256 0
|
存储 Kubernetes 关系型数据库
如何在 Kubernetes 环境中搭建 MySQL(四):使用 StorageClass 挂接 RBD
MySQL + Kubernetes 1. 简介 在系列文章的第三篇中,讲到了如何使用 PV 和 PVC 挂载 RBD 上建立好的块存储镜像,但这还是不足以满足 cloud native 环境下的需求,试想如果部署一个应用,需要申请十个 R...
1916 0