首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的docker镜像是否需要自己的consul client实例?

我的docker镜像是否需要自己的consul client实例?
EN

Stack Overflow用户
提问于 2016-10-19 20:03:06
回答 2查看 2.1K关注 0票数 3

我已经将一个停靠的应用程序拆分为几个容器(一些前端和后端服务器、负载均衡器、mysql、elasticsearch等)。负载均衡器的配置需要知道哪些容器正在运行,因此我正在使用Consul服务发现注册服务。

但我不太确定在每个docker容器上运行consul agent是不是一个好主意,而不是使用docker主机来监督所有正在运行的docker容器,并通过Consul的HTTP-API注册它们。

有没有我可以遵循的最佳实践?

EN

回答 2

Stack Overflow用户

发布于 2017-07-12 13:57:33

您不需要在每个docker容器上都运行一个consul代理,您只需通过将consul的DNS暴露给您的本地来利用它。下面的内容不是来自容器,但你无论如何都会明白我在做什么。

下面是我用来运行代理的命令

代码语言:javascript
复制
consul agent -data-dir /var/lib/consul/ -config-dir /etc/consul.d/ -bind 10.X.X.X -dns-port 53 -join consul-master

注意:我已经为consul-master添加了一个带有其IP的/etc/hosts条目,并且还在/etc/resolv.conf文件中为127.0.0.1添加了一个名称服务器。

目录/etc/consul.d/保存我的服务配置文件。下面是一个示例:

代码语言:javascript
复制
{
  "service": {
    "name": "stackoverflow",
    "tags": [
      "example"
    ],
    "port": 5000
  }
}

现在,一旦我的consul agent运行起来,我就可以通过dig命令或http api请求检查任何具有consul agent (服务器/客户机)的主机,如下所示:

代码语言:javascript
复制
curl http://stackoverflow.service.consul:80/api/v1/ping
{"success":true,"message":"pong"}

对于DNS:

代码语言:javascript
复制
dig @127.0.0.1 -p 53 stackoverflow.service.consul

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.55.amzn1 <<>> @127.0.0.1 -p 53 tracker.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57167
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;tracker.service.consul.        IN  A

;; ANSWER SECTION:
tracker.service.consul. 0   IN  A   X.X.X.X

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Jul  7 11:29:01 2017
;; MSG SIZE  rcvd: 56

希望这会有所帮助,并给出一个清晰的概念。

票数 3
EN

Stack Overflow用户

发布于 2016-10-20 00:21:53

我不确定是否有最佳实践,但我发现这篇博客文章对Automatic Docker Service Announcement with Registrator非常有帮助。他谈到了服务注册的几种方法及其优点和缺点。

更直接地回答您的问题,不,您不应该在每个容器中运行咨询代理。

一种选择是在每台主机上运行一个consul代理。然后,您可以使用诸如Registrator之类的工具来监视新容器的启动和关闭,并自动更新Consul。主要的优点是你的容器只有一个任务要做,那就是运行你的应用程序。注册器还有一项工作要做,监视容器启动/停止事件,并将它们记录在领事中。您的容器可能对consul一无所知,但仍然参与服务发现。

还有一个Autopilot pattern,它建议走另一个方向,让你的应用程序领事知道,这样它就可以报告自己的健康状况并发现自己的依赖项。我在这个模式上看到的大多数信息都来自Joyent (就像这个blog post)。从不同的角度了解如何在应用程序中实现可伸缩性和弹性,值得一读。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40130905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档