2

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 を使用する場合、この問題は存在しません。

4

1 に答える 1

1

CoreOS ボックスのネットワークを定義する方法は、systemd ユニット ファイルを使用することです。私が使用するものの一般的な考え方は次のとおりです。

coreos:
...
  units:
...
    - name: 00-eno1.network
      runtime: true
      content: |
        [Match]
        Name=eno1

        [Network]
        DNS=10.0.0.10
        DNS=10.1.0.10
        Domains=domain.local
        Address=10.0.0.20/24
        Gateway=10.0.0.1
...

ファイルの内容を自分のものに置き換えるだけです。CoreOS と systemd は、etcd の起動など、他の処理を行う前に静的ネットワークの構成を処理します。

于 2015-05-06T22:10:30.253 に答える