
容器编排领域出现了一个新的参与者。HashiCorp的Nomad是最近加入的一个技术库,旨在安排和协调服务器/客户端关系中的任务。Nomad被描述为运行和维护简单,正在吸引那些寻找Kubernetes替代品的开发者的注意。
但是,为什么要使用Nomad而不是Kubernetes,以及何时使用?让我们看看Nomad和Kubernetes的区别,它们的主要特点、好处和缺点。
目录
容器化的重要性
什么是Kubernetes?
什么是Nomad?
Nomad与Kubernetes:主要区别
➤Nomad与Kubernetes-流行程度
➤Nomad vs Kubernetes-安装
➤ Nomad与Kubernetes-可扩展性
➤Nomad vs Kubernetes-联网
➤ Nomad vsKubernetes-要求简介
➤ Nomad vs Kubernetes-编码
➤ Nomad vsKubernetes-负载平衡
➤Nomad vs Kubernetes-集成
➤ Nomad vsKubernetes-图形用户界面(GUI)
➤Nomad vs Kubernetes:如何选择?
➤Nomad和Kubernetes
结论
容器化的重要性
首先,什么是容器化?应用程序需要在各种平台上运行,并与不同的操作系统一起工作,同时使用自己的编码语言。容器是承载应用程序代码、其库和依赖关系的包。它们是连接应用程序和操作系统的轻量级组件,因此代码可以在任何环境中运行。
容器协调工具是容器的调度、部署和网络的控制中心。最流行的是。
- Kubernetes
- Openshift
- Docker Swarm
- 中继器
- Helios
协调的主要好处是自动化。协调工具降低了管理、扩展和监控大量容器的复杂性,加快了开发人员和操作人员的开发和部署周期,提高了生产力,并最大限度地减少了人为错误。
额外的好处是降低成本,因为它改善了硬件操作性和资源使用。由于在部署失败的情况下自动回滚,还可以减少停机的风险。
在所有可用的协调工具中,Kubernetes是最受欢迎的,被认为是行业标准。
什么是Kubernetes?
Kubernetes(又称 "Kube "或k8s)是一个用Go语言编写的开源容器编排平台。它最初由谷歌在2014年开发,但目前由云原生计算基金会(CNCF)维护。
根据调查,Kubernetes的使用份额已经从2014年的58%增长到2021年的83%,是迄今为止最受欢迎的编排技术。领先的公共云供应商,如亚马逊网络服务(AWS)、谷歌云平台、IBM云和微软Azure,在他们的套餐中包括管理的Kubernetes服务。
Kubernetes的受欢迎程度在过去几年里不断上升,部分原因是YAML的使用。像Ruby、Python或Javascript这样的语言比较复杂,提倡基础设施作为代码;而YAML的重点是基础设施作为数据。
Kubernetes的基本单位是Pod。一个Pod是一个或一组具有共享存储和网络资源的容器。
这种转变允许更好的可扩展性、安全性、控制以及与云供应商更好的整合。Kubernetes自身的快速开发周期,每隔几个月就有新的版本推出,促进了创新,快速适应开发者的需求,这要归功于强大的社区努力,有大量的团体投入到Kubernetes项目的发展中。
什么是Nomad?
Nomad是HashiCorps对寻求强大而灵活的应用部署或容器协调平台的开发者的回答。
Nomad被誉为易于运行和维护,它与云无关,被设计用来处理多数据中心和多地区的部署,具有很高的扩展潜力。它被称为 "没有复杂性的Kubernetes",但它正以其自身的优点为自己赢得了声誉。
与其他协调工具相比,Nomad非常容易安装,因为它是一个预编译的二进制文件,可以从本地机器上随时工作。它在各种环境中运行任何类型的应用程序,使用常见的任务驱动作为插件,如Containerd、Windows IIS、Firecracker、Podman、Docker等等,并且不依赖任何外部服务进行存储或协调。
每一个安装都可以根据项目的需要来定制特定功能的插件。Nomad的集成计划主要接受用Go编码的插件。
Nomad可以作为一个传统的容器协调器工作,但也可以管理非容器化的应用程序,这是它对开发者最强烈的吸引力之一。应用程序、节点和驱动程序的故障会被自动处理,保留每个作业的完整定义和部署历史,以便于回滚和比较。Nomad中最小的部署单位被称为 "任务",它们相当于Kubernetes中的 "Pod"。
但Nomad最强的卖点是能够充分利用硬件,提高性能和可扩展性。HashiCorp通过"200万个容器挑战"表明了他们对这一功能的看法。
Nomad是开源的,有企业版,并被Trivago、Pandora、Target、eBay和Roblox采用。由于其背后有一个蓬勃发展的开发者社区,Nomad正在成为既定协调器的一个重要替代品。
Kubernetes与Nomad:主要区别
Nomad和Kubernetes之间的主要区别是Nomad的功能更多、更轻。Nomad可以仅仅作为一个简单的任务调度器工作,也可以根据项目规格承担更重的协调角色。Nomad是由HashiCorp生产的互补性工具组成的套件的一部分。
- Terraform,用于快速的基础设施开发。
- Consul,用于自动服务网络。
- Vault,Hashicorp的秘密管理工具。
Kubernetes是一个全功能的平台,包括所有的组件。Nomad省去了大部分这些组件,如果有必要,可以在以后添加,最大限度地减少对外部依赖的需求。

