Cloud Init on Google Compute Engine (GCE) с Centos7 / 8 не работает должным образом при первой загрузке, но нормально после любой другой перезагрузки

У нас есть образ CentOS 8 (тоже пробовал 7), и я добавляю некоторую конфигурацию для работы в качестве маршрутизатора.

По какой-то причине проблема в том, что при первом создании экземпляра cloud init не считывает конфигурацию сети, которую мы передаем с использованием метаданных пользовательских данных.

#cloud-config
network
  version: 1
  etc...

Мы настраиваем eth1 для использования dhcp и получаем cloud-init для управления им, а также добавляем маршрут.

Прекрасно работает каждый раз после начальной загрузки (и остановки ›запуска снова).

Мне кажется, что cloud-init не знает о конфигурации, но когда я захожу в машину и делаю cloud-init query userdata, я вижу данные, и даже тогда, если я делаю cloud-init clean && cloud-init init, он ничего не делает. Те же команды работают нормально, если компьютер был перезагружен.


person MrVentzi    schedule 11.07.2020    source источник


Ответы (1)


Попробуйте запустить cloud-init analyze show оба раза (создание экземпляра и последовательная перезагрузка) и проверьте, нет ли различий.

К сожалению, облачные провайдеры злоупотребляют возможностями cloud-init, но не полностью. cloud-init позволяет настраивать конфигурацию, предоставленную поставщиком / пользователем (кто что отменяет), изменять порядок этапов загрузки и т. Д. Это делается в основном потому, что различным поставщикам облачных услуг требуется сеть / предоставление ресурсов / хранилище в разное время. Например, AWS подключает хранилище после сети (только EBS), Azure предоставляет виртуальную машину только после подключения хранилища и изначально предоставляется как NTFS (они действительно форматируют диск, если вам что-то еще нужно) и т. Д.

Эти махинации, хотя и понятны (инфраструктура центра обработки данных определяет доступность пользователей), делают документацию cloud-init просто предложением для изучения пользователем.

По моему опыту, Azure является наиболее близкой к оригинальной реализации. Возможно, они еще не научились использовать свой потенциал в свою пользу.

Мое общее предложение для любой настройки экземпляра (почти всегда работает) - написать сценарий с write_files и выполнить его с bootcmd/runcmd, потому что они выполняются на этапе final и обеспечивают наилучшую возможность переопределения. Отредактируйте hosts, измените правила брандмауэра - большая часть работы не требует перезагрузки.

person Alexander    schedule 27.07.2020