2

我在 VMware ESXi 上部署了几个 coreos 实例。etcd 似乎对 IP 地址非常挑剔,尤其是当它们发生变化时。

我希望能够通过 cloud-config 以一种不会混淆 etcd 集群的方式定义静态 IP 地址。看起来在 coreos booup 期间需要发生的事情是它需要在启动 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 地址。是否可以避免第二次重新启动,即在定义 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 回答