Nomad 简介

Nomad 是一款根据开源,功用强壮的调度程序和集群编列引擎。能够轻松管理从单机到大规模集群的各种容器和非容器化应用程序,完结快速部署和跨平台运转。

Nomad 主要特点

  • 作为单个二进制文件运转,资源占用少,
  • 支撑将资源管理和调度集成到一个独自的体系中,
  • 支撑多种驱动程序运转 job,包括 WindowsJava、VM、Docker 等,
  • 支撑分布式和高可用,
  • 支撑多数据中心,能够跨数据中心调度,
  • 强壮的可伸缩性,可在实际生产环境中扩展到10K+节点的集群(K8S v1.29 是 5k+ ),
  • 支撑插件功用,可与 Terraform、Consul、Vault 无缝集成,用于供给资源分配、服务发现和秘密管理。

Nomad 运转 Docker

今日咱们以nginx:latest为例,演示根据 Nomad 怎么调度和履行 Docker 容器

准备工作

需求确保机器现已装置了 Docker 和 Nomad,假如没有装置能够参考一下装置方法,详细如下:

装置 Docker

以 Ubuntu 体系为例,其他体系装置方法能够参考官网:https://docs.docker.com/desktop/install/mac-install/

# 1.装置依靠
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 2.装备软件
echo 
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu 
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | 
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 3.装置 Docker
sudo apt update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 4.验证 Docker
sudo docker version

装置 Nomad

以 Ubuntu 体系为例,其他体系装置方法能够参考官网:https://developer.hashicorp.com/nomad/install

# 项目目录
cd example_02
# 下载装置包
curl -O 'https://releases.hashicorp.com/nomad/1.7.6/nomad_1.7.6_linux_amd64.zip'
# 解压装置包
unzip nomad_1.7.6_linux_amd64.zip && rm -rf nomad_1.7.6_linux_amd64.zip
# 验证装置包
./nomad --version

# 输出版别信息
# 
# Nomad v1.7.6
# BuildDate 2024-03-12T07:27:36Z
# Revision 594fedbfbc4f0e532b65e8a69b28ff9403eb822e

Nomad 发动 Dev 形式

为了简略运转,咱们以Dev 开发形式的方法运转 Nomad agent。

# 运转开发形式
./nomad agent -dev

# ==> Nomad agent configuration:
...
#        Advertise Addrs: HTTP: 127.0.0.1:4646; RPC: 127.0.0.1:4647; Serf: 127.0.0.1:4648
#             Bind Addrs: HTTP: [127.0.0.1:4646]; RPC: 127.0.0.1:4647; Serf: 127.0.0.1:4648
...
#                Version: 1.7.6
...
#     2024-03-16T23:10:42.857+0800 [DEBUG] http: UI is enabled
...
#     2024-03-16T23:10:45.150+0800 [INFO]  client: node registration complete

经过终端日志能够看到,Server 端和 Client 端都为 true,表明都现已发动成功。

当然咱们也能够查看节点状态,详细如下:

./nomad node status

# ID        Node Pool  DC   Name          Class   Drain  Eligibility  Status
# 9141d0a8  default    dc1  YaoMac.local  <none>  false  eligible     ready

当然,也能够经过 UI 界面进行查看,Client 和 Server 现已发动完结。

一款比 K8S 更好用的编列东西——Nomod 中运转 Docker

一款比 K8S 更好用的编列东西——Nomod 中运转 Docker

编写 Job 文件

在 Nomad 中,应用的编列和运转方法都是经过 Job 文件来描绘,下面是一个web_nginx的 Job 文件例子,详细如下:

job "web_nginx" {
  datacenters = ["dc1"]
  group "web_nginx" {
    count = 1
    task "web_nginx" {
      driver = "docker"
      config {
        image = "nginx:latest"
        port_map {
          http = 80
        }
      }
      resources {
        cores = 1
        memory = 512
      }
      env {
      }
    }
  }
}

在 Job 文件中分为job -> group -> task三层结构,其间task中为终究使命的装备计划,如上:

  • driver 指定了以 Docker 的方法运转;
  • config 指定了依靠的镜像和服务对外露出端口;
  • resources 指定了资源装备计划为 CPU 1核和 MEM 512M;
  • env 指定了环境变量装备,用于在履行使命过程中向 Client 节点传递环境变量参数。

注:完好使命装备,也能够拜访https://github.com/liyaodev/nomad-bootcamp进行下载

提交和履行 Job

提交使命包括两种方法:命令行提交UI提交

./nomad job run ./jobs/web_nginx.hcl

# ==> 2024-03-16T23:33:29+08:00: Monitoring evaluation "094a0f82"
#     2024-03-16T23:33:29+08:00: Evaluation triggered by job "web_nginx"
...
# ==> 2024-03-16T23:33:30+08:00: Monitoring deployment "3b61128e"
#   ⠏ Deployment "3b61128e" in progress...

UI 界面进行上传(点击”Run Job” -> “Upload file” -> “web_nginx.hcl”),详细地址:http://127.0.0.1:4646/ui/jobs

一款比 K8S 更好用的编列东西——Nomod 中运转 Docker

留意⚠️:

  • Job 的伸缩、扩容、调度等都能够根据 UI 界面操作
  • 假如 Client 可能履行失利,是因为需求上 DockerHub 拉取镜像失利形成,这种状况,能够手动先拉取进行后再履行“Run Job”,拉取地址为:docker pull nginx:latest

Nomad 调度原理

流程比较简略,咱们经过一个 Nomad 集群 Docker 调度时序图进行说明,详细如下:

一款比 K8S 更好用的编列东西——Nomod 中运转 Docker

Nomad(Server)发起使命,Nomad(Client)履行使命,UI 能够进行所有的管理工作。


以上便是本期的全部内容,笔者荒生,一名资深的技术开发,谢谢大家的观看,点赞、谈论、加重视你的支撑便是笔者的动力,有问题也能够私信笔者留言问询