2016-12-20 3 views
0

私はMarathonでDockerでConsulコンテナを起動しています.JSONファイルの作成に関して多少の主観的な問題があります。Marathonで使用するためのConsul JSONファイルの-bindパラメータの生成

現在、私は、私は、各JSONファイルの-bindアドレスを変更できるようにする必要があり、この形式のJSONファイル

サーバー1.json

{ 
     "id": "consul-server-2", 
     "cmd": "consul agent -server -client=0.0.0.0 -ui -bind=100.10.30.40 -retry-join=server-1.local -data-dir=/tmp/consul", 
     "cpus": 1, 
     "mem": 512.0, 
     "instances": 1, 
     "container": { 
     "type": "DOCKER", 
     "docker": { 
      "image": "consul:latest", 
      "name": "dev-consul", 
      "network": "HOST" 
     } 
     }, 
     "constraints": [ 
     [ 
      "hostname", 
      "CLUSTER", 
      "server-1.local" 
     ] 
     ] 
} 

でコンテナを起動することを計画し、私はBASHでheredocを使用することを計画していましたが、これらのタイプのファイルを作成するための保守性が改善されているかどうかはわかりません。

ConsulやMarathonのフィールドに、特定のポートのIPアドレスを自動的に渡すことができれば理想的ですが、複数のプライベートIPがあるため、手動で設定する必要があるようです。

答えて

0

設定管理の問題があるようです。 私が正しく理解している場合は、それぞれが内部IPアドレスを持ち、各サーバーに適切なサービスファイルを生成したいと考える内部ネットワークに多数のサーバーがあります。

通常は、たとえば次のような構成管理システムを使用します。これを解決するための、不可能な、シェフまたは人形。

私はAnsibleを個人的にお勧めします。なぜなら、使い始めが簡単でオーバーヘッドが低いからです。

問題を解決するには、まずサーバーのIPアドレスでインベントリファイルを作成し、サービスファイル用のJinja2テンプレートを作成します。 そのテンプレート内の各サーバーに正しいIPアドレスを使用し、最後にすべてのファイルをAnsibleで展開できます。

0

consul 0.7.2以上をご覧ください。 Consulにはすぐに文書化される機能があり、IPアドレスの実行時設定が可能です。私はnet=hostを実行しない限り、容器の中に領事を実行することはお勧めしませんが、上記の構成スニペットを使用して:

{ 
      "id": "consul-server-2", 
      "cmd": "consul agent -server -client='{{ GetPrivateIP }}' -ui -bind=100.10.30.40 -retry-join=server-1.local -data-dir=/tmp/consul", 
      "cpus": 1, 
      "mem": 512.0, 
      "instances": 1, 
      "container": { 
      "type": "DOCKER", 
      "docker": { 
       "image": "consul:latest", 
       "name": "dev-consul", 
       "network": "HOST" 
      } 
      }, 
      "constraints": [ 
      [ 
       "hostname", 
       "CLUSTER", 
       "server-1.local" 
      ] 
      ] 
     } 

使用するどのようなアドレスのための他のオプションは、hashicorp/go-sockaddrパッケージに基づいて検討することができます。

関連する問題