簡體   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