CoreOS 中用于云配置的简单动态 user_data 服务?

CoreOS 中用于云配置的简单动态 user_data 服务?

我当前在 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 操作...

相关内容