系列文章
概述
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
复制代码 <blockquote>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |