Proxmox VE Administration Guide
Виртуальные машины Qemu/KVM
-
Эмулированные устройства и паравиртуализированные устройства
-
Параметры Виртуальных Машин
-
Миграция
-
Копии и клоны
-
Шаблоны виртуальных машин
-
Generation ID виртуальной машины
-
Импорт ВМ и образов дисков
-
Поддержка Cloud-Init
- Проброс PCI(e)
-
Hookscripts
-
Гибернация
-
Управление VM с помощью qm
- Конфигурация
- Блокировки
-
Поддержка 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.
Proxmox VE создает образ ISO
для передачи данных Cloud-Init в ВМ. Для этого всем Cloud-Init ВМ должен
быть назначен привод CDROM. Также многие образы 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, используя только
одну команду. Мы просто разделили приведенный выше пример на две команды
для уменьшения длины строки. Также не забудьте изменить настройку IP для
вашего конкретного окружения.
-
Пользовательская конфигурация Cloud-Init
При интеграции Cloud-Init также можно использовать пользовательские
файлы конфигурации вместо автоматически сгенерированных. Это делается с
помощью опции cicustom
в командной строке:
qm set 9000 --cicustom "user = <volume>, network = <volume>, meta = <volume>"
Пользовательские файлы конфигурации должны находиться в хранилище,
поддерживающем фрагменты (snipets), и должны быть доступны на всех узлах
для возможности миграции ВМ. В противном случае виртуальная машина не
запустится. Например:
qm set 9000 --cicustom "user = local: snippets / userconfig.yaml"
Для Cloud-Init существует три вида конфигураций. Первый - это
конфигурация пользователя, как показано в примере выше. Второй - это
сетевая конфигурация, а третий - мета- конфигурация. Все они могут быть
указаны вместе или их сочетание подбирается по мере необходимости.
Автоматически сгенерированная конфигурация будет использоваться для
всех, у которых не указан пользовательский файл конфигурации.
Сгенерированный
конфиг-файл можно выгрузить, чтобы он служил базой для пользовательских
конфиг-файлов:
qm cloudinit dump 9000 user
Та же самая команда существует для network
и
meta
.
-
Специальные параметры Cloud-Init
-
cicustom: [meta=<volume>] [,network=<volume>]
[,user=<volume>]
-
Укажите пользовательские файлы для замены автоматически
сгенерированных при запуске.
- meta=<volume>
-
Укажите конфиг-файл, содержащий все метаданные, передаваемые на
виртуальную машину через cloud-init. Это провайдер конкретных
значений у configdrive2 и nocloud он различный.
- network=<volume>
-
Укажите настраиваемый файл, содержащий все сетевые данные,
передаваемые на виртуальную машину через cloud-init
- user = <volume>
-
Укажите настраиваемый файл, содержащий все пользовательские
данные, передаваемые на виртуальную машину через cloud-init
- cipassword: <string>
-
Пароль для назначения пользователю. Обычно это не рекомендуется.
Вместо этого используйте ssh-ключи. Также обратите внимание, что
более старые версии cloud-init не поддерживают хешированные пароли.
- citype: <configdrive2|nocloud>
-
Задает формат конфигурации cloud-init. Значение по умолчанию зависит
от настроенной операционной системы.type (ostype) . Мы используем
формат nocloud для Linux и configdrive2 для windows.
- ciuser: <string>
-
Имя пользователя, для которого нужно изменить ключи ssh и пароль,
вместо пользователя по умолчанию, настроенного для образа.
-
ipconfig[n]: [gw=<GatewayIPv4>] [,gw6=<GatewayIPv6>]
[,ip=<IPv4Format/CIDR>] [,ip6=<IPv6Format/CIDR>]
-
Укажите IP-адреса и шлюзы для соответствующего интерфейса.
IP-адреса
используют нотацию CIDR, шлюзы не являются обязательными, но для них
необходим IP того же типа.
Специальная строка dhcp может
использоваться для IP-адресов для использования DHCP и в этом случае
если шлюз не указан явно, он должен быть обеспечен DHCP. Для IPv6
специальная строка auto может использоваться для использования
автоконфигурации без сохранения состояния.
Если включен
cloud-init и не указан ни IPv4, ни IPv6-адрес, по умолчанию
используется dhcp на IPv4.
- gw = <GatewayIPv4>
-
Шлюз по умолчанию для IPv4 трафика
- Примечание
- Требуется опция(и): ip
- gw=<GatewayIPv4>
-
Шлюз по умолчанию для IPv6 трафика
- Примечание
- Требуется опция(и): ip6
- ip=<IPv4Format/CIDR> (default = dhcp )
- IPv4 адрес в CIDR формате
- ip=<IPv6Format/CIDR> (default = dhcp )
- IPv6 адрес в CIDR формате
- nameserver: <string>
-
Устанавливает IP-адрес DNS-сервера для контейнера. Будет создан
автоматически используя настройку хоста, если ни searchdomain, ни
nameserver не установлены.
- searchdomain: <string>
-
Устанавливает поисковый домен DNS для контейнера. Будет создан
автоматически используя настройку хоста, если ни searchdomain, ни
nameserver не установлены.
- sshkeys: <string>
-
Настроить общедоступные ключи SSH (по одному на строку, формат
OpenSSH).
Александр, спасибище за продолжение перевода!!!
ОтветитьУдалитьДолго не мог решить как поступать с изменением версии, в итоге решил что начиная со следующего поста будет v6.3, а уже переведенное приведу в соответствие с актуальной версией после завершения всего руководства - изменения есть и значительное количество, но на самом деле не такое уж оно и огромное.
УдалитьБольшое спасибо за ваш труд.
ОтветитьУдалитьСпасибо. Очень важная и ответсвенная работа. Удачи.
ОтветитьУдалить