将etcd集群自动配置为Docker swarm服务

时间:2017-06-04 01:33:04

标签: docker deployment configuration etcd docker-swarm-mode

我想找到一种方法将etcd集群部署为Docker Swarm服务,该服务可自动配置,无需任何交互。基本上,我想到了这个命令的精神:

docker service create --name etcd --replicas 3 my-custom-image/etcd

我假设覆盖网络配置为安全并提供加密和身份验证,因此我认为我不需要TLS,甚至不需要--auto-tls。当这可以在另一层解决时,不希望额外的头痛找到提供证书的方法。

我需要为每个实例提供一个唯一的--name,但我可以从使用export ETCD_NAME=$(hostname --short)的入口点脚本中获取它。

问题是,我坚持初始配置。根据{{​​3}},有三个选项,但似乎都不适合:

  • DNS发现场景最接近我正在寻找的,但Docker clustering guide目前正在发现。我可以查找etcd,我将获得节点容器的所有IP,但没有_etcd-server._tcp条记录。
  • 我无法自动构建ETCD_INITIAL_CLUSTER,因为虽然我知道IP,但我不知道其他节点的名称,我也不知道有什么方法可以解决这些问题。 (我不打算将Docker API套接字暴露给etcd容器。)
  • 没有预先存在的etcd集群,虽然从discovery.etcd.io提供初始配置URI是一种可能的解决方法,我有兴趣不这样做。我的目标是“只是从这个docker-compose.yml部署一个堆栈,它会自动做正确的事情,没有问题”毫无疑问的情况。

有什么技巧我可以拉?

1 个答案:

答案 0 :(得分:2)

正如您已经正确地说过您知道节点容器的IP, 所以建议的技巧是简单地构建所需的etcd名称作为每个节点的IP地址的衍生物。

    每个容器etcd内的
  • 使用此特定容器的IP命名,即etcd-$ip
  • 使用其他容器填充
  • ETCD_INITIAL_CLUSTER' IP以类似的方式

名称可以像etcd-$ip一样简单,甚至更好,即我们可以使用netmask计算此网络上节点的IP,使名称更漂亮。

在这种情况下,在简单的3节点配置中,最终可能会有etcd-02 etcd-03等名称

name属性没有特定要求,它只需要是唯一且可读的。虽然它确实看起来像一个技巧,它可能会起作用