2017-06-04 9 views
18

Docker Swarmサービスとしてetcdクラスタをデプロイする方法を見つけたいと思います。基本的に、私は、このコマンドの精神で何かを考える:Docker swarmサービスとしてのetcdクラスタの自動自己設定

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

ていなくても、私はそのオーバーレイネットワークが安全であると暗号化と認証の両方を提供するように構成されていると仮定していますので、私は私がTLSを必要としないと考えています--auto-tls。証明書をプロビジョニングする方法を見つける余計な頭痛を、別の層で解決できるようにしたくない場合。

各インスタンスに一意の--nameが必要ですが、export ETCD_NAME=$(hostname --short)を使用するエントリポイントスクリプトから取得できます。

問題は、私は初期設定に固執しています。 clustering guideに基づいて、3つのオプションがありますが、どれも合うように思わない:doesn't support DNS SRV records発見の瞬間に

  • DNSディスカバリシナリオは私が探しているものに最も近いですが、ドッカー。私はetcdを検索することができ、ノードのコンテナのすべてのIPを取得しますが、_etcd-server._tcpレコードはありません。
  • 私はIPを知っていますが、他のノードの名前は分かりませんし、それらを理解する方法も知らないので、自動的にETCD_INITIAL_CLUSTERをビルドすることはできません。 (これについては、Docker APIソケットをetcdコンテナに公開するつもりはありません)。
  • etcdクラスタがなく、discovery.etcd.ioからの初期設定URIを提供すると、私が興味を持っている可能性のある回避策ですこれをしないでください。私は "このdocker-compose.ymlからスタックをデプロイするだけで、自動的に正しいことをするつもりですが、質問はありません"と思っています。

私はプルできるトリックはありますか?

答えて

2

あなたのノードのコンテナのIPアドレスを知っていると正しく言っていますが、 という具合に、各ノードのIPアドレスの派生物として必要な名前を単に作成するだけです。各コンテナetcd内部

  • を使用して命名されたこの特定のコンテナのIPすなわち
  • ETCD_INITIAL_CLUSTER

名前がかさえのような単純なものでした同様の方法で、他のコンテナのIPアドレスを使用して移入されますつまり、netmaskを使用して、このネットワーク上のノードのIPを計算して、名前をよりきれいにすることができます。 1はetcd-02etcd-03など

のような名前はありません特定の要件を持ってしまう可能性があり、単純な3-ノード構成でこの場合

はそれだけでユニークで人間が読めることが必要であり、name属性のために存在します。それは本当にうまくいくようですが、

+0

サービスコンテナのアップデートでIPアドレスが変更されないのですか?コンテナが削除され、同じノードで開始されている(つまり同じデータ量を持っている)のですが、これまでとは違うものと考えているのは奇妙です。名前のポイントは、ネットワーク識別子が変わっても、名前は変わらないので、ノードは同じであることをノードに認識させるということです。 – drdaeman

関連する問題