选择哪个编排平台

Nomad 和 Kubernetes 已成为可用于动态编排工作负载的两个最流行的编排平台。

编排平台可帮助您自动配置、管理和协调正在运行的多个不同应用程序。

两个都 游牧者库伯内斯 简化容器化应用程序的部署和管理。 借助正确的编排平台,您可以有效地处理不同的微服务和容器 – 从服务发现和部署到协调和扩展。

在选择合适的平台之前,让我们先了解一下Nomad和Kubernetes。

什么是游牧者?

游牧者 来自 HashiCorp 的解决了工作负载编排问题。 它具有灵活性,可以安排和编排容器的部署和管理。 它可以在云端和本地运行,并且还支持非容器化工作负载。

使用Nomad,您可以获得一个必须运行的简单二进制文件。 与其他解决方案不同,它的资源占用量非常小,不会占用服务器的大量计算。 除了容器之外,您还可以运行各种工作负载,例如 Windows、Java、虚拟机和 Docker。

您可以在生产环境中部署和管理企业容器。 此外,您还可以在 Nomad 集群上运行非容器化应用程序,而无需将它们容器化。 使用Nomad,您可以轻松横向扩展并使应用程序在更靠近客户居住地的地理位置上运行。 此外,您还可以有效地运行短期批处理作业。

Nomad 有两个版本——社区版和企业版。 这 社区版 是免费的,让您可以自我管理您的 Nomad 集群。 15 分钟内,您可以在本地或云环境中运行它。 与此同时, 企业版 提供支持和附加功能,例如协作、运营和治理。

什么是 Kubernetes?

库伯内斯 是一个可扩展、可移植、高效的编排平台。 也称为 K8s,最初由 Google 开发。 它目前由云原生计算基金会(CNCF)管理,是最流行的编排平台。

借助 Kubernetes,您可以高效地将工作负载转移到任何需要的地方 – 无论是本地、公共云还是混合模式。 它旨在提供您可能需要的所有可能的工具来解决您的编排和基础设施管理需求。

它是迄今为止最受欢迎的编排平台。 Amazon Web Service 和 Google Cloud Platform 等领先的云服务提供商提供托管 Kubernetes 服务,分别是 Amazon Elastic Kubernetes Service (AWS EKS) 和 Google Kubernetes Engine (GKE)。

另请阅读:Kubernetes 入门:初学者简介

但是您应该选择哪一个来满足您的编排平台要求呢? 让我们通过两者的比较来了解一下。

Nomad 与 Kubernetes

#1. 安装

由于使用大多数软件工具和技术的第一步是安装,因此其易用性起着重要作用。 在 Nomad 和 Kubernetes 之间进行选择时,您需要看看开始使用它们有多容易。

游牧者

对于 Nomad,您可以获得预编译的二进制文件或需要安装的软件包。 对于在本地计算机上手动安装,您可以下载并 安装官方二进制文件。 如果您使用的是 Linux,则可以安装官方 Linux 软件包。 无论如何,安装后,您所要做的就是直接从命令行安装 CNI(容器网络接口)插件。

如果您分别使用 Homebrew 和 Chocolatey 等包管理工具在 MacOS 或 Windows 上进行安装,那就更简单了。 只需一个命令,您的安装就可以完成,包括 CNI 插件。

库伯内斯

对于 Kubernetes,您可以根据需要安装不同的组件和客户端。 您将获得每个文件的二进制文件。 它针对不同的运行时和系统架构有不同的容器镜像。

您可以检查 官方存储库 获取与您的平台(无论是 Darwin、Linux 还是 Windows)以及您的系统架构相匹配的官方二进制文件。 安装完正确的容器映像后,您将需要 kubectl – 一个可让您与容器交互的命令行工具。

#2. 可扩展性

对于容器工作负载,可扩展性是一个重要因素。 它决定了您的系统处理不断增长的工作负载的能力。 简而言之,如果您需要更多的计算能力,您的编排框架应该能够轻松添加新资源。

游牧者

Nomad 已被证明可以在生产环境中运行超过 10,000 个节点的集群。 2020 年,Nomad 在 6,100 台主机上完成了 200 万个 docker 容器的压力测试。 该过程跨越 10 多个不同的 AWS 区域,运行了 22 分钟。 这超越了他们之前的成功运行 100万个集装箱

您还可以使用 Nomad Autoscaler 进行水平自动缩放。 需要时,您可以将其作为单独的进程运行。

库伯内斯

从版本 1.28 开始,Kubernetes 可以让您将集群扩展到最多 5,000 个节点。 您总共可以运行 150,000 个 Pod 或 300,000 个容器。

