1

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

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

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

我正在使用最新版本的游牧民族。

我配置了我的游牧奴隶,如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 中),我会很好,但是我不能在每个工作节点中部署每个应用程序的多个实例(由于端口冲突)

4

3 回答 3

1

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

  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

于 2021-01-06T12:43:06.970 回答
1

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

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

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

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

实验室:实验室 Trafik:Trafik 可视化工具

于 2021-03-09T20:12:12.933 回答
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 安排为系统作业,以便它自动出现在每个主机上。

于 2021-01-05T18:28:57.140 回答