如何通过config-drive为VMware ESXi中的coreos定义静态IP地址

时间:2014-12-19 17:41:36

标签: vmware coreos etcd

我在VMware ESXi上部署了几个coreos实例。 etd似乎对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提供者不理解其他提供者使用的$ public_ip4构造,例如vagrant:

  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时不存在此问题。

1 个答案:

答案 0 :(得分: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。