HashiCorp 解决方案 - Nomad + Docker
Nomad_PrimaryLogo_FullColor
简介
Nomad: 一个简单而灵活的调度器和编排器,可在内部和云端大规模部署和管理容器和非容器化的应用程序
Nomad 使开发者能够使用声明式的基础设施即代码来部署应用程序。Nomad 使用 bin packing 来有效地安排工作并优化资源利用。
Nomad 凭借其 简单 性、灵活性 、 可扩展性 和高性能 与相关工具区分开来。Nomad 的协同作用和整合点 HashiCorp Terraform、Consul 和 Vault 使其特别适合轻松集成到 组织的现有工作流程,最大限度地减少关键计划的上市时间。
使用 Nomad 来安排更接近用户的边缘工作负载。用 Nomad 的本地服务发现连接边缘服务。无缝地处理不稳定的 Nomad 客户端节点连接。
Nomad UI
参考架构
当采用边缘计算 / 容器时,会遇到诸如 管理异构设备(不同的处理器、操作系统等), 资源受限的设备,以及间歇性连接。
Nomad 解决了这些挑战,使其成为一个有吸引力的边缘协调者。Nomad 客户端代理是单个二进制文件,占用空间小,资源有限消费,以及在不同类型的设备上运行的能力。另外 Nomad 支持地理位置较远的客户端,这意味着 Nomad 服务器群集不需要在客户端附近运行。
通过 Nomad 1.3,原生服务发现 (native service discovery) 简化了连接 Nomad 任务的过程,在那里你不需要使用单一的服务网格,并且不再需要管理一个单独的 Consul 集群。Nomad 的原生服务发现还消除了在每个边缘设备上安装 Consul 代理的需要。这进一步减少了 Nomad 的资源占用,因此你可以在边缘运行和支持更多的工作负载。此外,断开的客户端分配可以优雅地重新连接,处理边缘设备遇到网络延迟或临时连接损失的情况。
如下图,
- 本地数据中心或云,将托管 Nomad 服务器集群和一个客户端用于统一管理
- 边缘端运行 Nomad 客户端。
Nomad 参考架构
方案优点
- 部署容器和旧版应用程序 : Nomad 作为协调程序的灵活性使组织能够在同一基础架构上同时运行容器、 旧版和批处理应用程序。Nomad 为旧版应用程序带来了核心编排优势,而无需进行容器化。
- 简单可靠:Nomad 作为单个二进制文件运行,并且完全独立 - 将资源管理和调度结合到单个系统中。Nomad 不需要任何外部服务进行存储或协调。Nomad 自动处理应用程序、节点和驱动程序故障。Nomad 是分布式和弹性的,使用领导者选举和状态复制在发生故障时提供高可用性。
- 资源占用少: Nomad 客户端代理是单个二进制文件,占用空间小,资源使用少;Nomad 1.3 以上版本的 native service discovery 还消除了在每个边缘设备上安装 Consul agent 的需要。这进一步减少了 Nomad 的资源占用。
- 设备插件 和 GPU 支持:Nomad 为 GPU 工作负载(如机器学习(ML)和人工智能(AI))提供内置支持。Nomad 使用设备插件来自动检测和利用来自硬件设备(如 GPU、FPGA 和 TPU)的资源。插件很丰富,支持:
- Docker
- Isolated Fork/Exec
- Java
- Podman
- QEMU
- Raw Fork/Exec
- containerd
- Nvidia
- USB
- …
- 经过验证的可扩展性:Nomad 乐观地并发,可提高吞吐量并减少工作负载的延迟。Nomad 已被证明可以在实际生产环境中扩展到 10K + 节点的集群。
- HashiCorp生态系统:Nomad 与 Terraform,Consul,Vault 无缝集成,用于配置,服务发现和机密管理。满足更复杂的边缘容器管理需求。
方案缺点
- 不兼容 Kubernetes 生态: Nomad 是与 Kubernetes 完全不同的另一套容器编排 / 调度解决方案,所以不兼容 Kubernetes 生态。需要付出相关的学习成本和额外的人力成本。
- 管理功能较少: 也是因为 不兼容 Kubernetes 生态,所以完全无法享受 Kubernetes 庞大生态带来的功能红利。管理功能相对较少。如果需要额外的自动化能力,需要集成 Terraform; 需要额外的服务发现能力,需要集成 Consul; 需要额外的机密管理能力,需要集成 Vault.
- UI 简单