原文地址:https://www.imaginarycloud.com/blog/nomad-vs-kubernetes/?fbclid=IwAR1VgUJ4ikO30sDaZv7c9WYaVSPPoqOa5dh_75W8w-xYNtIu56vfgx8rdd8
目录
NOMAD 与 KUBERNETES:比较容器编排工具
容器编排领域出现了一个新参与者。HashiCorp的 Nomad 是最近添加到旨在安排和协调服务器/客户端关系中的任务的技术池中。Nomad 被描述为易于运行和维护,正在吸引寻找 Kubernetes 替代品的开发人员的注意力。
但是为什么要使用 Nomad 而不是 Kubernetes,什么时候使用?让我们来看看Nomad 和 Kubernetes 之间的区别,它们的主要特性、优点和缺点。
容器化的重要性
首先,什么是容器化?应用程序需要运行在各种平台上,并在使用自己的编码语言的同时与不同的操作系统一起工作。容器是承载应用程序代码、其库和依赖项的包。它们是将应用程序连接到操作系统的轻量级组件,因此代码可以在任何环境中运行。
容器编排工具是容器调度、部署和联网的控制中心。最受欢迎的是:
- Kubernetes
- 开班
- Docker Swarm
- 金币
- 赫利俄斯
编排的主要好处是自动化。编排工具降低了管理、扩展和监控大量容器的复杂性,加快了开发人员和运营商的开发和部署周期,提高了生产力,并最大限度地减少了人为错误。
额外的好处是降低了成本,因为它提高了硬件操作性和资源使用率。由于部署失败时的自动回滚,还降低了停机风险。
在所有可用的编排工具中,Kubernetes 是最受欢迎的并且被认为是行业标准。
什么是 Kubernetes?
Kubernetes(又名“Kube”或 k8s)是一个用 Go 编写的开源容器编排平台。它最初由谷歌于 2014 年开发,但目前由云原生计算基金会 (CNCF) 维护。
根据调查,Kubernetes 的使用份额从 2014 年的 58% 增长到 2021 年的 83%,是迄今为止最受欢迎的编排技术。Amazon Web Services (AWS)、Google Cloud Platform、IBM Cloud 和 Microsoft Azure 等领先的公共云提供商在其软件包中包含托管 Kubernetes 服务。
Kubernetes 的流行度在过去几年有所上升,部分归功于 YAML 的使用。Ruby、Python 或 Javascript 等语言更加复杂,并且将基础设施作为代码进行推广;YAML 的重点是将基础设施作为数据。
Kubernetes 的基本单元是 Pods。Pod 是一个或一组共享存储和网络资源的容器。
这种转变可以实现更好的可扩展性、安全性、控制以及与云提供商的改进集成。Kubernetes 自身的快速开发周期,每隔几个月就会推出新版本,促进创新,快速适应开发人员的需求,得益于强大的社区努力,大量团队投资于 Kubernetes 项目的发展。
如果您对 Kubernetes 的工作原理以及它与其他容器化技术的比较感兴趣,我们建议您阅读我们博客中的这些文章:
什么是Nomad?
Nomad是 HashiCorps 为寻求强大而灵活的应用程序部署或容器编排平台的开发人员提供的答案。
Nomad 被认为易于运行和维护,与云无关,旨在以本机处理具有高可扩展性潜力的多数据中心和多区域部署。它被称为“没有复杂性的 Kubernetes”,但它凭借自身的优势而声名鹊起。
与其他编排工具相比,**Nomad 非常易于安装,**因为它可以作为预编译的二进制文件使用,可以在本地机器上运行。它可以在各种环境中运行任何类型的应用程序,使用常见的任务驱动程序作为插件,例如 Containerd、Windows IIS、Firecracker、Podman、Docker等等,并且不依赖任何外部服务进行存储或协调。
每个安装都可以通过特定功能的插件根据项目的需求进行定制。Nomad 的集成程序主要接受用 Go 编码的插件。
Nomad 既可以作为传统的容器编排器工作,也可以管理非容器化的应用程序,这是它对开发人员的最大吸引力之一。应用程序、节点和驱动程序故障会自动处理,保留每个作业的完整定义和部署历史,以便于回滚和比较。Nomad 中最小的部署单元称为“任务”,它们相当于 Kubernetes 中的“Pods”。
但 Nomad 能够充分利用硬件、提高性能和可扩展性的能力最强的卖点。HashiCorp 通过200 万个容器挑战赛在此功能上提出了自己的观点。
Nomad 是开源的,有企业版,被 Trivago、Pandora、Target、eBay 和 Roblox 采用。凭借其背后的蓬勃发展的开发人员社区,Nomad 正在成为成熟的协调器的重要替代品。
Kubernetes 与 Nomad:主要区别
Nomad 和 Kubernetes 的主要区别在于 Nomad更加通用和轻量级。Nomad 可以作为一个简单的任务调度程序工作,也可以根据项目规范承担更重的编排角色。Nomad 是由 HashiCorp 生产的互补工具组成的套件的一部分:
- Terraform,用于快速基础设施开发;
- Consul,用于自动服务联网;
- Vault,Hashicorp 的机密管理工具;
Kubernetes 是一个功能齐全的平台,包含所有组件。Nomad 省略了大部分可以在以后添加的组件,从而最大限度地减少对外部依赖的需求。
来源:HashiCorp Nomad Kubernetes 用户指南
人气
在过去的几年里,Kubernetes 成为容器编排的代名词。根据红帽 2021 年的一项调查,85% 的 IT 领导者同意 Kubernetes 对云原生应用战略“重要”、“非常重要”或“极其重要”。Nomad 仍然很受欢迎,但它在开发人员和公司中越来越受欢迎。
说到容器编排,重点不是用户数量,而是这些平台处理的流量。Kubernetes 一直存在于当今的大多数数字通信中。尽管如此,Nomad 还是Cloudflare开发环境的一部分,该公司负责路由全球 10% 的互联网流量,并且是Roblox和Pandora扩展的基石。它可能不像 Kubernetes 那样常用,但它已经产生了巨大的影响。
安装
Nomad 重量轻且易于安装。它是一个简单的二进制文件,可以在本地开发机器或云环境中快速部署,具有相同的一致性和功能。
Kubernetes 部署需要更多的时间和资源,安装过程也更复杂。还有其他更轻量级的 Kubernetes 实现,它们仅涵盖了部分完整功能。这些用于快速开发和测试,但它们不能很好地转化为生产阶段,因为它们容易出现配置不一致。
可扩展性
Kubernetes(截至发布日期)声称支持多达 5,000 个节点的集群,总共有 300,000 个容器,并且不超过 150,000 个 pod。
Nomad 表明它可以扩展到超过 10,000 个节点的集群大小。2020 年提到的200 万个容器挑战验证了他们声称具有卓越的可扩展性性能。
联网
在 Kubernetes 中,Pod 通过点对点网络进行通信。此网络模型需要两个 CIDR(无类别域间路由器):一个用于节点 IP 寻址,另一个用于服务。
在 Nomad 中,每个任务默认都有一个 IP。然后可以直接或通过 sidecar 代理访问各个端口,在 Consul 组件的帮助下使用主机网络、动态或静态端口转发。
需求概况
Kubernetes 需要更多的硬件和更多的员工,用于在谷歌云平台、Azure 或 AWS 等公共云环境中进行高调、长期、投资更大的项目。
Nomad 适用于较小的团队,用于编排目的的能力有限,开发期限较短,在混合或本地环境中工作。
语言
Kubernetes 使用YAML 或 JSON来定义和部署应用程序。这是使用 YAML 的作业配置示例:
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 是 Hashicorp 设计的一种语法和 API,用于构建结构化配置格式。它是 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",
]
}
}
}
}
负载均衡
负载均衡器将来自 Internet 的传入流量分配到负责处理请求的前端应用程序。
Kubernetes 中最流行的负载均衡解决方案是 Ingress,这是一个专门的 Kubernetes 控制器(与 Pod 非常相似)。Ingress 包括一组管理流量的规则和一个应用它们的守护进程。这些规则可以适应更高级的需求。
Nomad 具有类似于 Kubernetes 的 Ingress 控制器的功能,它也可以轻松适应配置和规模的变化。
一体化
Nomad 像 Kubernetes 一样与 Docker 一起工作,并运行非容器化的工作负载(Windows、Java)。
图形用户界面 (GUI)
两者都有吸引人的功能仪表板,提供清晰、直接的管理体验。
Nomad 和 Kubernetes 仪表板
Nomad vs Kubernetes:如何选择?
Kubernetes 是一组功能强大的组件,它们协同工作,集成到一个核心单元中。它旨在跨主机集群部署、管理和扩展应用程序容器,就像云原生应用程序的操作系统一样。
Nomad 最初是一个集群管理器和任务调度器,但它可以连接到 Consul 等其他工具以扩展其功能。其适应不同角色的灵活性使得 Nomad 对硬件和人力资源较少的中型公司非常有吸引力。它更容易开始,更容易维护,但缺乏社区支持。
但您甚至不必在 Kubernetes 和 Nomad 之间做出选择。
游牧和 Kubernetes
两个平台可以协同工作,相得益彰:Kubernetes 被全球公司使用,并由谷歌云平台、Azure 和 AWS 这三个最著名的云提供商作为服务提供,因为它被认为是一个强大的容器编排工具,具有尖端功能。但 Nomad 的敏捷性使其非常适合维护和核心调度目的。
这是一个头对头的比较:
Kubernetes | Nomad | |
---|---|---|
复杂 | 更复杂,但提供更高级别的控制 | 更容易开始,但更不成熟 |
社区 | 高级社区,提供工具、资源和支持 | 缺乏有意义的社区,从而导致资源匮乏 |
费用 | 由于更大的团队和更苛刻的架构,潜在的更高的成本 | 需要更小的团队,更少的服务器,而且耗时更少 |
工作负载支持 | 专注于 Linux 容器 | Nomad 支持虚拟化、容器化和独立应用程序(Java、Windows 应用程序甚至二进制应用程序)。 |
开放性 | 社区支持 | 它与 HashiCorp 的产品和开发密切相关 |
结论
容器化领域已经有许多竞争(有时,合作)选项来满足不同的目标和需求。现在我们还有一个。Nomad 似乎不会很快接管 Kubernetes 的统治,但它正在排队成为一个强大的参与者。
Nomad 可以成为许多开发人员和公司进入容器编排世界的切入点,他们需要一个轻量级、简单且易于适应的解决方案来面对不同的场景,这些场景不需要像 Kubernetes 这样的重量级人物,可以按照自己的节奏发展。