我想找到一種方法將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