CoreOSではDockerコンテナの分散管理を行うためにKVS(Key Value Store)としてETCD(etc distributed)を採用しています。
CoreOS 1688.5.3以降ではETCD v3になります。
弊社ではセキュリティの観点からETCD共有ディスカバリーサービスのdiscovery.etcd.ioを利用せず、マスターノードVPS上のETCDをエンドポイントにして、外部からはアクセスできないプライベートネットワーク内で利用しています。
ETCDを使用するため、CoreOS構成ファイルcontainer-linux-config.yamlに定義を追加します。
プライベートネットワーク上で使用しますので、セキュア接続のhttpsではなくhttpで接続しています。
<html>
etcd:
version: 3.3.8 name: <span style="color:red;">master</span> …(1) data_dir: /var/lib/etcd listen_client_urls: http://0.0.0.0:2379 …(2) listen_peer_urls: http://<span style="color:red;">192.168.111.1</span>:2380 …(3) advertise_client_urls: http://<span style="color:red;">192.168.111.1</span>:2379 …(4) initial_advertise_peer_urls: http://<span style="color:red;">192.168.111.1</span>:2380 …(5) initial_cluster: <span style="color:red;">master</span>=http://<span style="color:red;">192.168.111.1</span>:2380 …(6) :
systemd:
units: - name: <span style="color:red;">etcd-member</span>.service …(7) enabled: true dropins: - name: 10-docker-network.conf …(8) contents: | [Service] ExecStartPost=/bin/etcdctl set /discovery/etcd-cluster/_config/size 1
(1) masterはクラスタを識別する固有の任意名です。ホスト名を指定しています。<br>
(2) 各クライアントからのクラスタ間通信を受け入れるために待機するURLです。<br>
0.0.0.0ですべてのインターフェースからの受け入れを待機します。
(3) クラスタ間の制御情報を受け付けるURLです。IPアドレスで指定します。<br>
(4) クラスタ間通信用の公開用URLです。IPアドレスで指定します。<br>
(5) クラスタ間制御情報通信用の公開用URLです。IPアドレスで指定します。<br>
(6) ETCDサービスの最初のクラスタを登録します。IPアドレスで指定します。<br>
(7) ETCD v3のサービス名はetcd-memberです。<br>
(8) ETCDサービス起動後にクラスタが使用できるように構成クラスタ数 1を設定しています。
</html>
マスターサーバー上のETCDをディスカバリーサーバーとして定義します。
<html>
etcd:
version: 3.3.8 name: <span style="color:red;">appsrv</span> …(1) data_dir: /var/lib/etcd listen_client_urls: http://0.0.0.0:2379 …(2) listen_peer_urls: http://<span style="color:red;">192.168.111.2</span>:2380 …(3) advertise_client_urls: http://<span style="color:red;">192.168.111.2</span>:2379 …(4) initial_advertise_peer_urls: http://<span style="color:red;">192.168.111.2</span>:2380 …(5) discovery: http://<span style="color:red;">192.168.111.1</span>:2379/v2/keys/discovery/etcd-cluster …(6)
(1) appsrvはクラスタを識別する固有の任意名です。ホスト名を指定しています。<br>
(2) 各クライアントからのクラスタ間通信を受け入れるために待機するURLです。<br>
0.0.0.0ですべてのインターフェースからの受け入れを待機します。
(3) クラスタ間の制御情報を受け付けるURLです。IPアドレスで指定します。<br>
(4) クラスタ間通信用の公開用URLです。IPアドレスで指定します。<br>
(5) クラスタ間制御情報通信用の公開用URLです。IPアドレスで指定します。<br>
(6) ETCDサービスのディスカバリーサーバーを指定します。ホスト名で指定できます。
</html>