我想找到一种方法将etcd群集部署为Docker Swarm服务,该服务将自动配置自身而无需任何交互。基本上,我想的东西在这个命令的精神:作为Docker群集服务自动配置etcd群集
docker service create --name etcd --replicas 3 my-custom-image/etcd
我假设覆盖网络配置是安全的,并提供加密和认证,所以我相信我不需要TLS,甚至没有--auto-tls
。不希望额外的头痛找到配置证书的方式,这可以在另一层上解决。
对于每个实例,我都需要一个独特的--name
,但是我可以从使用export ETCD_NAME=$(hostname --short)
的入口点脚本中获得。
问题是,我卡在初始配置。基于该clustering guide有三个选项,但没有一个似乎适合:
- 的DNS发现的情况是最接近于我正在寻找,但码头工人此刻doesn't support DNS SRV records发现。我可以查询
etcd
,我将获取节点容器的所有IP,但没有_etcd-server._tcp
记录。 - 我无法自动构建
ETCD_INITIAL_CLUSTER
,因为虽然我知道IP,但我不知道其他节点的名称,而且我也不知道如何解决这些问题。 (我不打算将Docker API套接字暴露给etcd容器) - 没有预先存在的etcd集群,并且在discovery.etcd.io中提供初始配置URI是我感兴趣的一种可能的解决方法不这样做。我的目标是“从这个
docker-compose.yml
部署一个堆栈,它会自动做正确的事情,没有任何问题问”毫无疑问的情况。
有什么窍门可以拉动?
服务容器更新上不要更改IP地址吗?如果容器被移除,在同一个节点上启动(因此它仍然具有相同的数据量),但它认为它不是以前的东西,这会很奇怪。我认为名称的重点在于即使网络标识符可能发生变化,名称仍然存在,因此节点知道其对等点仍然是相同的。 – drdaeman