Nomad 和 consul 设置

问题描述

我应该将领事奴隶与游牧奴隶一起运行还是在他们内部运行? 后者可能根本没有意义,但我只是为了以防万一。

我用 consul slaves 和 nomad slaves 一起运行了我自己的 nomad 集群(在工作节点内部),我的可部署工件是 docker 容器(java spring 应用程序)。 我当前设置的问题是我的应用程序无法访问 consul slaves(读取配置)(0.0.0.0、localhost、worker node ip 都没有工作)

假设我的服务公开了 8080,我将 docker 部分(在 hcl 文件中)配置为使用网桥作为网络模式。 Nomad 将 8080 映射到 43210。 一切都很好,直到我的服务尝试访问 consul slave 以读取配置。理想情况下,将 nomad 工作节点 IP 作为领事主机提供给 Spring 就足够了。但由于某种原因,事实并非如此。

我使用的是最新版本的 nomad。

我像https://github.com/bmd007/statefull-geofencing-faas/blob/master/infrastructure/nomad/client1.hcl一样配置了我的游牧奴隶

下面的链接显示了我如何配置/运行我的 consul slave: https://github.com/bmd007/statefull-geofencing-faas/blob/master/infrastructure/server2.yml

注意:如果我使用静态端口映射和主机作为 docker 的网络模式(在 nomad 中),我会没事,但是我不能在每个工作节点中部署每个应用程序的一个以上实例(由于端口冲突)

解决方法

Nomad 作业侦听特定的主机/端口对。

enter image description here

您可能希望通过 ssh 进入服务器并运行 docker ps 以查看作业正在侦听的主机/端口对。

a93c5cb46a3e   image-name bash   2 hours ago    Up 2 hours  10.0.47.2:21435->8000/tcp,10.0.47.2:21435->8000/udp foo-bar

此外,您需要确保 consul nomad 作业正在侦听端口 0.0.0.0,或机器的特定 IP。我相信这是这个配置值:https://www.consul.io/docs/agent/options.html#_bind

所有这些都需要匹配才能联系到领事。

更一般地说,我可能会建议:如果您要使用 nomad 运行 consul,您可能希望切换到主机网络,这样您就不必处理容器内网络的细节。此外,您可以将 consul 安排为 system job,以便它自动出现在每个主机上。

,

所以我设法解决了这个问题:

  1. nomad.job.group.network.mode = 主机
  2. nomad.job.group.network.port:port "http" {}
  3. nomad.job.group.task.driver = docker
  4. nomad.job.group.task.config.network_mode = 主机
  5. nomad.job.group.task.config.ports = ["http"]
  6. nomad.job.group.task.service.connect:connect { native = true }
  7. nomad.job.group.task.env:SERVER_PORT= "${NOMAD_PORT_http}"
  8. nomad.job.group.task.env:SPRING_CLOUD_CONSUL_HOST = "localhost"
  9. nomad.job.group.task.env:SPRING_CLOUD_SERVICE_REGISTRY_AUTO_REGISTRATION_ENABLED = "false"
  10. 使用 docker-compose 与游牧代理(从属)一起运行 consul 代理(从属),主机作为网络模式 + 公开所有必需的端口。

游牧工作示例:https://github.com/bmd007/statefull-geofencing-faas/blob/master/infrastructure/nomad/location-update-publisher.hcl

consul 代理配置示例(docker-compose 文件):https://github.com/bmd007/statefull-geofencing-faas/blob/master/infrastructure/server2.yml

,

免责声明:LAB 是名为:LiteArch Trafik 的集群可视化框架的一部分,我创建它作为一个有趣的练习来理解 Nomad 和 Consul。

我花了很长时间才将注意力从 K8S 转移到 Nomad 和 Consul, 整合它们是我去年花费的努力之一。 当服务解析不起作用时,我发现它或多或少是服务器上的 DNS 配置。

Hashicorp 文档中有一个部分,称为DNS 转发 Hashicorp DNS Forwarding

我创建了一个 LAB,它解释了如何设置 Nomad 和 Consul。 但您可以单独使用 LAB。 在学习了如何安装集群以及如何集成 Nomad 和 Consul 之后,我创建了 LAB。 使用 LAB,您需要安装 Ubuntu Multipass。 您执行一个脚本,您将在本地获得具有三台服务器和三个节点的全功能集群。 它还向您展示了如何在 Ubuntu 上安装 docker 并将服务与 Consul 和 DNS 服务集成。 运行 LAB 后,您将获得 Nomad、Fabio、Consul 的链接。 希望它能指导你完成 Nomad 和 Consul 的学习过程

实验室:LAB 特拉菲克:Trafik Visualizer

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...