Proxmox cloud init что это
Перейти к содержимому

Proxmox cloud init что это

  • автор:

Как создать cloud-init шаблон ОС Astra Linux в Proxmox

Вы когда-нибудь задумывались над тем, как вы создаете виртуальные машины?
Классический и самый банальный способ создания виртуальной машины (VM):

  1. Создать VM в гипервизоре
  2. Сконфигурировать параметры VM
  3. Примонтировать ISO-образ ОС, которую нужно установить на VM
  4. Запустить VM и установить ОС с ISO-образа
  5. Для упрощения будущей жизни, можно создать из данной VM шаблон (template)

Как правило, это долгий и скучный процесс, богатый ручной работой. Конечно, можно использовать Packer, но время установки это сократит лишь чуть-чуть.
При таком подходе, создание кластера из нескольких одинаковых VM может затянуться на долгое время, только из-за установки хостовой ОС.

Сейчас нас окружает мир облачных технологий, когда вы покупаете VM у одного из клауд-провайдеров, где все происходит быстро:

  1. Ввели имя пользователя, которого необходимо создать при инициализации VM
  2. Пароль или публичный ключ от создаваемого пользователя
  3. Нажали на кнопку «Создать»
  4. Вуаля! VM готова к работе! Без какой-либо установки и ручной конфигурации пользователя!

Вот для этого и были придуманы cloud-init образы. Сloud-init это программа для инициализации виртуальных машин, обычно применяющаяся в облачных платформах. Но использовать cloud-init можно и локально, например в Proxmox, который успешно поддерживает данную технологию.
Все что нам надо — cloud-init образ нужной ОС. Данная статья применима для любого cloud-init образа. Я покажу, как это делать на примере Astra Linux 1.7

План работы

  1. Качаем cloud образ Astra Linux 1.7 (можно создать самому, с использованием cloud-init, но это тема другой статьи)
  2. Создаем VM в Proxmox используя скачанный образ
  3. Конвертируем собранную VM в шаблон (template)
  4. Клонируем из шаблона полноценную VM
  5. Инициализируем 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 на данный шаблон и создавать кластеры из большого количества виртуальных машин за считанные минуты!

Надеюсь, что данная статья будет кому-то полезна, для упрощения и экономии времени на создание стендов, кластеров и т.д.

Cloud-Init Support

Cloud-Init is the de facto multi-distribution package that handles early initialization of a virtual machine instance. Using Cloud-Init, configuration of network devices and ssh keys on the hypervisor side is possible. When the VM starts for the first time, the Cloud-Init software inside the VM will apply those settings.

Many Linux distributions provide ready-to-use Cloud-Init images, mostly designed for OpenStack. These images will also work with Proxmox VE. While it may seem convenient to get such ready-to-use images, we usually recommended to prepare the images by yourself. The advantage is that you will know exactly what you have installed, and this helps you later to easily customize the image for your needs.

Once you have created such a Cloud-Init image we recommend to convert it into a VM template. From a VM template you can quickly create linked clones, so this is a fast method to roll out new VM instances. You just need to configure the network (and maybe the ssh keys) before you start the new VM.

We recommend using SSH key-based authentication to login to the VMs provisioned by Cloud-Init. It is also possible to set a password, but this is not as safe as using SSH key-based authentication because Proxmox VE needs to store an encrypted version of that password inside the Cloud-Init data.

Proxmox VE generates an ISO image to pass the Cloud-Init data to the VM. For that purpose, all Cloud-Init VMs need to have an assigned CD-ROM drive. Usually, a serial console should be added and used as a display. Many Cloud-Init images rely on this, it is a requirement for OpenStack. However, other images might have problems with this configuration. Switch back to the default display configuration if using a serial console doesn’t work.

Preparing Cloud-Init Templates

The first step is to prepare your VM. Basically you can use any VM. Simply install the Cloud-Init packages inside the VM that you want to prepare. On Debian/Ubuntu based systems this is as simple as:

apt-get install cloud-init
This command is not intended to be executed on the Proxmox VE host, but only inside the VM.

