【问题标题】:Nomad and consul setupNomad 和领事设置
【发布时间】:2021-04-11 03:39:46
【问题描述】:

我应该在游牧奴隶旁边还是在他们内部运行执政官奴隶? 后者可能根本没有意义,但我问它以防万一。

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

假设我的服务公开了 8080,我将 docker 部分(在 hcl 文件中)配置为使用网桥作为网络模式。 Nomad 将 8080 映射到 43210。 一切都很好,直到我的服务尝试到达领事奴隶以读取配置。理想情况下,将游牧工作节点 IP 作为 Spring 的领事主机就足够了。但由于某种原因,它不是。

我正在使用最新版本的 nomad。

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

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

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

【问题讨论】:

  • 您是否尝试过在使用 nomad 部署的 docker 容器中使用 172.17.0.1
  • 这里的“奴隶”是什么?领事有客户端和服务器,你的意思是客户端吗? consul.io/docs/architecture。不想学究气,只是不知道发生了什么。
  • 啊,我明白了。 server2.yml 显示您如何运行您的领事“服务器”,对吗?你的领事客户的游牧工作没有显示?
  • 我建议按照您的建议将 consul nomad 作业作为“系统”作业运行并使用静态端口映射。我们这样做是为了一些事情,虽然你永远无法使用端口 8500 主持另一项工作,但我认为你的服务总是可以通过 machine_ip:8500 联系到领事更优雅

标签: spring-boot docker deployment console nomad


【解决方案1】:

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

您可能希望通过 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,以便它自动出现在每个主机上。

【讨论】:

  • 我会试一试,结果会回来的。在我对系统的理解中,领事作为游牧系统工作是缺失的。
【解决方案2】:

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

  1. nomad.job.group.network.mode = 主机
  2. nomad.job.group.network.port:port "http" {}
  3. nomad.job.group.task.driver = 码头工人
  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 与 nomad 代理(从)一起运行 consul 代理(从),主机为网络模式 + 公开所有必需的端口。

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

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

【讨论】:

    【解决方案3】:

    免责声明: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

    【讨论】:

      猜你喜欢
      • 2021-03-22
      • 2018-03-06
      • 2019-04-18
      • 2018-05-07
      • 2020-02-05
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多