繁体   English   中英

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

[英]Automatic self-configuration of an etcd cluster as a Docker swarm service

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

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

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

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

问题是,我坚持初始配置。 根据聚类指南 ,有三个选项,但似乎都不适合:

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

有什么技巧可以拉吗?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM