大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad
前文回顾
️Reference:
IoT 边缘计算系列文章
HashiCorp 解决方案 - Nomad + Docker

简介
Nomad: 一个简单而灵活的调度器和编排器,可在内部和云端大规模部署和管理容器和非容器化的应用程序
Nomad 使开发者能够使用声明式的基础设施即代码来部署应用程序。Nomad 使用 bin packing 来有效地安排工作并优化资源利用。
Nomad 凭借其简单性、灵活性、可扩展性和高性能与相关工具区分开来。Nomad 的协同作用和整合点 HashiCorp Terraform、Consul 和 Vault 使其特别适合轻松集成到 组织的现有工作流程,最大限度地减少关键计划的上市时间。
使用 Nomad 来安排更接近用户的边缘工作负载。用 Nomad 的本地服务发现连接边缘服务。无缝地处理不稳定的 Nomad 客户端节点连接。

参考架构
当采用边缘计算/容器时,会遇到诸如 管理异构设备(不同的处理器、操作系统等), 资源受限的设备,以及间歇性连接。
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 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 简单
继续阅读
参考文档
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.
大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad的更多相关文章
- 容器、容器集群管理平台与 Kubernetes 技术漫谈
原文:https://www.kubernetes.org.cn/4786.html 我们为什么使用容器? 我们为什么使用虚拟机(云主机)? 为什么使用物理机? 这一系列的问题并没有一个统一的标准答案 ...
- Docker&Kubernetes沙龙干货集锦:容器集群管理利器kubernetes详谈-CSDN.NET
Docker&Kubernetes沙龙干货集锦:容器集群管理利器kubernetes详谈-CSDN.NET undefined Package - crawler undefined 科学网- ...
- Docker容器集群管理之Swarm
Docker容器集群管理主流方案 Swarm Docker公司自研发的集群管理系统. Kubernetes Google开源的一个容器集群管理系统,用于自动化部署.扩展和管理容器应用.也称为K8S ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...
- Kubernetes容器集群管理环境 - Prometheus监控篇
一.Prometheus介绍之前已经详细介绍了Kubernetes集群部署篇,今天这里重点说下Kubernetes监控方案-Prometheus+Grafana.Prometheus(普罗米修斯)是一 ...
- Kubernetes容器集群管理环境 - 完整部署(中篇)
接着Kubernetes容器集群管理环境 - 完整部署(上篇)继续往下部署: 八.部署master节点master节点的kube-apiserver.kube-scheduler 和 kube-con ...
随机推荐
- 使用c#的 async/await编写 长时间运行的基于代码的工作流的 持久任务框架
持久任务框架 (DTF) 是基于async/await 工作流执行框架.工作流的解决方案很多,包括Windows Workflow Foundation,BizTalk,Logic Apps, Wor ...
- SpringCloud -Netflix 总结·
springcloud 核心组件 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.智能路由.消息 ...
- c3 linearization详解
MRO MRO 全称方法解析顺序(Method Resolution Order),在多重继承和多继承存在的时候,寻找属性及方法的顺序. 深度优先(DFS)与广度优先(BFS) python2 所用的 ...
- SSH(一)架包的引入
一年多未使用了,有些东西真的会忘. 一.ssh的图形化记忆运作流程 二.Struts2.hibernate.spring需要引用的jar包 Struts2: 基本开发:struts-2.3.32\ap ...
- .NET 6 实现滑动验证码(二)、基本数据
上一节,介绍了滑动验证码的基本情况,也创建了一个.NET 6的工程.本节内容是创建一些基础类. 目录 CaptchaData.cs CaptchaValidateData.cs ImageCaptch ...
- 【JVM故障问题排查心得】「内存诊断系列」Xmx和Xms的大小是小于Docker容器以及Pod的大小的,为啥还是会出现OOMKilled?
为什么我设置的大小关系没有错,还会OOMKilled? 这种问题常发生在JDK8u131或者JDK9版本之后所出现在容器中运行JVM的问题:在大多数情况下,JVM将一般默认会采用宿主机Node节点的内 ...
- SQL Server下7种“数据分页”方案,全网最全
数据分页往往有三种常用方案. 第一种,把数据库中存放的相关数据,全部读入PHP/Java/C#代码/内存,再由代码对其进行分页操作(速度慢,简易性高). 第二种,直接在数据库中对相关数据进行分页操作, ...
- 如何通过Java应用程序将Word转为Excel
平时在工作中,很多小伙伴会习惯性地将文件保存为Word文档格式,但有时会发现某些文件如果保存成Excel表格可能会更好地呈现.例如有的文本在Word文本中不如在Excel工作表编辑计算方便,所以要把W ...
- C语言常用知识总结
在 C 语言中,常量是一种固定值的标识符,它的值在程序执行期间不会改变. C 语言中有几种不同类型的常量: 字符常量:用单引号括起来的单个字符,例如 'A'.'b'.'1' 等. 字符串常量:用双引号 ...
- C++指针【cherno课程学习】
定义: 指针是一个整数,一种存储内存地址的数字 内存就像一条线性的线,在这条街上的每一个房子都有一个号码和地址 类似比喻成电脑,这条街上每一个房子的地址 是一个字节 我们需要能够准确找到这些地址的方法 ...