我希望找到一种方法来部署一个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
堆栈,它将自动执行正确的操作,无需询问”的no-brainer场景。
有什么诀窍可以使用吗?