Already many distributions provide ready-to-use Cloud-Init images (provided as .qcow2 files), so alternatively you can simply download and import such images. For the following example, we will use the cloud image provided by Ubuntu at https://cloud-images.ubuntu.com.

# download the image wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img # create a new VM with VirtIO SCSI controller qm create 9000 --memory 2048 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci # import the downloaded disk to the local-lvm storage, attaching it as a SCSI drive qm set 9000 --scsi0 local-lvm:0,import-from=/path/to/bionic-server-cloudimg-amd64.img
Ubuntu Cloud-Init images require the virtio-scsi-pci controller type for SCSI drives.

screenshot/gui-cloudinit-hardware.png

Add Cloud-Init CD-ROM drive

The next step is to configure a CD-ROM drive, which will be used to pass the Cloud-Init data to the VM.

qm set 9000 --ide2 local-lvm:cloudinit

To be able to boot directly from the Cloud-Init image, set the boot parameter to order=scsi0 to restrict BIOS to boot from this disk only. This will speed up booting, because VM BIOS skips the testing for a bootable CD-ROM.

qm set 9000 --boot order=scsi0

For many Cloud-Init images, it is required to configure a serial console and use it as a display. If the configuration doesn’t work for a given image however, switch back to the default display instead.

qm set 9000 --serial0 socket --vga serial0

In a last step, it is helpful to convert the VM into a template. From this template you can then quickly create linked clones. The deployment from VM templates is much faster than creating a full clone (copy).

qm template 9000

Deploying Cloud-Init Templates

screenshot/gui-cloudinit-config.png

You can easily deploy such a template by cloning:

qm clone 9000 123 --name ubuntu2

Then configure the SSH public key used for authentication, and configure the IP setup:

qm set 123 --sshkey ~/.ssh/id_rsa.pub qm set 123 --ipconfig0 ip=10.0.10.123/24,gw=10.0.10.1

You can also configure all the Cloud-Init options using a single command only. We have simply split the above example to separate the commands for reducing the line length. Also make sure to adopt the IP setup for your specific environment.

Custom Cloud-Init Configuration

The Cloud-Init integration also allows custom config files to be used instead of the automatically generated configs. This is done via the cicustom option on the command line:

qm set 9000 --cicustom "user=,network=,meta="

The custom config files have to be on a storage that supports snippets and have to be available on all nodes the VM is going to be migrated to. Otherwise the VM won’t be able to start. For example:

qm set 9000 --cicustom "user=local:snippets/userconfig.yaml"

There are three kinds of configs for Cloud-Init. The first one is the user config as seen in the example above. The second is the network config and the third the meta config. They can all be specified together or mixed and matched however needed. The automatically generated config will be used for any that don’t have a custom config file specified.

The generated config can be dumped to serve as a base for custom configs:

qm cloudinit dump 9000 user

The same command exists for network and meta .

Cloud-Init specific Options

cicustom : [meta=] [,network=] [,user=] [,vendor=]

Specify custom files to replace the automatically generated ones at start.

Specify a custom file containing all meta data passed to the VM via» .» cloud-init. This is provider specific meaning configdrive2 and nocloud differ.

To pass a custom file containing all network data to the VM via cloud-init.

To pass a custom file containing all user data to the VM via cloud-init.

To pass a custom file containing all vendor data to the VM via cloud-init.

cipassword :

Password to assign the user. Using this is generally not recommended. Use ssh keys instead. Also note that older cloud-init versions do not support hashed passwords.

