我想找到一种方法将etcd集群部署为Docker Swarm服务,该服务可自动配置,无需任何交互。基本上,我想到了这个命令的精神:
docker service create --name etcd --replicas 3 my-custom-image/etcd
我假设覆盖网络配置为安全并提供加密和身份验证,因此我认为我不需要TLS,甚至不需要--auto-tls
。当这可以在另一层解决时,不希望额外的头痛找到提供证书的方法。
我需要为每个实例提供一个唯一的--name
,但我可以从使用export ETCD_NAME=$(hostname --short)
的入口点脚本中获取它。
问题是,我坚持初始配置。根据{{3}},有三个选项,但似乎都不适合:
etcd
,我将获得节点容器的所有IP,但没有_etcd-server._tcp
条记录。ETCD_INITIAL_CLUSTER
,因为虽然我知道IP,但我不知道其他节点的名称,我也不知道有什么方法可以解决这些问题。 (我不打算将Docker API套接字暴露给etcd容器。)docker-compose.yml
部署一个堆栈,它会自动做正确的事情,没有问题”毫无疑问的情况。有什么技巧我可以拉?
答案 0 :(得分:2)
正如您已经正确地说过您知道节点容器的IP,
所以建议的技巧是简单地构建所需的etcd
名称作为每个节点的IP地址的衍生物。
etcd
内的etcd-$ip
ETCD_INITIAL_CLUSTER
' IP以类似的方式名称可以像etcd-$ip
一样简单,甚至更好,即我们可以使用netmask
计算此网络上节点的IP,使名称更漂亮。
在这种情况下,在简单的3节点配置中,最终可能会有etcd-02
etcd-03
等名称
name属性没有特定要求,它只需要是唯一且可读的。虽然它确实看起来像一个技巧,它可能会起作用