VMware ESXi に複数の Coreos インスタンスをデプロイしています。etcd は、特に IP アドレスが変更された場合に、非常に気難しいようです。
etcd クラスターを混乱させない方法で、cloud-config を介して静的 IP アドレスを定義できるようにしたいと考えています。coreos の起動中に必要なことは、etcd を開始する前に、最初に静的 IP アドレスを使用してインターフェイスを起動する必要があるようです。user_data ファイルのこのセクションでこれを実行しようとしました:
write_files:
- path: /etc/systemd/network/static.network
permissions: 0644
content: |
[Match]
Name=ens192
[Network]
Address=192.168.1.58/24
Gateway=192.168.1.1
DNS=192.168.1.42
何が起こるかというと、coreos-cloudinit プロセスは起動時にこのファイルをファイルシステムに書き込みますが、それは最初に DHCP を使用してネットワーク インターフェイスを立ち上げた後でのみです。etcd は起動しますが、user_data addr と peer-addr の設定が DHCP と一致しないため、混乱します。最初の起動後にシステムを手動で再起動すると、以前に static.network ファイルに記録された静的 IP アドレスの使用が開始されます。この 2 回目の再起動を回避する方法、つまり static.network を定義した後にネットワークを開始する方法はありますか?
根本的な問題は、vmware プロバイダーが、vagrant などの他のプロバイダーで使用される $public_ip4 構造を理解していないことにあるようです。
etcd:
# generate a new token for each unique cluster from https://discovery.etcd.io/new
# WARNING: replace each time you 'vagrant destroy'
discovery: https://discovery.etcd.io/####
addr: $public_ipv4:4001
peer-addr: $public_ipv4:7001
私が知る限り、vagrant/virtualbox を使用する場合、この問題は存在しません。