CODECAVE
Время чтения: 3 мин.

Шаблоны виртуальных машин Proxmox и Cloud-Init

Шаблоны виртуальных машин Proxmox и Cloud-Init

В мире виртуализации главное — эффективность и автоматизация. Здесь на сцену выходит Proxmox Virtual Environment (VE) — надёжное решение, которое упрощает управление виртуальными машинами (ВМ). Одна из самых интересных возможностей Proxmox — шаблоны виртуальных машин в связке с Cloud-Init: они упрощают развёртывание и делают его таким же гладким, как в облаке. Давайте разберёмся.

Что такое Proxmox?

Proxmox — бесплатная платформа виртуализации с открытым исходным кодом: любой может использовать или изменять её, ничего не платя. Это своего рода набор инструментов, который позволяет создать на одной физической машине несколько изолированных компьютеров — виртуальных машин. На этих виртуальных машинах одновременно могут работать разные операционные системы, например Windows или Linux, поэтому они подходят и для тестирования, и для разработки, и даже для продакшен-сред.

Proxmox управляет этими виртуальными средами. Он использует технологию KVM (kernel-based virtual machine — виртуальная машина на основе ядра), благодаря которой каждая виртуальная машина работает стабильно и не мешает остальным. Кроме того, Proxmox умеет работать с так называемыми контейнерами через LXC (Linux Containers): они ещё легче, чем ВМ, и отлично подходят для запуска отдельных приложений с минимальными накладными расходами.

Управлять ВМ и контейнерами можно и из браузера. Веб-интерфейс продуман так, чтобы им было удобно пользоваться, поэтому даже новички в виртуализации смогут начать работу без особых трудностей.

Что такое шаблоны ВМ в Proxmox?

Шаблоны ВМ в Proxmox — это, по сути, заранее настроенные ВМ, которые служат образцами для создания новых экземпляров. В них входят операционная система, установленное ПО и системные настройки. Прелесть шаблонов в том, что они экономят время и обеспечивают единообразие всех развёртываний. Новые ВМ можно быстро поднимать, не проходя каждый раз весь процесс установки и настройки.

Роль Cloud-Init

Cloud-Init — универсальный пакет, который поддерживает разные дистрибутивы и выполняет первоначальную настройку экземпляра ВМ, например конфигурацию сети и распространение SSH-ключей. При первой загрузке ВМ Cloud-Init применяет заранее заданные настройки, так что подготовка ВМ проходит без ручного вмешательства https://pve.proxmox.com/wiki/Cloud-Init_Support.

Как совместить шаблоны Proxmox с Cloud-Init

Интеграция Cloud-Init с шаблонами ВМ в Proxmox объединяет лучшее из двух миров. Вот как извлечь из этой связки максимум:

Шаг 1. Подготовка шаблона

Начните с подготовки ВМ с нужной конфигурацией. Установите операционную систему и все необходимые пакеты, включая Cloud-Init. Когда ВМ будет готова, преобразуйте её в шаблон — он станет основой для будущих ВМ.

Ниже — скрипт, которым мы создаём шаблон:

#! /bin/bash

# Install Cloud-Init enabled Ubuntu VM in Proxmox

# Download Ubuntu Cloud Image (Ubuntu 22.04 cloudimg)
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img

# Install qemu-guest-agent on Ubuntu Cloud Image
# The libguestfs-tools package must be installed on the system where the ubuntu cloudimg will be modified.
apt-get update
apt-get install libguestfs-tools

# This step will install qemu-guest-agent on the Ubuntu cloud image via virt-customize.
virt-customize -a jammy-server-cloudimg-amd64.img --install qemu-guest-agent

# Install git
virt-customize -a jammy-server-cloudimg-amd64.img --install git

# Set environment variables. Change these as necessary.
export STORAGE_POOL="DATA"
export VM_ID="1000"
export VM_NAME="jammy-template"

# Create Proxmox VM image from Ubuntu Cloud Image.
qm create $VM_ID --name $VM_NAME --memory 2048 --net0 virtio,bridge=vmbr2 --scsihw virtio-scsi-pci
qm set $VM_ID --scsi0 $STORAGE_POOL:0,import-from=/root/jammy-server-cloudimg-amd64.img

# Create Cloud-Init Disk and configure boot.
qm set $VM_ID --ide2 $STORAGE_POOL:cloudinit
qm set $VM_ID --boot order=scsi0
qm set $VM_ID --serial0 socket --vga serial0
# qm resize $VM_ID scsi0 +20G

# Convert VM to Template
qm template $VM_ID

# Clean Up
rm jammy-server-cloudimg-amd64.img

Шаг 2. Развёртывание ВМ из шаблона

Когда шаблон готов, можно быстро создавать связанные клоны. Они легковесны и используют общий с шаблоном базовый образ, а значит, развёртываются очень быстро. Перед запуском новой ВМ настройте сеть и SSH-ключи через интерфейс Proxmox.

Шаг 3. Настройка с помощью Cloud-Init

Когда вы запускаете ВМ из шаблона, в дело вступает Cloud-Init. Он считывает конфигурационные данные из ISO-образа, подключённого к ВМ как CD-ROM. В эти данные входят сетевые настройки, учётные записи пользователей и SSH-ключи. Proxmox генерирует этот ISO-образ автоматически, а Cloud-Init применяет настройки при первой загрузке.

Шаги 2 и 3 мы выполняем через Terraform. Это заметно ускоряет процесс, когда нужно изменить какие-то параметры шаблона и одновременно создать несколько одинаковых машин.

Лучшие практики

  • Аутентификация по SSH-ключам: из соображений безопасности для аутентификации рекомендуется использовать SSH-ключи, а не пароли. Proxmox может хранить зашифрованные пароли, но ключи — более безопасная альтернатива.
  • Последовательная консоль: многие образы Cloud-Init рассчитаны на последовательную консоль — это требование OpenStack. Убедитесь, что в шаблоне в качестве дисплея настроена последовательная консоль.
  • Собственная конфигурация: многие дистрибутивы предлагают готовые образы Cloud-Init, но, создав собственный образ, вы точно знаете, что в нём установлено, и позже его проще донастроить.

Заключение

Шаблоны ВМ в Proxmox в сочетании с Cloud-Init — мощный, эффективный и автоматизированный способ управлять развёртыванием ВМ. Такая связка не только экономит время, но и гарантирует, что каждая ВМ настроена единообразно и по вашим стандартам.

Если хотите узнать больше, советую начать с официальной документации Proxmox и форумов сообщества — там есть подробные руководства и поддержка

Удачной виртуализации!