云原生时代下的轻量级利器:Nomad 集群管理与微服务部署调度 2024-09-22 作者 C3P00 👋 在云原生、容器化、微服务、服务网格等概念风靡的当下,Kubernetes 已经成为了云原生计算平台的事实标准。但 Kubernetes 的学习曲线较高,而且随着其功能不断扩展,维护成本也随之增加。那么,是否所有场景都需要部署一个庞大的 Kubernetes 集群呢?是否有更轻量级的方案能够满足我们的需求? 💡 答案是肯定的!Hashicorp 公司推出的 Nomad 工具就提供了轻量级的集群管理和微服务部署调度方案,它足够灵活,能够满足各种场景下的需求。 🚀 本文将带你深入探索 Nomad 的世界,并通过实际案例演示如何使用 Nomad 实现集群管理和微服务部署调度。 一. Nomad 集群的搭建:轻装上阵,快速起航 🏗️ Nomad 是一个基于 Go 语言实现的集群管理和工作负载调度器,它支持 Docker 容器、虚拟机、原生可执行程序等多种驱动形式的工作负载调度,并支持跨数据中心调度。 🤝 Nomad 与 Consul 和 Vault 紧密协作,分别负责服务发现和密钥管理,这使得 Nomad 更加轻量级,调度性能更高。 🚀 下面我们将通过基于 Consul 自动建立 Nomad 集群的方式,快速搭建一个 Nomad 集群。 1. Consul 集群启动 🚀 首先,我们需要启动一个 Consul 集群。在之前的文章中,我们已经详细介绍了 Consul 集群的搭建方法。这里,我们直接列出步骤,不再赘述。 💻 在每个节点上下载 Consul 1.4.4 版本: # wget -c https://releases.hashicorp.com/consul/1.4.4/consul_1.4.4_linux_amd64.zip # unzip consul_1.4.4_linux_amd64.zip # cp consul /usr/local/bin # consul -v 🚀 启动 Consul 集群: # nohup consul agent -server -ui -dns-port=53 -bootstrap-expect=3 -data-dir=~/.bin/consul-install/consul-data -node=consul-1 -client=0.0.0.0 -bind=172.16.66.102 -datacenter=dc1 > consul-1.log & 2>&1 # nohup consul agent -server -ui -dns-port=53 -bootstrap-expect=3 -data-dir=/root/consul-install/consul-data -node=consul-2 -client=0.0.0.0 -bind=172.16.66.103 -datacenter=dc1 -join 172.16.66.102 > consul-2.log & 2>&1 # nohup consul agent -server -ui -dns-port=53 -bootstrap-expect=3 -data-dir=/root/consul-install/consul-data -node=consul-3 -client=0.0.0.0 -bind=172.16.66.104 -datacenter=dc1 -join 172.16.66.102 > consul-3.log & 2>&1 👀 验证 Consul 集群是否启动成功: # consul members # consul operator raft list-peers 2. DNS 设置(可选) 🌐 如果采用基于 Consul DNS 的服务发现方式,则需要在每个 Nomad client 节点上设置 DNS。 💻 在每个节点上创建和编辑 /etc/resolvconf/resolv.conf.d/base 文件,添加以下内容: nameserver {consul-1-ip} nameserver {consul-2-ip} 🚀 重启 resolvconf 服务: # /etc/init.d/resolvconf restart 3. 基于 Consul 集群引导启动 Nomad 集群 🚀 在每个节点上下载 Nomad: # wget -c https://releases.hashicorp.com/nomad/0.8.7/nomad_0.8.7_linux_amd64.zip # unzip nomad_0.8.7_linux_amd64.zip.zip # cp ./nomad /usr/local/bin # nomad -v 💻 创建 Nomad 配置文件 agent.hcl: // agent.hcl data_dir = "/root/.bin/nomad-install/nomad.d" server { enabled = true bootstrap_expect = 3 } client { enabled = true } 🚀 启动 Nomad 集群: # nohup nomad agent -config=/root/.bin/nomad-install/agent.hcl > nomad-1.log & 2>&1 # nohup nomad agent -config=/root/.bin/nomad-install/agent.hcl > nomad-2.log & 2>&1 # nohup nomad agent -config=/root/.bin/nomad-install/agent.hcl > nomad-3.log & 2>&1 👀 验证 Nomad 集群是否启动成功: # nomad server members # nomad operator raft list-peers # nomad node-status 📊 Nomad 还提供一个 UI 界面 (http://nomad-node-ip:4646/ui),可以直观地查看 Nomad 集群的状态,包括 server、clients、工作负载 (job) 的情况。 二. 部署工作负载:轻量级调度,高效运行 🏗️ Nomad 通过 Job 文件来描述工作负载,并使用 Job 相关子命令来完成所有关于工作负载的操作。 🚀 下面我们将使用一个简单的 HTTP 后端服务示例,演示如何使用 Nomad 部署工作负载。 1. Job 文件定义 💻 创建 httpbackend-1.nomad Job 文件: // httpbackend-1.nomad job "httpbackend" { datacenters = ["dc1"] type = "service" group "httpbackend" { count = 2 task "httpbackend" { driver = "docker" config { image = "bigwhite/httpbackendservice:v1.0.0" port_map { http = 8081 } logging { type = "json-file" } } resources { network { mbits = 10 port "http" {} } } service { name = "httpbackend" port = "http" } } } } 💡 Job 文件定义了 Job、Group 和 Task 的层次关系。 Job: 描述一个工作负载,例如一个 HTTP 后端服务。 Group: 包含一组要放在同一个集群中调度的 Task。 Task: 由其驱动程序 (driver) 在 Nomad client 节点上执行的命令、服务、应用程序或其他工作负载。 2. Job 计划与执行 🚀 使用 nomad job plan 命令进行 dry-run,检查 Job 文件格式是否正确,以及 Nomad 集群是否有足够的资源来创建和调度新的工作负载: # nomad job plan httpbackend-1.nomad 🚀 使用 nomad job run 命令正式创建和调度 Job: # nomad job run httpbackend-1.nomad 3. Job 状态查看 👀 使用 nomad job status 命令查看 Job 的创建情况以及某个 Job 的详细状态信息: # nomad job status 三. 总结:轻量级、灵活、高效 🎉 Nomad 提供了一个轻量级、灵活、高效的集群管理和微服务部署调度方案,它可以帮助我们快速搭建和管理集群,并轻松部署和调度各种工作负载。 💡 与 Kubernetes 相比,Nomad 的学习曲线更低,部署和维护成本更低,同时它也拥有足够的灵活性,能够满足各种场景下的需求。 🚀 在云原生时代,Nomad 作为一种轻量级利器,将为我们提供更便捷、更高效的集群管理和微服务部署调度体验。 参考文献 使用nomad实现集群管理和微服务部署调度 | Tony Bai 😊 希望本文能够帮助你更好地理解和使用 Nomad!
👋 在云原生、容器化、微服务、服务网格等概念风靡的当下,Kubernetes 已经成为了云原生计算平台的事实标准。但 Kubernetes 的学习曲线较高,而且随着其功能不断扩展,维护成本也随之增加。那么,是否所有场景都需要部署一个庞大的 Kubernetes 集群呢?是否有更轻量级的方案能够满足我们的需求?
💡 答案是肯定的!Hashicorp 公司推出的 Nomad 工具就提供了轻量级的集群管理和微服务部署调度方案,它足够灵活,能够满足各种场景下的需求。
🚀 本文将带你深入探索 Nomad 的世界,并通过实际案例演示如何使用 Nomad 实现集群管理和微服务部署调度。
一. Nomad 集群的搭建:轻装上阵,快速起航
🏗️ Nomad 是一个基于 Go 语言实现的集群管理和工作负载调度器,它支持 Docker 容器、虚拟机、原生可执行程序等多种驱动形式的工作负载调度,并支持跨数据中心调度。
🤝 Nomad 与 Consul 和 Vault 紧密协作,分别负责服务发现和密钥管理,这使得 Nomad 更加轻量级,调度性能更高。
🚀 下面我们将通过基于 Consul 自动建立 Nomad 集群的方式,快速搭建一个 Nomad 集群。
1. Consul 集群启动
🚀 首先,我们需要启动一个 Consul 集群。在之前的文章中,我们已经详细介绍了 Consul 集群的搭建方法。这里,我们直接列出步骤,不再赘述。
💻 在每个节点上下载 Consul 1.4.4 版本:
🚀 启动 Consul 集群:
👀 验证 Consul 集群是否启动成功:
2. DNS 设置(可选)
🌐 如果采用基于 Consul DNS 的服务发现方式,则需要在每个 Nomad client 节点上设置 DNS。
💻 在每个节点上创建和编辑
/etc/resolvconf/resolv.conf.d/base
文件,添加以下内容:🚀 重启 resolvconf 服务:
3. 基于 Consul 集群引导启动 Nomad 集群
🚀 在每个节点上下载 Nomad:
💻 创建 Nomad 配置文件
agent.hcl
:🚀 启动 Nomad 集群:
👀 验证 Nomad 集群是否启动成功:
📊 Nomad 还提供一个 UI 界面 (http://nomad-node-ip:4646/ui),可以直观地查看 Nomad 集群的状态,包括 server、clients、工作负载 (job) 的情况。
二. 部署工作负载:轻量级调度,高效运行
🏗️ Nomad 通过 Job 文件来描述工作负载,并使用 Job 相关子命令来完成所有关于工作负载的操作。
🚀 下面我们将使用一个简单的 HTTP 后端服务示例,演示如何使用 Nomad 部署工作负载。
1. Job 文件定义
💻 创建
httpbackend-1.nomad
Job 文件:💡 Job 文件定义了 Job、Group 和 Task 的层次关系。
2. Job 计划与执行
🚀 使用
nomad job plan
命令进行 dry-run,检查 Job 文件格式是否正确,以及 Nomad 集群是否有足够的资源来创建和调度新的工作负载:🚀 使用
nomad job run
命令正式创建和调度 Job:3. Job 状态查看
👀 使用
nomad job status
命令查看 Job 的创建情况以及某个 Job 的详细状态信息:三. 总结:轻量级、灵活、高效
🎉 Nomad 提供了一个轻量级、灵活、高效的集群管理和微服务部署调度方案,它可以帮助我们快速搭建和管理集群,并轻松部署和调度各种工作负载。
💡 与 Kubernetes 相比,Nomad 的学习曲线更低,部署和维护成本更低,同时它也拥有足够的灵活性,能够满足各种场景下的需求。
🚀 在云原生时代,Nomad 作为一种轻量级利器,将为我们提供更便捷、更高效的集群管理和微服务部署调度体验。
参考文献
😊 希望本文能够帮助你更好地理解和使用 Nomad!