Nomad 和 consul 设置
Nomad and consul setup
我应该 运行 领事奴隶与游牧奴隶一起还是在他们里面?
后者可能根本没有意义,但我问它以防万一。
我用 consul slaves 运行ning 和游牧从属(在工作节点内)建立了自己的游牧集群,我的可部署工件是 docker 容器(java spring 应用程序)。
我当前设置的问题是我的应用程序无法访问 consul slaves(读取配置)(none of 0.0.0.0,localhost,worker node ip worked)
假设我的服务公开了 8080,我将 docker 部分(在 hcl 文件中)配置为使用网桥作为网络模式。 Nomad 将 8080 映射到 43210。
在我的服务尝试联系 consul slave 以读取配置之前,一切都很好。理想情况下,将游牧工作节点 IP 作为领事主机提供给 Spring 就足够了。但出于某种原因,它不是。
我正在使用最新版本的游牧。
我将游牧奴隶配置为 https://github.com/bmd007/statefull-geofencing-faas/blob/master/infrastructure/nomad/client1.hcl
下面的 link 显示了我如何 configured/ran 我的领事奴隶:
https://github.com/bmd007/statefull-geofencing-faas/blob/master/infrastructure/server2.yml
注意:如果我使用静态端口映射和主机作为 docker 的网络模式(在 nomad 中)我会没问题,但是我不能在每个应用程序中部署一个以上的实例工作节点(由于端口冲突)
Nomad 作业侦听特定的 host/port 对。
您可能想通过 ssh 进入服务器并 运行 docker ps
以查看作业正在侦听的 host/port 对。
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
所有这些都需要匹配才能联系到领事。
更一般地说,我可能会建议:如果你打算 运行 与游牧领事,你可能想切换到主机网络,这样你就不必处理容器内的网络。此外,您可以将 consul 安排为 system job,以便它自动出现在每个主机上。
所以我设法解决了这个问题:
- nomad.job.group.network.mode = 主机
- nomad.job.group.network.port:
port "http" {}
- nomad.job.group.task.driver = docker
- nomad.job.group.task.config.network_mode = 主机
- nomad.job.group.task.config.ports =
["http"]
- nomad.job.group.task.service.connect:
connect { native = true }
- nomad.job.group.task.env:
SERVER_PORT= "${NOMAD_PORT_http}"
- nomad.job.group.task.env:
SPRING_CLOUD_CONSUL_HOST = "localhost"
- nomad.job.group.task.env:
SPRING_CLOUD_SERVICE_REGISTRY_AUTO_REGISTRATION_ENABLED = "false"
- 运行 consul agent (slaves) 使用 docker-与游牧代理 (slave) 并用主机作为网络模式 + 公开所有必需的端口。
领事代理配置示例(docker-撰写文件):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。
您执行一个脚本,您将在本地获得具有三台服务器和三个节点的完整功能集群。
它还向您展示了如何安装 docker 并将这些服务与 Ubuntu 上的 Consul 和 DNS 服务集成。
在 运行 LAB 之后,您将获得指向 Nomad、Fabio 和 Consul 的链接。
希望它能指导您完成 Nomad 和 Consul 的学习过程
实验室:LAB
交通:Trafik Visualizer
我应该 运行 领事奴隶与游牧奴隶一起还是在他们里面? 后者可能根本没有意义,但我问它以防万一。
我用 consul slaves 运行ning 和游牧从属(在工作节点内)建立了自己的游牧集群,我的可部署工件是 docker 容器(java spring 应用程序)。 我当前设置的问题是我的应用程序无法访问 consul slaves(读取配置)(none of 0.0.0.0,localhost,worker node ip worked)
假设我的服务公开了 8080,我将 docker 部分(在 hcl 文件中)配置为使用网桥作为网络模式。 Nomad 将 8080 映射到 43210。 在我的服务尝试联系 consul slave 以读取配置之前,一切都很好。理想情况下,将游牧工作节点 IP 作为领事主机提供给 Spring 就足够了。但出于某种原因,它不是。
我正在使用最新版本的游牧。
我将游牧奴隶配置为 https://github.com/bmd007/statefull-geofencing-faas/blob/master/infrastructure/nomad/client1.hcl
下面的 link 显示了我如何 configured/ran 我的领事奴隶: https://github.com/bmd007/statefull-geofencing-faas/blob/master/infrastructure/server2.yml
注意:如果我使用静态端口映射和主机作为 docker 的网络模式(在 nomad 中)我会没问题,但是我不能在每个应用程序中部署一个以上的实例工作节点(由于端口冲突)
Nomad 作业侦听特定的 host/port 对。
您可能想通过 ssh 进入服务器并 运行 docker ps
以查看作业正在侦听的 host/port 对。
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
所有这些都需要匹配才能联系到领事。
更一般地说,我可能会建议:如果你打算 运行 与游牧领事,你可能想切换到主机网络,这样你就不必处理容器内的网络。此外,您可以将 consul 安排为 system job,以便它自动出现在每个主机上。
所以我设法解决了这个问题:
- nomad.job.group.network.mode = 主机
- nomad.job.group.network.port:
port "http" {}
- nomad.job.group.task.driver = docker
- nomad.job.group.task.config.network_mode = 主机
- nomad.job.group.task.config.ports =
["http"]
- nomad.job.group.task.service.connect:
connect { native = true }
- nomad.job.group.task.env:
SERVER_PORT= "${NOMAD_PORT_http}"
- nomad.job.group.task.env:
SPRING_CLOUD_CONSUL_HOST = "localhost"
- nomad.job.group.task.env:
SPRING_CLOUD_SERVICE_REGISTRY_AUTO_REGISTRATION_ENABLED = "false"
- 运行 consul agent (slaves) 使用 docker-与游牧代理 (slave) 并用主机作为网络模式 + 公开所有必需的端口。
领事代理配置示例(docker-撰写文件):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。 您执行一个脚本,您将在本地获得具有三台服务器和三个节点的完整功能集群。 它还向您展示了如何安装 docker 并将这些服务与 Ubuntu 上的 Consul 和 DNS 服务集成。 在 运行 LAB 之后,您将获得指向 Nomad、Fabio 和 Consul 的链接。 希望它能指导您完成 Nomad 和 Consul 的学习过程
实验室:LAB 交通:Trafik Visualizer