Что такое cloud-init образы и зачем они нужны
Вы когда-нибудь задумывались над тем, как вы создаете виртуальные машины?
Классический и самый банальный способ создания виртуальной машины (VM):
Создать VM в гипервизоре
Сконфигурировать параметры VM
Примонтировать ISO-образ ОС, которую нужно установить на VM
Запустить VM и установить ОС с ISO-образа
Для упрощения будущей жизни, можно создать из данной VM шаблон (template)
Как правило, это долгий и скучный процесс, богатый ручной работой. Конечно, можно использовать Packer, но время установки это сократит лишь чуть-чуть.
При таком подходе, создание кластера из нескольких одинаковых VM может затянуться на долгое время, только из-за установки хостовой ОС.
Сейчас нас окружает мир облачных технологий, когда вы покупаете VM у одного из клауд-провайдеров, где все происходит быстро:
Ввели имя пользователя, которого необходимо создать при инициализации VM
Пароль или публичный ключ от создаваемого пользователя
Нажали на кнопку "Создать"
Вуаля! VM готова к работе! Без какой-либо установки и ручной конфигурации пользователя!
Вот для этого и были придуманы cloud-init образы. Сloud-init это программа для инициализации виртуальных машин, обычно применяющаяся в облачных платформах. Но использовать cloud-init можно и локально, например в Proxmox, который успешно поддерживает данную технологию.
Все что нам надо - cloud-init образ нужной ОС. Данная статья применима для любого cloud-init образа. Я покажу, как это делать на примере Astra Linux 1.7
План работы
Качаем cloud образ Astra Linux 1.7 (можно создать самому, с использованием cloud-init, но это тема другой статьи)
Создаем VM в Proxmox используя скачанный образ
Конвертируем собранную VM в шаблон (template)
Клонируем из шаблона полноценную VM
Инициализируем VM через cloud-init
Качаем cloud образ Astra Linux 1.7
Интересующие нас образы я брал отсюда.
Заходим по ssh на наш Proxmox и качаем нужный нам образ, в моем случае - alse-vanilla-1.7.3-cloud-max-mg8.2.1.qcow2
wget alse-vanilla-1.7.3-cloud-max-mg8.2.1.qcow2
Создаем VM в Proxmox используя скачанный образ
qm create 700 --name "alse-vanilla-1-7-3-cloudinit-max-template" --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0
qm importdisk 700 alse-vanilla-1.7.3-cloud-max-mg8.2.1.qcow2 local-lvm
qm set 700 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-700-disk-0
qm set 700 --boot c --bootdisk scsi0
qm set 700 --ide2 local-lvm:cloudinit
qm set 700 --serial0 socket --vga serial0
qm set 700 --agent enabled=1
Знакомых с синтаксисом управления Proxmox данные строчки удивить не должны.
Для начинающих поясню. В примере создается виртуальная машина с VMID=700 (можно указать любой, это просто идентификатор вашей VM), 2Gb RAM, 2 ядрами CPU, соответствующим сетевым интерфейсом.
Затем мы импортируем скачанный нами cloud образ Астры в локальное хранилище Proxmox и подключаем как диск к созданной VM. После этого подключаем cloud-init хранилище, для последующей инициализации.
Вы можете использовать любые нужные вам настройки или настраивать все в GUI. Все что надо - подключить диск со скачанным образом и cloud-init хранилище.
Конвертируем собранную VM в шаблон (template)
После всех подготовительных мероприятий создаем шаблон нашей ОС.
qm template 700
Шаблон готов!
Клонируем из шаблона полноценную VM
Шаблоны нужны нам для клонирования VM, поэтому нажимаем ПКМ на созданном темплейте и выставляем мод "Full Clone".
Назвал я свою VM astra-test
, вы можете как угодно обозвать.
Нажимаем "Clone" и дожидаемся окончания клонирования.
Инициализируем VM через cloud-init
После завершения клонирования VM, можно поправить настройки "железа" и увеличить размер диска.
Расширяем диск
Для этого в разделе Hardware
нажимаем на Hard Disk -> Disk Action -> Resize.
Указываем нужный вам размер диска и нажимаем "Resize disk". Самое главное, что система сама займет и разметит нужное пространство при загрузке.
Теперь самое главное - переходим в раздел Cloud-init
Настраиваем cloud-init
В соответствующих полях задаем нужные нам параметры, которые мы хотим создать в системе во время запуска:
логин пользователя
пароль пользователя
настройки DNS
открытый SSH ключ пользователя
настройка сети (можно оставить DHCP, но я укажу IP-вручную)
Далее жмем "Regenerate Image".
Подготовительные мероприятия завершены, можно запускать VM для проверки!
Запускаем и проверяем VM
После запуска VM astra-test в статистике мы видим 2 IP-адреса: один получен от моего DHCP-сервера, второй мы задали сами.
Такое бывает, можно отключить DHCP уже в самой ОС.
Пробуем подключиться по SSH к нашей VM, используя адрес и креды, которые мы указывали при настройке cloud-init в Proxmox
ssh user@192.168.20.30
Готово, даже hostname настроился сам, по имени виртуальной машины в Proxmox. И да, если переименовать VM, hostname изменится за вас сам.
Теперь можно натравливать свой Terraform с Ansible на данный шаблон и создавать кластеры из большого количества виртуальных машин за считанные минуты!
Надеюсь, что данная статья будет кому-то полезна, для упрощения и экономии времени на создание стендов, кластеров и т.д.
Комментарии (7)
osipov_dv
20.12.2022 08:55+3очень жаль что весь рецепт сводится к "возьмите уже готовый образ". По сути это мануал как загрузить образ в proxmox, а мог быть про то как создавать свой образ с cloud-init.
toxella Автор
20.12.2022 19:17Все верно, суть данной статьи в этом и была :)
Экономьте время - возьмите готовый образ и вперед готовить стенд!
Для подготовки образа самостоятельно, можно сделать отдельную статью
AstraLinux_Group
20.12.2022 18:20+1Добрый день! Спасибо за статью. Очень доступно получилось, даже у нас вряд ли вышло бы нагляднее)
connected201
А теперь тоже самое для Windows можно сделать?
toxella Автор
Для винды, насколько мне известно, другой способ есть. Ну или Packer использовать