【问题标题】:How to define static IP address for coreos in VMware ESXi via config-drive如何通过 config-drive 在 VMware ESXi 中为 coreos 定义静态 IP 地址
【发布时间】:2014-12-19 17:41:35
【问题描述】:

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

【问题讨论】:

    标签: vmware coreos etcd


    【解决方案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)之前处理配置静态网络。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 2018-06-04
      • 2020-04-26
      • 2019-07-26
      • 2012-09-26
      • 2018-11-04
      相关资源
      最近更新 更多