10 KiB
Автоматизация процесса создания ВМ в Proxmox с использованием Ansible
Содержание
Требования
Для работы Ansible с гипервизором Proxmox, написан соответствующий модуль proxmox_kvm.
В свою очередь, для работы модуля proxmox_kvm
на хосте Proxmox, необходимо установить пакеты requests
и proxmoxer
.
Т.к. Ansible написан на Python, необходимые ему пакеты можно установить с помощью PIP.
Для установки PIP для Python 2 - sudo apt install python-pip
Для установки PIP для Python 3 (предпочтительнее) - sudo apt install python3-pip
Далее установим необходимые пакеты: в зависимости от способа установки Python и PIP, команда для установки пакетов может отличаться. В общем случае, команда выглядит так:
pip install requests
pip install proxmoxer
Создание шаблона
ВМ создаются из существующего шаблона. При этом, необходимо, чтобы шаблон был с поддержкой cloudinit. Здесь возможны 2 варианта, создать такой шаблон самостоятельно или скачать готовый образ. Я подготовил скрипт, который скачивает официальный образ Ubuntu с поддержкой cloudinit и на основании этого образа создаётся шаблон.
Скрипт create_template.sh
необходимо скопировать на хост Proxmox, добавить права на исполнение.
Стоит обратить внимание на объявленные в скрипте переменные: скачиваемый образ и его URL
cloudimg=focal-server-cloudimg-amd64.img # имя скачиваемого образа
img_url=https://cloud-images.ubuntu.com/focal/current # адрес, по которому доступен образ
параметры создаваемого шаблона
vm_id=200 # идентификатор создаваемого шаблона
vm_name="ubuntu-2004-cloudinit-template" # имя создаваемого шаблона
vm_memory=2048 # объем оперативной памяти выделяемый шаблону
vm_cores=2 # количество ядер процессора доступных шаблону
vm_user="da2001" # имя пользвателя, который будет создан в шаблоне
переменные, относящиеся к гипервизору Proxmox
px_storage=local-lvm # хранилище, в котором будет размещен диск шаблона
px_bridge=vmbr1 # имя сетевого интерфейса к которому будет подключен шаблон
необходимо изменить значения переменных на свои
Скрипт необходимо запустить от имени пользователя, который может создавать и редактировать ВМ (по-умолчанию это root
). При запуске нужно придумать и указать в качестве аргумента пароль, который будет добавлен для авторизации пользователя, указанного в переменной vm_user
Пример запуска скрипта
root@pve:~# ./create_template.sh verySecPassword
Результатом работы скрипта будет созданный шаблон, из которого с помощью ansible-playbook будут созданы ВМ
Создание ВМ с помощью Ansible
Необходимые файлы
Для корректной работы плейбука необходимы следующие файлы:
ansible.cfg
- файл общих настроек ansiblecreate_vm.yaml
- файл плейбукаhosts.ini
- файл инвентаря, в котором указан, единственный в данном примере хост Proxmoxvars.yaml
- используемые переменныеvms.yaml
- переменные с описанием создаваемых ВМ
Описание переменных
Используемые в плейбуке переменные разделены на два файла: vars.yaml
, vms.yaml
. Это разделение сделано для удобства, чтобы отделить переменные виртуальных машин.
vars.yaml
pve_storage: local-lvm # название хранилища на котором будут созданы ВМ
api_host: 192.168.13.9 # IP адрес хоста Proxmox
api_user: root@pam # данные для авторизации по API
api_password: securePassword # пароль для авторизации
node: pve # имя ноды Proxmox
clone_vm: ubuntu-2004-cloudinit-template # имя шаблона из которого создаются ВМ
key_name: id_rsa.pub # имя SSH ключа, который будет скопирован в ВМ для дальнейшего доступа к ним
vms.yaml
vms:
us1:
name: us10.da2001.ru # имя создаваемой ВМ
ip: 192.168.10.21/24 # IP адрес ВМ
gw: 192.168.10.9 # IP адрес шлюза по-умолчанию, который будет прописан в ВМ (адрес гипервизора)
dns: 8.8.8.8 # IP адрес DNS сервера
vmid: 201 # идентификатор создаваемой ВМ
cores: 2 # количество доступных процессоров для ВМ, если отличается от указанных в шаблоне
sockets: 1 # количество доступных сокетов для ВМ, если отличается от указанных в шаблоне
memory: 2048 # количество доступной оперативной памяти для ВМ, если отличается от указанного значения в шаблоне
us2:
name: us11.da2001.ru
ip: 192.168.10.22/24
gw: 192.168.10.9
dns: 8.8.8.8
vmid: 202
cores: 2
sockets: 1
memory: 2048
перед запуском плейбука необходимо убедиться, что установлены корректные значения переменных
Задачи плейбука
- Клонирование ВМ из шаблона
за основу были взяты примеры из документации https://docs.ansible.com/ansible/latest/collections/community/general/proxmox_kvm_module.html#examples
В задаче создаются виртуальные машины на основе шаблона
Конструкция
loop: "{{ lookup('dict', vms) }}"
позволяет перебрать все необходимые ключи и значения из словаря vms
-
Настройка IP адресов В этой задаче назначается IP адрес для каждой созданной ВМ и IP адрес шлюза по-умолчанию
-
Настройка DNS Как видно из названия, в ВМ указывается IP адрес DNS сервера
-
Копирование SSH ключей в ВМ Для беспарольного доступа в ВМ будет скопирован указанный SSH ключ хоста, на котором выполняется плейбук
-
Обновление параметров ВМ При клонировании из шаблона, ВМ создаются с теми же параметрами, что и сам шаблон. Выполнение этой задачи позволяет изменить параметры ВМ, например размер оперативной памяти, количество доступных процессоров и т.д.
-
Запуск ВМ Финальным этапом будет запуск созданных ВМ
Подключение к ВМ
Для доступа к ВМ по SSH необходимо использовать имя пользователя, которое определено в переменной vm_user
в скрипте create_template.sh
. При подключении с хоста, на котором запускался плейбук пароль вводить не нужно, т.к. в ВМ скопирован SSH ключ. При подключении из других систем, необходимо указать пароль, который был задан в виде аргумента при запуске скрипта create_template.sh
.