随着可扩展性的提高,与管理 Nomad 集群相比,维护 Kubernetes 集群变得更加复杂。 Nomad 在可运行的节点总数方面为您提供优于 Kubernetes 的优势。

#3。 表现

选择编排平台时,您应该以功能和性能之间的平衡为目标。 编排平台的性能还决定了您将使用多少系统资源。

游牧者

Nomad 由于采用单一二进制方法,因此资源占用量较小。 您还可以避免安装单独的服务来启动和运行编排平台。 因此,您最终会在节点上消耗更少的 CPU 和内存,从而降低开销并提高性能。

它具有高度适应性,可以处理各种工作负载,无论是本地工作负载还是云端工作负载。 凭借其简单性、弹性和效率,您将在集群规模增加时保持性能方面获得优势。

库伯内斯

Kubernetes 针对容器化工作负载进行了高度优化。 如果您正在运行一组基于容器的微服务,那么 Kubernetes 擅长管理它们。 凭借其广泛的网络功能和广泛的集成,您可以加速和微调您的编排需求。

由于其广泛的功能和配置,Kubernetes 会占用更多的系统资源。 随着集群规模的增长,您在管理集群时可能会面临额外的开销和复杂性。

#4。 联网

在容器编排方面,网络是一个重要方面。 它决定了节点如何定位并相互通信。

游牧者

Nomad 非常专注于工作负载编排,几乎不涉及网络,并尝试尽可能少地修改内容。

Nomad 不依赖基础设施,而是使用配置。 您可以直接从配置中获取所需的信息,而无需运行 DNS 服务器或负载均衡器等额外组件。 Nomad 中调度的基本单元称为分配,可以使用网络块请求端口。

库伯内斯

对于 Kubernetes,网络是一个核心支柱。 您可以控制以下方面:通过本地主机进行容器到容器的通信、pod 到 pod 的通信、pod 到服务的通信以及永久到服务的通信。

与 Nomad 中的动态端口相比,Kubernetes 采用了不同的方法。 您将 Service API 作为抽象来将一组 Pod 公开到网络

#5。 要求

如果您正在大规模运行编排平台,那么系统要求将取决于您的集群大小和正在运行的工作负载。 除了 CPU 和内存之外,您还需要网络资源。

游牧者

对于生产服务器,建议您在大型计算机实例上运行。 每个服务器实例最好具有 4-8 个以上的 CPU 核心、16-32 GB 以上的内存和 40-80 GB 以上的快速磁盘。 您还应该确保足够的网络带宽。

如果您使用防火墙,则必须确保允许 Nomad 的 3 个端口。 这 3 个端口是:服务器和客户端使用的 HTTP API(默认 4646)、用于内部通信的 RPC(默认 4647)以及服务器用于与其他服务器通信的 Serf WAN(默认 4648)。

库伯内斯

在高度容器化的生产环境中运行时,Kubernetes 集群可能会变得非常复杂。 但是,建议您让每个节点至少具有 2-4 个 CPU 核心和 8-16 GB RAM。

对于大型集群,每个节点可能需要更多资源。 此外,您必须确保有足够的网络带宽。

虽然 Nomad 和 Kubernetes 可以扩展以满足您的需求,但 Kubernetes 集群相对而言会占用更多资源。

#6。 编码

编码的难易程度决定了您与所选框架交互的效率。 除了定义平台和作业之外,您还需要学习 CLI 命令以与命令行工具交互。

游牧者

HCL 或 HashiCorp 配置语言是 Nomad 中使用的主要配置语言。 HCL 旨在在人类可读和机器友好之间取得平衡。 您可以使用它编写作业规范,包括应用程序和服务的任务、约束和依赖项。

此外,您还需要学习 Nomad 命令行工具的 CLI 命令。 这使您可以与游牧集群交互并进行配置。

库伯内斯

您可以使用 YAML 文件配置 Kubernetes,而不是依赖不同的语言。 您还可以使用 JSON。 这些配置文件可让您轻松描述应用程序应如何运行,包括 Pod、服务、部署和其他资源的规范。

当您运行复杂的 Kubernetes 应用程序时,Helm 是 Kubernetes 的包管理器,它允许您定义、安装和升级复杂的 Kubernetes 应用程序。 Helm 图表是用 YAML 编写的,可以包含模板和值文件来自定义部署。

您将使用 kubectl 命令行工具与 Kubernetes 集群进行交互。 这涉及运行各种命令来创建、修改和管理 Kubernetes 资源。

