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