我当前在 VMWare ESXi 环境中运行 CoreOS 集群的方式是使用在 vCenter 中安装的 ISO,如本博客文章所述...
http://www.chrismoos.com/2014/05/28/coreos-with-cloud-config-on-vmware-esxi
但是,在特定的 VMWare 环境中,我必须/etc/systemd/network/static.network
在几个地方将分配的 IP 地址明确定义为云配置中的服务……所以我必须为要运行的每台 CoreOS 机器创建一个 ISO 文件。这似乎没问题,但无法扩展……有时 IT 管理员会无意中卸载 ISO 驱动器。
OEM 分发文档(这里) 说您可以定义一个/usr/share/oem/cloud-config.yml
文件,并且您应该能够“创建处理用户提供的元数据的附加单元,如下所述。”
然后阐明了 EC2 和 Rackspace 的流程,并且解释只是指向它们在 CoreOS 中的嵌入式代码。
我想要做的是创建一个 CoreOS 单元,它cloud-config
使用一个简单的 URL 通过 HTTP 提取文件...类似于http://server-ip/cloud-configs/specific-hostname
在启动时从那里提取 YAML 文件...
这将解决两个问题:我不需要为每台 CoreOS 机器提供单独的 ISO,也不需要让 VMWare 管理员始终如一地管理每台 CoreOS 机器的 ISO。
文档并没有真正明确说明实现此目的的最佳方法。似乎 Amazon/Rackspace 之所以能工作,是因为它们的操作系统中有代码。Joe Schmoe 如何在安装 ISO 之外提供动态云配置数据?
最大的问题是,我可以编写一个单元,通过 wget/curl(任何可用的工具)获取文件,但是我如何告诉 CoreOS 在获取 YAML 之后处理它?
答案1
所以,我可能应该仔细研究一下其他一些云提供商......比如有这个‘exoscale’提供商提供了一个 bash 脚本和一个启动该 bash 脚本的单元......
- name: exoscale-cloudinit.service
command: restart
runtime: yes
content: |
[Unit]
Description=Cloudinit from exoscale (cloudstack-style) metadata
Requires=coreos-setup-environment.service
After=coreos-setup-environment.service
[Service]
Type=oneshot
EnvironmentFile=/etc/environment
ExecStart=/usr/share/oem/bin/exoscale-coreos-cloudinit
...以及让 CoreOS 解析 via URL 的方法cloud-config
...
#!/bin/bash
. /usr/share/oem/bin/exoscale-dhcp
DHCP_SERVER=$(get_dhcp_ip)
USERDATA_URL="http://${DHCP_SERVER}/latest/user-data"
block-until-url "${USERDATA_URL}"
coreos-cloudinit --from-url="${USERDATA_URL}"
...但是现在我遇到了一个先有鸡还是先有蛋的问题,除非我有某种方法获取临时 IP 地址来执行 curl 操作...