Nomad 系列-快速上手

打印 上一主题 下一主题

主题 850|帖子 850|积分 2550

系列文章

Nomad 重要术语


Nomad 安装设置相关术语


  • agent - 代理。Agent 是在 Server(服务器) 或 Client(客户端) 模式下运行的 Nomad 进程。
  • client - 客户端。Nomad 客户端负责运行分配给它的任务。它还向服务器注册自己,并监视要分配的任何工作。当运行代理时,客户端可以被称为节点 (Node)。
  • server - 服务器端。Nomad 服务器管理所有作业和客户端,监视任务,并控制哪些任务被放置在哪些客户端节点上。服务器之间相互复制数据以确保高可用性。
  • dev_agent - 开发(模式)代理是一种代理配置,它为运行 Nomad 的单节点集群提供了有用的默认值。它在服务器和客户端模式下运行,并且不会将其群集状态持久化到磁盘,这允许代理从可重复的干净状态启动,而不必在运行之间删除基于磁盘的状态。
Nomad 集群通常由三到五个服务器代理和许多客户端代理组成。
Nomad 使用的相关术语

在 Nomad 调度和运行工作负载的过程中,您将遇到以下术语。

  • task - 任务是 Nomad 中最小的工作单元(类似 K8s 中的 Pod)。任务由 task drivers 执行,drivers 包括 docker 和 exec 等,这使得 Nomad 可以灵活地支持任务类型。任务指定其所需的任务驱动程序、驱动程序的配置、约束 (constraints) 和所需的资源。
  • group - 组是在同一 Nomad 客户端上运行的一系列任务。(我个人认为类似于 K8s 中的 Deployment/Statefulset/Daemonset/Job)
  • job - 作业是 Nomad 的核心控制单元,它定义了应用程序及其配置。它可以包含一个或多个任务。(我个人认为 job 类似于 K8s 中的多个资源 yaml manifest 集合。包括:SVC/Ingress/ConfigMap/Deploy/PVC...)
  • job specification - 作业规范,也称为 jobspec,定义了 Nomad 作业的模式。它描述了作业的类型、作业运行所需的任务和资源、作业信息(如作业可以在哪些客户端上运行)等。
  • allocation - 分配是作业中的任务组与客户端节点之间的映射。当运行作业时,Nomad 将选择能够运行它的客户端,并在机器上为作业中定义的任务组中的任务分配资源。(我认为类似于 K8s 中已经在运行的 pod.)
应用程序在 jobspec 中定义为具有 jobspec 的任务组 (groups of tasks),并且一旦提交给 Nomad,就会创建一个作业 (job) 沿着该 jobspec 中定义的每个组的分配 (allocation)。
Nomad 上的应用工作流

典型的应用程序工作流程涉及几个步骤,并从 Nomad 外部开始。
在 Nomad 上运行的任何应用程序的先决条件是具有工作负载工件。Nomad 支持各种工件,包括 Docker 镜像原始二进制文件 raw binariesJava 应用程序 和使用 QEMU 的虚拟机映像。
Nomad 不会创建这些应用程序工件,但可以使用 CircleCI,GitHub Actions 或本地构建等 CI 工具来创建工件,然后将其推送到存储库,Nomad 可以在调度作业时从中检索它们。
创建应用程序后,工作流将继续使用 Nomad。


  • 创建 job spec - 作业规范包含应用程序所需的任务,包括工件驻留的位置、网络配置(如端口和服务定义)、所需实例数量等等。
  • 部署 job - 作业规范将提交给 Nomad,并根据作业配置在一个或多个客户端上为作业安排分配。
  • 更新和重新部署 job - 更新应用程序代码或作业规范,然后重新提交给 Nomad 进行调度。
快速入门

接下来我们快速上手 Nomad, 主要展示如何部署示例应用程序。
前提


  • Docker 已安装
  • Nomad 二进制(包括 CLI) 已安装
  • (可选)CNI 插件已安装
  • Nomad 集群已创建并运行(至少包括 1 个 Server 和 1 个 Client)
部署示例应用程序 Job

这里我们直接使用 git clone  Nomad 官方提供的 Demo:
  1. git clone https://github.com/hashicorp-education/learn-nomad-getting-started.git
  2. cd learn-nomad-getting-started
  3. git checkout -b nomad-getting-started v1.1
复制代码
示例应用程序在 Docker 容器中运行,由一个数据库和一个从数据库读取数据的 Web 前端组成。您将使用 参数化批处理作业 parameterized batch job 设置数据库,然后使用 定期批处理作业 periodic batch job 启动其他将数据写入数据库的短期作业。
Job 类型

Service(服务) 作业用于长期运行的服务(类似于 K8s 中的 Deployment),这些服务一直运行到显式停止。
Batch 作业是指在成功退出之前一直运行的短期作业(类似于 K8s 中的 Job 和 CronJob)。

  • 参数化 (parameterized) 块允许您配置批处理作业以接受必需或可选的输入。您可以使用 nomad job dispatch 命令触发作业。
  • 周期性 (periodic) 块允许您安排 Nomad 作业在设置的时间运行。这些也被称为 Nomad cron jobs(类似于 K8s 中的 CronJob)。
示例应用程序 Pytechco 概述

示例应用程序 pytechco 模拟在一家技术公司工作的员工。他们联机,完成任务,然后注销。
跳转到本地计算机上示例 repo 的 jobs 目录:
  1. cd jobs
复制代码
下面每个组成应用程序的 jobspec 文件都将 driver 属性设置为 docker ,并使用 image 属性指定存储在 GHCR 中 config 块中的镜像。而 Redis 作业使用了 Docker Hub 上托管的官方 Redis 镜像。
Redis 服务

jobs/pytechco-redis.nomad.hcl 内容如下:
  1. task "redis-task" {
  2.   driver = "docker"
  3.   config {
  4.     image = "redis:7.0.7-alpine"
  5.   }
  6. }
复制代码
pytechco-redis.nomad.hcl -此服务作业运行并将 Redis 数据库暴露为 Nomad 服务,以供其他应用程序组件连接。jobspec 将类型设置为 service ,配置 Nomad service 块(类似于 K8s 中的 Service) 以使用 Nomad 原生服务发现 (Nomad native service discovery),并创建名为 redis-svc 的服务。具体如下:
  1. job "pytechco-redis" {
  2.   type = "service"
  3.   group "ptc-redis" {
  4.     count = 1
  5.     network {
  6.       port "redis" {
  7.         to = 6379
  8.       }
  9.     }
  10.     service {
  11.       name     = "redis-svc"
  12.       port     = "redis"
  13.       provider = "nomad"
  14.     }
  15.     task "redis-task" {
  16.       driver = "docker"
  17.       config {
  18.         image = "redis:7.0.7-alpine"
  19.         ports = ["redis"]
  20.       }
  21.     }
  22.   }
  23. }
复制代码
以上代码说明如下:
<ul>type = "service": service type 的 job, 类似于 K8s 中的 Deployment
group "ptc-redis": group 块 ptc-redis
count = 1: 副本数为 1
to = 6379: 位于 network 块中,指示连接到 (to) 容器中的 6379 端口 (host 或 bridge 端口随机分派)
service {: service 块,类似于 K8s 中的 Service
provider = "nomad": Nomad 从 1.3 版本及以后,新增 Nomad native service.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表