Простой динамический сервис 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-адреса для выполнения операции скручивания...