我爱普洱茶 发表于 2023-9-10 04:37:04

Nomad系列-Nomad网络模式

系列文章


[*]Nomad 系列文章
概述

Nomad 的网络和 Docker 的也有很大不同, 和 K8s 的有很大不同. 另外, Nomad 不同版本(Nomad 1.3 版本前后)或是否集成 Consul 及 CNI 等不同组件也会导致网络模式各不相同. 本文详细梳理一下 Nomad 的主要几种网络模式
在Nomad 1.3发布之前,它自身并不支持发现集群中运行的其他应用程序。在集群中调度任务时,这是一个非常基本的要求。Nomad依赖于Consul来发现其他“服务”,并为注册和获取服务记录提供一流的支持,这使得事情变得更容易。Consul通过各种机制提供记录,例如REST API,DNS和Consul模板,这些模板在可以注入到应用程序中的Go模板中呈现服务的确切IP/端口。
学习 Nomad 的一个难点在于, Nomad 往往和 Consul 一起运行, 那么对于这种情况来说,一个主要的学习曲线是,我们必须首先了解Consul是如何工作的,部署一个Consul集群, 同时要融会贯通 2 个软件就很难了。Nomad 1.3 解决了这个问题的一部分(即不需要运行Consul就可以进行基本的服务发现),非常适合刚刚开始使用基于Nomad的网络。
场景一: 在主机上公开应用

https://img2023.cnblogs.com/other/3034537/202309/3034537-20230909121142033-135203287.png
从最简单的用例开始:你有一个 redis 容器,你想把它暴露给主机。 相当于我们想要做的docker run是 :
docker run --rm -p=6379 redis此命令公开主机上的动态端口。要查看端口号到底是什么,您可以执行 docker ps 并在 PORTS 下找到类似于 0.0.0.0:49153->6379/tcp 的输出。
$ redis-cli -p 49153               
127.0.0.1:49153> ping
PONG那么, 在 Nomad 中相同的操作如何实现?
job "redis" {
type      = "service"

group "redis" {
    network {
      mode = "host"
      port "redis" {
      to = 6379
      }
    }

    task "redis" {
      driver = "docker"

      config {
      image = "redis"
      ports = ["redis"]
      }
    }
}
}在几行配置中,我们有一个正在运行的Docker容器,它公开了一个动态端口 30627:
https://img2023.cnblogs.com/other/3034537/202309/3034537-20230909121142219-309953492.png
我们可以通过主机上的 redis-cli 连接到它:
$ redis-cli -p 30627
127.0.0.1:30627> ping
PONG<blockquote>

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Nomad系列-Nomad网络模式