云原生时代下的轻量级利器: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 版本:

# 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 作为一种轻量级利器,将为我们提供更便捷、更高效的集群管理和微服务部署调度体验。

参考文献

  1. 使用nomad实现集群管理和微服务部署调度 | Tony Bai

😊 希望本文能够帮助你更好地理解和使用 Nomad!

0 0 投票数
Article Rating
订阅评论
提醒
0 评论
最多投票
最新 最旧
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x