系列文章
概述
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的网络。
场景一: 在主机上公开应用
从最简单的用例开始:你有一个 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:
我们可以通过主机上的 redis-cli
连接到它:
$ redis-cli -p 30627
127.0.0.1:30627> ping
PONG
标签:系列,service,app,redis,网络,NOMAD,Nomad,Consul From: https://www.cnblogs.com/east4ming/p/17689237.html