前文回顾

  1. 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介
  2. 大规模 IoT 边缘容器集群管理的几种架构-1-Rancher+K3s

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 的资源占用,因此你可以在边缘运行和支持更多的工作负载。此外,断开的客户端分配可以优雅地重新连接,处理边缘设备遇到网络延迟或临时连接损失的情况。

如下图,

  1. 本地数据中心或云,将托管 Nomad 服务器集群和一个客户端用于统一管理
  2. 边缘端运行 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 简单

继续阅读

  1. 大规模 IoT 边缘容器集群管理的几种架构-3-Portainer
  2. 大规模 IoT 边缘容器集群管理的几种架构-4-Kubeedge
  3. 大规模 IoT 边缘容器集群管理的几种架构-5-总结

参考文档

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad的更多相关文章

  1. 容器、容器集群管理平台与 Kubernetes 技术漫谈

    原文:https://www.kubernetes.org.cn/4786.html 我们为什么使用容器? 我们为什么使用虚拟机(云主机)? 为什么使用物理机? 这一系列的问题并没有一个统一的标准答案 ...

  2. Docker&Kubernetes沙龙干货集锦:容器集群管理利器kubernetes详谈-CSDN.NET

    Docker&Kubernetes沙龙干货集锦:容器集群管理利器kubernetes详谈-CSDN.NET undefined Package - crawler undefined 科学网- ...

  3. Docker容器集群管理之Swarm

    Docker容器集群管理主流方案 Swarm Docker公司自研发的集群管理系统. Kubernetes Google开源的一个容器集群管理系统,用于自动化部署.扩展和管理容器应用.也称为K8S ...

  4. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  5. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  6. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  7. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...

  8. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

  9. Kubernetes容器集群管理环境 - Prometheus监控篇

    一.Prometheus介绍之前已经详细介绍了Kubernetes集群部署篇,今天这里重点说下Kubernetes监控方案-Prometheus+Grafana.Prometheus(普罗米修斯)是一 ...

  10. Kubernetes容器集群管理环境 - 完整部署(中篇)

    接着Kubernetes容器集群管理环境 - 完整部署(上篇)继续往下部署: 八.部署master节点master节点的kube-apiserver.kube-scheduler 和 kube-con ...

随机推荐

  1. MongoDB - 事务支持

    事务简介 事务是数据库中处理的逻辑单元,每个事务中包括一个或多个数据库操作,既可以是读操作,也可以是写操作. ACID 是一个"真正"事务所需要具备的一组属性集合,指的是原子性(A ...

  2. CodeGeeX:vscode中全新的智能代码补全插件

    大家好我是费老师,代码智能补全是近几年非常热门的话题,有前不久宣告项目终结的kite,反响平平的tabnine,以及最近吃了一堆官司的copilot. 而广大从事编程工作的用户只关心市面上的代码智能补 ...

  3. 关于mysql远程连接失败的问题解决

    解决办法 mysql 数据库user表配置密码 mysql 数据库user表配置plugin字段为mysql_native_password mysql 数据库user表host字段更改为% mysq ...

  4. c++详细学习——继承

    通常讲父类(parrent)-子类(child).基类(base)-派生类(derived)和超类(super)-子类(sub) 1 最基础的写法 以下例子为最基本的写法,默认构造 1 enum Ge ...

  5. Oracle 插入时间戳id函数func_getnewid()

    在Oracle数据库中出入以时间戳为id的最简单方法运用func_getnewid()函数: select func_getnewid(30) from dual; id长度可调

  6. 2.10:数据加工与展示-pandas清洗、Matplotlib绘制

    〇.目标 1. 使用pandas完成基本的数据清洗加工处理: 2. 使用Matplotlib进行简单的数据图形化展示. 一.用pandas清洗处理数据 1.判断是否存在空值 数据缺失在很多数据中存在, ...

  7. 【大数据课程】高途课程实践-Day03:Scala实现商品实时销售统计

    〇.概述 1.实现内容 使用Scala编写代码,通过Flink的Source.Sink以及时间语义实现实时销量展示 2.过程 (1)导包并下载依赖 (2)创建数据源数据表并写⼊数据 (3)在Mysql ...

  8. 【大数据面试】Flink 02 基本操作:入门案例、Env、Source、Transform、数据类型、UDF、Sink

    二.基本操作 1.入门案例 (1)批处理wordcount--DataSet val env = ExecutionEnvironment.getExecutionEnvironment // 从文件 ...

  9. echarts map地图中绘制浙江省市区县乡镇多级联动边界下钻的最新geojson数据文件获取和更新

    目录 ECharts Map地图的显示 GeoJSON数据文件获取 在ECharts中绘制浙江省的数据 ECharts Map地图的显示 ECharts支持地理坐标显示,专门提供了一个geo组件,在s ...

  10. 和月薪3W的聊过后,才知道自己一直在打杂...

    前几天和一个朋友聊面试,他说上个月同时拿到了腾讯和阿里的offer,最后选择了阿里. 我了解了下他的面试过程,就一点,不管是阿里还是腾讯的面试,这个级别的程序员,都会考察项目管理能力,并且权重非常大. ...