В настоящее время я использую кластер 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
service в облачной конфигурации в нескольких местах ... поэтому мне нужно создать файл 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 после того, как я его загрузил?
Итак, мне, вероятно, следовало порыться в некоторых других облачных провайдерах ... например, есть этот провайдер 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-адрес для выполнения операции curl ...