Specifies the cloud-init configuration format. The default depends on the configured operating system type ( ostype . We use the nocloud format for Linux, and configdrive2 for windows.

do an automatic package upgrade after the first boot.

User name to change ssh keys and password for instead of the image’s configured default user.

Specify IP addresses and gateways for the corresponding interface.

IP addresses use CIDR notation, gateways are optional but need an IP of the same type specified.

The special string dhcp can be used for IP addresses to use DHCP, in which case no explicit gateway should be provided. For IPv6 the special string auto can be used to use stateless autoconfiguration. This requires cloud-init 19.4 or newer.

If cloud-init is enabled and neither an IPv4 nor an IPv6 address is specified, it defaults to using dhcp on IPv4.

Default gateway for IPv4 traffic.

Requires option(s): ip

Default gateway for IPv6 traffic.

Requires option(s): ip6

ip = (default = dhcp )

IPv4 address in CIDR format.

IPv6 address in CIDR format.

nameserver :

Sets DNS server IP address for a container. Create will automatically use the setting from the host if neither searchdomain nor nameserver are set.

Sets DNS search domains for a container. Create will automatically use the setting from the host if neither searchdomain nor nameserver are set.

Setup public SSH keys (one key per line, OpenSSH format).

See Also

Администрирование и не только

Не вполне стандартные задачи, с которыми мне приходится сталкиваться по работе и способы их решения.

Страницы

среда, 24 марта 2021 г.

Руководство администратора Proxmox VE R 6.0 Глава 10.8

  • Импорт ВМ и образов дисков
  • Оглавление
  • Проброс PCI(e)

Виртуальные машины Qemu/KVM

  1. Эмулированные устройства и паравиртуализированные устройства
  2. Параметры Виртуальных Машин
  3. Миграция
  4. Копии и клоны
  5. Шаблоны виртуальных машин
  6. Generation ID виртуальной машины
  7. Импорт ВМ и образов дисков
  8. Поддержка Cloud-Init
  9. Проброс PCI(e)
  10. Hookscripts
  11. Гибернация
  12. Управление VM с помощью qm
  13. Конфигурация
  14. Блокировки

Поддержка Cloud-Init

Cloud-Init (облачная инициализация) - это де-факто мульти-дистрибутивный пакет, который обрабатывает раннюю инициализацию экземпляра виртуальной машины. С помощью Cloud-Init возможна настройка сетевых устройств и ключей ssh на стороне гипервизора. Когда виртуальная машина запускается в первый раз, программное обеспечение Cloud-Init внутри виртуальной машины применяет эти настройки.

Многие дистрибутивы Linux предоставляют готовые к использованию образы Cloud-Init, в основном предназначенные для OpenStack. Эти образы также будут работать с Proxmox VE. Несмотря на то, что получение таких готовых образов может показаться удобным, мы как правило рекомендуем подготавливать образы самостоятельно. Преимущество в том, что вы будете точно знать, что вы установили, и это поможет вам позже легко настроить образ в соответствии с вашими требованиями.

После создания такого образа Cloud-Init мы рекомендуем преобразовать его в шаблон виртуальной машины. С шаблоном ВМ, вы можете быстро создавать связанные клоны, так что это быстрый метод развертывания новых экземпляров виртуальных машин. Вам только необходимо настроить сеть (и, возможно, ключи ssh) перед запуском новой виртуальной машины.

Мы рекомендуем использовать аутентификацию на основе ключей SSH для входа на виртуальные машины, предоставленные Cloud-Init. Также возможно установить пароль, но это не так безопасно, как использование аутентификации на основе ключа SSH, потому что Proxmox VE приходится хранить зашифрованную версию этого пароля в данных Cloud-Init.

Подготовка шаблонов Cloud-Init

Первый шаг - подготовить вашу виртуальную машину. В основном вы можете использовать любую виртуальную машину. Просто установите пакеты Cloud-Init внутри виртуальной машины, которую вы хотите подготовить. В системах на основе Debian/Ubuntu это очень просто:

apt-get install cloud-init

Многие дистрибутивы предоставляют уже готовые к использованию образы Cloud-Init (предоставляемые в виде файлов .qcow2 ), поэтому в качестве альтернативы, вы можете просто загрузить и импортировать такие образы. В следующем примере мы будем использовать Cloud-Init образ предоставленый Ubuntu по адресу https://cloud-images.ubuntu.com

# Загрузить образ wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img # Создать новую VM qm create 9000 --memory 2048 --net0 virtio,bridge=vmbr0 # Импортировать загруженный диск в хранилище local-lvm qm importdisk 9000 bionic-server-cloudimg-amd64.img local-lvm # И наконец подключить новый диск к виртуальной машине как scsi-диск qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-1

Примечание Образы Ubuntu Cloud-Init требуют типа контроллера virtio-scsi-pci для дисков SCSI. Добавление Cloud-Init CDROM

Следующим шагом является настройка привода CDROM, который будет использоваться для передачи данных Cloud-Init в ВМ.

qm set 9000 --ide2 local-lvm:cloudinit

Чтобы иметь возможность загружаться непосредственно из образа Cloud-Init, установите для параметра bootdisk значение scsi0 и ограничьте BIOS для загрузки только с диска. Это ускорит загрузку, поскольку BIOS виртуальной машины пропускает тестирование загрузочного CDROM.

qm set 9000 --boot c --bootdisk scsi0

Также настройте последовательную консоль и используйте ее как дисплей. Многие образы Cloud-Init полагаются на это, поскольку это требование для образов OpenStack.

qm set 9000 --serial0 socket --vga serial0

На последнем этапе полезно преобразовать виртуальную машину в шаблон. Из этого шаблона вы можете быстро создавать связанные клоны. Развертывание из шаблонов ВМ происходит намного быстрее, чем создание полного клона (копии).

qm template 9000
Развертывание шаблонов Cloud-Init

Вы можете легко развернуть такой шаблон путем клонирования:

qm clone 9000 123 --name ubuntu2

Затем настройте открытый ключ SSH, используемый для аутентификации, и настройте IP-адрес:

qm set 123 --sshkey ~/.ssh/id_rsa.pub qm set 123 --ipconfig0 ip=10.0.10.123/24,gw=10.0.10.1
Пользовательская конфигурация Cloud-Init

При интеграции Cloud-Init также можно использовать пользовательские файлы конфигурации вместо автоматически сгенерированных. Это делается с помощью опции cicustom в командной строке:

qm set 9000 --cicustom "user = , network = , meta = "

Пользовательские файлы конфигурации должны находиться в хранилище, поддерживающем фрагменты (snipets), и должны быть доступны на всех узлах для возможности миграции ВМ. В противном случае виртуальная машина не запустится. Например:

qm set 9000 --cicustom "user = local: snippets / userconfig.yaml"

Для Cloud-Init существует три вида конфигураций. Первый - это конфигурация пользователя, как показано в примере выше. Второй - это сетевая конфигурация, а третий - мета- конфигурация. Все они могут быть указаны вместе или их сочетание подбирается по мере необходимости. Автоматически сгенерированная конфигурация будет использоваться для всех, у которых не указан пользовательский файл конфигурации.
Сгенерированный конфиг-файл можно выгрузить, чтобы он служил базой для пользовательских конфиг-файлов:

qm cloudinit dump 9000 user
Специальные параметры Cloud-Init
  • Импорт ВМ и образов дисков
  • Оглавление
  • Проброс PCI(e)

cloud-init

cloud-init это программа для инициализации виртуальных машин, обычно применяющаяся в облачных платформах. Но использовать cloud-init можно и локально. Примеры конфигурационных файлов - https://cloudinit.readthedocs.io/en/latest/topics/examples.html.

Использование с qemu

Для начала создадим каталог, в котором будем работать, и зайдем в него.

$ mkdir cloud-init-example $ cd cloud-init-example

Затем потребуется образ виртуальной машины с поддержкой cloud-init. Например, можно взять cloud образ ALT.

Данные для cloud-init описываются в конфигурационном файле в формате yaml. Пример минимальной конфигурации, задающей только ключ для пользователя root. Вместо нужно подставить ваш публичный ключ.

$ cat user-data.yaml #cloud-config users: - name: root ssh_authorized_keys: -

Для преобразования конфигурационного файла в метаданные потребуется программа cloud-localds из пакета cloud-utils.

# apt-get install cloud-utils $ cloud-localds my-seed.img user-data.yaml

Для использования kvm пользователь должен быть в группе vmusers .

Осталось только запустить виртуальную машину.

$ qemu -machine accel=kvm -m 2G -cpu host -smp 2 -drive file=alt-sisyphus-cloud-x86_64.qcow2,if=virtio -drive file=my-seed.img,if=virtio,format=raw,force-share=on,read-only=on -daemonize -display none -nic user,hostfwd=tcp::22222-:22

И зайти по ssh. Может потребоваться подождать некоторое время, пока машина будет загружена и инициализирована.

$ ssh root@localhost -p 22222

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *