一款比 K8S 更好用的编排工具——Nomad 中运行 Docker

Nomad 简介

Nomad 是一款基于开源,功能强大的调度程序和集群编排引擎。可以轻松管理从单机到大规模集群的各种容器和非容器化应用程序,实现快速部署和跨平台运行。

Nomad 主要特点

  • 作为单个二进制文件运行,资源占用少,
  • 支持将资源管理和调度集成到一个单独的系统中,
  • 支持多种驱动程序运行 job,包括 Windows、Java、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 已经启动完成。

编写 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

注意⚠️:

  • Job 的伸缩、扩容、调度等都可以基于 UI 界面操作
  • 如果 Client 可能执行失败,是因为需要上 DockerHub 拉取镜像失败造成,这种情况,可以手动先拉取进行后再执行“Run Job”,拉取地址为:docker pull nginx:latest

Nomad 调度原理

流程比较简单,我们通过一个 Nomad 集群 Docker 调度时序图进行说明,具体如下:

Nomad(Server)发起任务,Nomad(Client)执行任务,UI 可以进行所有的管理工作。


以上就是本期的全部内容,笔者荒生,一名资深的技术开发,谢谢大家的观看,点赞、评论、加关注你的支持就是笔者的动力,有问题也可以私信笔者留言询问

  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值