Простой динамический сервис user_data для облачной конфигурации в CoreOS?

В настоящее время я использую кластер CoreOS в среде VMWare ESXi, используя ISO, смонтированный в vCenter, как описано в этом сообщении в блоге...

http://www.chrismoos.com/2014/05/28/coreos-with-cloud-config-on-vmware-esxi

Однако в этой конкретной среде VMWare я должен явно определить свой назначенный IP-адрес в /etc/systemd/network/static.network Служба в облачной конфигурации в нескольких местах... поэтому мне нужно создать файл ISO для каждой машины CoreOS, которую я хочу запустить. Это выглядит нормально, но не масштабируется... и иногда ИТ-администраторы непреднамеренно отключают диск ISO.

В документации по распространению OEM ( здесь) говорится, что вы можете определить /usr/share/oem/cloud-config.yml файл и что вы должны иметь возможность "создавать дополнительные модули, которые обрабатывают предоставленные пользователем метаданные, как описано ниже".

Затем освещается процесс для EC2 и Rackspace, и объяснение просто указывает на их запекание в коде в CoreOS.

Что я хотел бы сделать, это создать модуль CoreOS, который тянет cloud-config файл через HTTP с простым URL... что-то вроде http://server-ip/cloud-configs/specific-hostname и вытащить файл YAML оттуда при загрузке...

Это решило бы две проблемы: мне не пришлось бы предоставлять отдельный ISO для каждой машины CoreOS, и мне не нужно было бы, чтобы администраторы VMWare последовательно управляли ISO для каждой машины CoreOS.

В документах не совсем ясно, как лучше всего это сделать. Похоже, Amazon/Rackspace работает, потому что у них есть код внутри ОС. Как Джо Шмо обеспечивает динамические данные конфигурации облака вне подключения 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 для анализа cloud-config через URL...

#!/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-адреса для выполнения операции скручивания...

Другие вопросы по тегам