游牧 vs Kubernetes:选择哪个编排平台
nomad和kubernetes是目前最受欢迎的两种动态编排平台,可用于自动化配置、管理和协调多个不同应用程序。
编排平台可以帮助您自动化运行的多个不同应用程序的配置、管理和协调。
nomad和kubernetes都简化了容器化应用程序的部署和管理。凭借正确的编排平台,您可以高效处理不同的微服务和容器,从服务发现和部署到协调和扩展。
在选择合适的平台之前,让我们更多地了解一下nomad和kubernetes。
nomad是什么?
nomad来自hashicorp,解决了工作负载编排的问题。具有灵活性,它安排和编排容器的部署和管理。它可以在云端和本地同时工作,并支持非容器化的工作负载。
使用nomad,您会得到一个必须运行的简单二进制文件。与其他解决方案不同,它的资源占用非常小,不会占用服务器的大量计算资源。除了容器,您还可以运行各种工作负载,如windows、java、虚拟机和docker。
您可以在生产环境中部署和管理企业容器。此外,您还可以在nomad集群上运行非容器化的应用程序,而无需对其进行容器化。使用nomad,您可以轻松扩展应用程序,使其在地理位置更接近您的客户所在的地方运行。此外,您还可以高效地运行短期的批处理作业。
nomad有两个版本 – 社区版和企业版。免费的社区版允许您自己管理nomad集群。在15分钟内,您可以在本地或云环境上运行它。与此同时,企业版提供支持和额外功能,如合作、运维和治理。
kubernetes是什么?
kubernetes是一个可扩展、可移植和高效的编排平台。它最初由google开发,目前由云原生计算基金会(cncf)管理,并且是最流行的编排平台。
使用kubernetes,您可以高效地将工作负载移动到所需的任何位置 – 无论是本地、公共云还是混合模式。它旨在提供您可能需要解决编排和基础设施管理需求的所有可能工具。
它是目前最受欢迎的编排平台。领先的云服务提供商如amazon web service和google cloud platform提供托管的kubernetes服务 – amazon elastic kubernetes service(aws eks)和google kubernetes engine(gke)。
还可阅读:《kubernetes入门:初学者指南》
但是,对于您的编排平台需求,应该选择哪一个呢?让我们通过比较这两个平台来找出答案。
nomad vs. kubernetes
#1. 安装
由于大多数软件工具和技术的使用第一步是安装,因此其易用性起着重要作用。在选择nomad和kubernetes之间时,您需要考虑它们的易用性。
nomad
对于nomad,您可以获得一个预编译的二进制文件或需要安装的软件包。对于在本地计算机上的手动安装,您可以下载并安装官方二进制文件。如果您使用的是linux系统,可以安装官方linux软件包。无论哪种情况,安装完成后,您只需从命令行直接安装cni(容器网络接口)插件。
如果您在macos或windows上使用homebrew和chocolatey等软件包管理工具进行安装,则更加简单。只需一条命令,您的安装就完成了,包括cni插件。
kubernetes
对于kubernetes,根据您的需求可以安装不同的组件和客户端。您可以获取每个组件的二进制文件。它针对不同的运行时和系统架构提供了不同的容器镜像。
您可以查看官方存储库以获取与您的平台(darwin、linux或windows)和系统架构匹配的官方二进制文件。安装正确的容器镜像后,您将需要使用kubectl,这是一个命令行工具,可让您与容器进行交互。
#2. 可扩展性
对于容器工作负载,可扩展性是一个重要因素。它决定了您的系统处理不断增长的工作负载的能力。简而言之,如果您需要更多的计算能力,您的编排框架应能够轻松添加新资源。
nomad
nomad已被证实可以在生产环境中运行超过10,000个节点的集群。2020年,nomad在6,100个主机上完成了对2百万个docker容器的压力测试。这覆盖了10个不同的aws区域,并运行了22分钟。这超过了他们早期成功运行的1百万个容器。
您还可以使用nomad autoscaler进行水平自动缩放。在需要时,您可以将其作为单独的进程运行。
kubernetes
截至1.28版本,kubernetes可以将集群扩展到最多5,000个节点。您可以运行总共150,000个pod或300,000个容器。
随着可扩展性的增加,与管理nomad集群相比,维护kubernetes集群更加复杂。在可运行的节点总数方面,nomad比kubernetes更具优势。
#3. 性能
在选择编排平台时,您应该在功能和性能之间寻求平衡。编排平台的性能也决定了您将使用多少系统资源。
nomad
nomad由于采用了单一二进制方法,所以资源占用较小。您也可以避免安装单独的服务来启动和运行编排平台。因此,您可以在节点上消耗更少的cpu和内存,从而降低开销并提高性能。
nomad非常适应各种工作负载,无论是在本地还是云端。凭借其简单性,弹性和效率,您可以在集群规模增大时保持性能的优势。
kubernetes
kubernetes针对容器化工作负载进行了高度优化。如果您正在运行一组基于容器的微服务,那么kubernetes在管理这些服务方面表现出色。凭借其广泛的网络功能和广泛的集成范围,您可以加快和优化您的编排需求。
由于kubernetes具有丰富的功能和配置,它会使用更多的系统资源。随着集群规模的增长,您可能会面临额外的开销和管理复杂性。
#4. 网络
在容器编排中,网络是一个重要的方面。它决定了节点之间的定位和通信方式。
nomad
nomad主要关注工作负载编排,几乎不涉及网络,并尽量少地修改相关内容。
与依赖基础设施不同,nomad使用配置文件来工作。您可以直接从配置中获取所需的信息,而无需运行额外的组件,如dns服务器或负载均衡器。nomad中的调度基本单元称为allocations,可以使用network块来请求端口。
kubernetes
在kubernetes中,网络是一个核心支柱。您可以控制以下方面-容器之间的通信通过localhost,pod之间的通信,pod与服务之间的通信以及外部与服务之间的通信。
与nomad中的动态端口相比,kubernetes采用了不同的方法。通过service api,您可以将一组pods公开到网络中。
#5. 要求
如果您要在规模上运行编排平台,则系统要求将取决于集群的大小和您正在运行的工作负载。除了cpu和内存外,您还需要网络资源。
nomad
对于生产服务器,建议您运行在大型机器实例上。每个服务器实例最好具有4-8+个cpu核心,16-32gb+的内存和40-80gb+的快速磁盘。您还应确保有较大的网络带宽。
如果您使用了防火墙,那么您必须确保nomad允许使用的3个端口。这3个端口是:服务器和客户端使用的http api(默认端口4646),用于内部通信的rpc(默认端口4647)和服务器用于与其他服务器通信的serf wan(默认端口4648)。
kubernetes
在高度容器化的生产环境中运行时,kubernetes集群可能会变得非常复杂。然而,建议您每个节点至少配备2-4个cpu核心和8-16 gb的内存。
对于大型集群,您可能需要更多的节点资源。此外,您必须确保有足够的网络带宽。
虽然nomad和kubernetes可以根据您的需求进行扩展,但相比之下,kubernetes集群需要更多的资源。
#6. 编码
编码的简便性决定了您与所选框架的互动效率。除了定义您的平台和作业外,您还需要学习与命令行工具交互的cli命令。
nomad
hcl或hashicorp配置语言是nomad中使用的主要配置语言。hcl旨在在人类可读性和机器友好性之间取得平衡。您可以使用此语言编写作业规范,包括应用程序和服务的任务、约束和依赖关系。
此外,您还需要学习nomad命令行工具的cli命令。这使您可以与nomad集群进行交互并进行配置。
kubernetes
与使用不同语言不同,您可以使用yaml文件配置kubernetes。您也可以使用json。这些配置文件让您轻松描述应用程序的运行方式,包括pod、service、deployment和其他资源的规格。
当您运行复杂的kubernetes应用程序时,helm是一个用于kubernetes的软件包管理器,允许您定义、安装和升级复杂的kubernetes应用程序。helm图表以yaml编写,并且可以包含模板和值文件以自定义部署。
您将使用kubectl
命令行工具与kubernetes集群进行交互。这涉及运行各种命令来创建、修改和管理kubernetes资源。
#7. 集成
编排平台具有自己支持的一系列集成。您还可以找到一些第三方集成,以增加功能集。
nomad
通过nomad,您可以积极集成各种工具和技术。与docker和其他容器运行时无缝连接,以便容器化应用程序部署。对于基础设施供应,您可以使用terraform集成,简化资源创建。
特性 | nomad | kubernetes |
---|---|---|
安装 | 一个预编译的二进制文件 | 不同组件和客户端使用不同的二进制文件 |
可扩展性 | 可以运行10,000个节点和2百万个容器 | 5,000个节点和30万个总容器 |
性能 | 简单高效,资源占用更小 | 功能齐全,但资源占用更多 |
网络 | 单一配置,动态端口分配 | 精细控制,不依赖动态端口 |
要求 | 对于更大的集群,系统要求较低 | 更大的集群需要更多系统资源 |
编码 | 有自己的语言hcl | 可以使用现有的语言如yaml和json |
集成 | 拥有良好的官方和第三方集成 | 有很广泛的集成和工具可用 |
gui | 内置的web界面可用 | 需要单独安装 |
根据您的编排需求选择合适的平台
在nomad和kubernetes之间,您选择的编排平台取决于您具体的需求和优先事项。这两个平台都支持各种用例 – 部署调度、自动化发布和恢复以及集群发现和管理。
如果您重视简单性并且工作负载较小,nomad可能是更好的选择。通过其单一二进制文件和最小的资源需求,nomad更容易设置和操作。此外,您可以扩展您的集群以支持大量的节点。
另一方面,如果您需要广泛的功能、细粒度控制和广泛的集成,那么kubernetes就是您的答案。它为容器化工作负载提供了强大的解决方案,并可以与各种工具和技术无缝集成。您还可以利用aws和google cloud提供的托管解决方案。
还要考虑其他方面,比如nomad需要学习一种新的语言(hcl),而kubernetes的配置可以使用yaml或json。此外,您可能需要一个web界面以方便使用。
还要考虑您拥有的可用系统资源以及相关的成本。在nomad和kubernetes之间选择您的编排平台应基于您的需求、专业知识和资源。
接下来,查看kubernetes的最佳实践,以获得更好的容器编排。