#7. 一体化

编排平台拥有自己支持的集成主机。 您还可以找到多个第三方集成,您可以添加它们以增加功能集。

游牧者

通过Nomad,您可以主动集成各种工具和技术。 与Docker及其他容器运行时无缝连接,方便容器化应用部署。 对于基础设施配置,您可以使用 Terraform 集成并简化资源创建。

作为 HashiCrop 的一部分,Nomad 还允许您与 HashiCorp Consul 协作进行服务发现和运行状况检查,而 HashiCorp Vault 确保安全的机密管理。 您的监控需求可以通过 Prometheus、Grafana 和 ELK Stack 等集成来满足。 此外,Nomad 可以无缝融入您的 CI/CD 管道,从而实现自动化应用程序部署。

库伯内斯

作为一个经过时间考验的解决方案,Kubernetes 提供了一长串可供集成的技术。 您可以连接 Docker 进行容器部署。 为了满足您的网络需求,您可以使用 Calico 或 Cilium 等解决方案。 Ceph 等存储选项以及 AWS EKS(Amazon Elastic Kubernetes Service)和 Google GKE(Google Kubernetes Engine)等云原生提供商会主动管理您的持久存储。 云原生解决方案还为您提供附加服务。

如果您希望支持无服务器工作负载,那么 Kubernetes 可以满足您的需求。 您可以使用 Knative 和 KEDA(基于 Kubernetes 的事件驱动自动扩展)等无服务器框架来扩展 Kubernetes。

#8。 图形用户界面

您有时可能希望摆脱命令行和代码,并可视化您正在运行的平台。 拥有 GUI 或图形用户界面可以让您做到这一点。

游牧者

Nomad 提供内置 Web UI 作为二进制文件的一部分。 当您安装 Nomad 并运行服务器时,您将获得 GUI 以及 API 和 CLI。 您需要零配置才能开始使用 UI 并检查集群。

启动 Nomad 服务器后,您可以在 Web 浏览器中输入服务器地址。 然后,您将被重定向到 Web UI。 还有一个 ui 子命令,因此您可以直接从命令行界面访问所需的网页。

库伯内斯

默认情况下,Kubernetes 不附带 GUI。 但是,您可以根据您的要求安装它。 Kubernetes 本身提供了一个名为 Dashboard 的官方 UI。 虽然默认情况下未安装它,但您可以使用 kubectl 工具启动并运行它。 使用仪表板,您可以获取集群的概览。

您可以将容器化应用程序部署到 Kubernetes 集群并进行管理和故障排除。 AWS EKS 和 Google GKE 等云原生提供商提供了自己的 UI 工具。 您还可以运行第三方工具。

Nomad 与 Kubernetes:汇总表

功能NomadKubernetes安装单个预编译的二进制文件针对不同组件和客户端的不同二进制文件可扩展性可以运行10,000个节点和200万个容器5,000个节点和总共300,000个容器性能简单高效,资源占用更小广泛的功能集但使用更多资源网络具有动态端口分配的单一配置细粒度的控制和执行不依赖动态端口要求较大集群的系统要求较低更大的集群需要更多的系统源编码它具有非常广泛的可用集成和工具可以使用现有语言,例如YAML和JSON集成具有良好的官方和第三方集成具有非常广泛的可用集成和工具GUI构建-在web UI可用需要单独安装

选择适合您的编排需求的平台

在 Nomad 和 Kubernetes 之间,您对编排平台的选择取决于您的具体要求和优先级。 这两个平台都支持各种用例——部署调度、自动部署和恢复以及集群发现和管理。

如果您优先考虑简单性并且工作量较小,Nomad 可能是您更好的选择。 凭借其单一二进制文件和最低的资源要求,Nomad 使其更易于设置和操作。 此外,您可以扩展集群以支持大量节点。

另一方面,如果您需要广泛的功能、细粒度的控制和广泛的集成,那么 Kubernetes 就是您的答案。 它为容器化工作负载提供了强大的解决方案,并且可以与各种工具和技术无缝集成。 您还可以利用 AWS 和 Google Cloud 提供的托管解决方案。

考虑其他方面,例如 Nomad 需要学习新语言 (HCL),而 Kubernetes 配置可使用 YAML 或 JSON。 此外,您可能需要一个 Web UI 以便于使用。

还要考虑您拥有的可用系统资源以及与之相关的成本。 在 Nomad 和 Kubernetes 之间选择编排平台应基于您的需求、专业知识和资源。

接下来,查看 Kubernetes 的最佳实践,以实现更好的容器编排。