流行性
在过去的几年里,Kubernetes成为了容器编排的代名词。根据2021年红帽公司的调查,85%的IT领导同意Kubernetes对云原生应用战略 "重要"、"非常重要 "或 "极其重要"。Nomad仍在积累人气,但它已经在开发者和公司中获得了吸引力。
谈到容器编排,这不是用户数量的问题,而是这些平台处理多少流量的问题。Kubernetes在今天的大多数数字通信中都是无处不在的。尽管如此,Nomad仍然是Cloudflare开发环境的一部分,这家公司负责路由全球10%的互联网流量,是Roblox和Pandora扩展的基石。它可能不像Kubernetes那样被普遍使用,但它已经有了巨大的影响力。
安装
Nomad是轻量级的,易于安装。它以简单的二进制文件的形式出现,可以快速部署在本地开发机或云环境中,具有相同的一致性和功能。
Kubernetes需要更多的时间和资源来部署,而且安装过程也更复杂。还有其他较轻的Kubernetes实现,只涵盖了全部功能中的几个。这些用于快速开发和测试,但它们不能很好地转化为生产阶段,因为它们很容易出现配置不一致的情况。
可扩展性
Kubernetes(截至发布日期)声称支持高达5000个节点的集群,总共有30万个容器,并且不超过15万个pod。
Nomad显示它可以扩展到10000个节点以上的集群规模。而在2020年提到的200万个容器的挑战,验证了他们声称的卓越的可扩展性性能。
联网
在Kubernetes中,pod通过一个点对点的网络进行通信。这种网络模型需要两个CIDRs(无类域间路由器):一个用于节点IP寻址,另一个用于服务。
在Nomad中,每个任务默认得到一个IP。然后,在Consul组件的协助下,使用主机联网、动态或静态端口转发,可以直接或通过挎包代理访问各自的端口。
要求简介
Kubernetes需要更多的硬件和更多的人员,被用于高调的长期项目,投资更大,在公共云环境中,如谷歌云平台、Azure或AWS。
Nomad适合规模较小的团队,协调能力有限,开发期限较短,在混合或企业内部环境中工作。
语言
Kubernetes使用YAML或JSON来定义和部署应用程序。这是一个使用YAML的Job配置的例子:
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
Nomad使用Hashicorp配置语言**(HCL**)。它的主要目的是定义作业,并使构建的定义更加灵活和方便。
HCL既是一种语法,也是一种API,由Hashicorp设计,用于构建结构化的配置格式。它是JSON等序列化格式和围绕Ruby等语言建立的配置格式之间的妥协。它更容易被人类阅读和书写--就像YAML。这里有一个HCL中Nomad的工作配置代码例子:
job "docs" {
datacenters = ["dc1"]
group "example" {
network {
port "http" {
static = "5678"
}
}
task "server" {
driver = "exec"
config {
command = "/bin/http-echo"
args = [
"-listen",
":5678",
"-text",
"hello world",
]
}
}
}
}
负载平衡
负载平衡器将来自互联网的传入流量分配给负责处理请求的前端应用程序。
Kubernetes中最流行的负载平衡解决方案是Ingress,这是一个专门的Kubernetes控制器(与pod太相似)。Ingress包括一套管理流量的规则和一个应用这些规则的守护程序。这些规则可以适应更高级的需求。
Nomad的功能类似于Kubernetes的Ingress控制器,它也能轻松适应配置和规模的变化。
集成
Nomad与Docker一起工作,就像Kubernetes一样,运行非容器化的工作负载(Windows、Java)。
图形用户界面(GUI)
两者都有吸引人的、功能性的仪表盘,提供清晰、直接的管理体验。

Nomad与Kubernetes:如何选择?
Kubernetes是一个强大的组件集合,它们一起工作,整合成一个核心单元。它被设计用来在主机集群中部署、管理和扩展应用容器,就像云原生应用的操作系统。
Nomad开始是一个集群管理器和任务调度器,但它可以连接到其他工具,如Consul,以扩大其功能。它适应不同角色的灵活性使Nomad对硬件和人员资源较少的中型公司很有吸引力。它更容易开始使用,更容易维护,但缺乏社区支持。
但你甚至不需要在Kubernetes和Nomad之间做出选择。
Nomad和Kubernetes
这两个平台可以一起工作,相互补充。Kubernetes被全球公司使用,并被谷歌云平台、Azure和AWS这三个最著名的云供应商作为服务提供,因为它被认为是一个强大的容器编排工具,具有最先进的功能。但Nomad的敏捷性使其成为维护和核心调度的完美选择。
下面是一个比较。
| Kubernetes | Nomad | |
复杂度 | 更加复杂,但提供更高的控制水平 | 更容易开始使用,但更不成熟 |
社区 | 卓越的社区,提供工具、资源和支持 | 缺乏一个重要的社区,因此缺乏资源。 |
成本 | 由于更大的团队和更高的结构要求,潜在的成本更高 | 需要较小的团队,较少的服务器,而且耗时较少 |
工作负载支持 | 专注于Linux容器 | Nomad支持虚拟化、容器化和独立的应用程序(Java、Windows应用程序,甚至二进制。) |
开放性 | 社区支持 | 它与HashiCorp的产品和开发紧密联系在一起 |
结论
容器化领域已经有许多竞争(有时是合作)的选择,迎合了不同的目标和需求。现在我们又多了一个。看起来Nomad不会很快取代Kubernetes的统治地位,但它正在成为一个强大的参与者。
Nomad可以成为许多开发者和公司进入容器协调世界的切入点,他们需要一个轻量级的、简单的、容易适应的解决方案来面对不同的场景,不需要像Kubernetes这样的重量级产品,可以按照自己的节奏发展。