我正在使用gliderlabs/registrator容器的领事,向领事展示我的活动容器。当我过快地删除容器时,服务不会从领事中删除,而使“僵尸”服务不再存在。我听说可以使用gliderlabs/registrator容器的其他选项来防止这种情况,例如-cleanup
。但是,我无法使用此选项成功运行任何注册人。这是我的registrators我目前的搬运工运行命令:如何通过领事和gliderlabs /注册人防止僵尸服务?
docker run -d -h $(hostname -i) --name registrator1 \
-v /var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator \
consul://$(hostname -i):8500
我有什么要添加到此运行命令有registrator删除领事不再存在或已经下降的任何容器?
更新:我已经找到了问题
所以我用我的领事集群registrator的跑着群。为了为群集提供故障转移,我在我的consul群集前放置了一个负载均衡器,并将我的群集和注册器容器连接到负载均衡器的IP地址。这允许任何领事节点下降而不会失去群体。
然而,swarm并没有将自己注册为服务。它将每个节点注册为一个关键值,并且不会绑定到consul集群中的任何节点。注册到注册人的领事的容器被创建为服务并绑定到单个领事服务器。
我认为最近发生的事情是,当我删除一个容器时,注册人去从领事删除服务,但它只有33%的机会击中正确的领事服务器,并删除服务,因为我的LB正在做循环赛。
我所有的swarm master,负载平衡器,领事服务器和swarm worker都在不同的机器上运行。我的注册人正在我的群体工作人员机器上运行。一切都在容器中运行。
启用粘性负载平衡是解决我的问题的临时修复程序。不过,我认为试图在我的群体工作人员身上运行某种类型的领事,并让注册人将自己绑定到在本地主机上运行的领事,这可能是解决方案。我相信这可能是在领事github https://github.com/hashicorp/consul/tree/master/bench中描述的“板凳工人”。我对领事仍然相当陌生,所以我仍然试图全力以赴。