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 能够进行所有的管理工作。
以上便是本期的全部内容,笔者荒生
,一名资深的技术开发,谢谢大家的观看,点赞、谈论、加重视
你的支撑便是笔者的动力,有问题也能够私信笔者
或留言问询
。