readme mod
parent
2af0945509
commit
94b47cd137
184
readme.md
184
readme.md
|
@ -1,27 +1,28 @@
|
|||
# Автоматизация процесса создания ВМ в Proxmox с использованием Ansible
|
||||
## Содержание
|
||||
- [Требования](#требования)
|
||||
- [Создание шаблона](#создание-шаблона)
|
||||
- [Создание ВМ с помощью Ansible](#создание-вм-с-помощью-ansible)
|
||||
- [Необходимые файлы](#необходимые-файлы)
|
||||
- [Описание переменных](#описание-переменных)
|
||||
- [Задачи плейбука](#задачи-плейбука)
|
||||
- [Подключение к ВМ](#подключение-к-вм)
|
||||
|
||||
## Содержание
|
||||
|
||||
- [Требования](#требования)
|
||||
- [Создание шаблона](#создание-шаблона)
|
||||
- [Создание ВМ с помощью Ansible](#создание-вм-с-помощью-ansible)
|
||||
- [Необходимые файлы](#необходимые-файлы)
|
||||
- [Описание переменных](#описание-переменных)
|
||||
- [Задачи плейбука](#задачи-плейбука)
|
||||
- [Подключение к ВМ](#подключение-к-вм)
|
||||
|
||||
## Требования
|
||||
Для работы Ansible с гипервизором Proxmox, написан соответствующий модуль [proxmox_kvm](https://docs.ansible.com/ansible/latest/collections/community/general/proxmox_kvm_module.html).
|
||||
В свою очередь, для работы модуля `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
|
||||
```
|
||||
Для работы Ansible с гипервизором Proxmox, написан соответствующий модуль [proxmox_kvm](https://docs.ansible.com/ansible/latest/collections/community/general/proxmox_kvm_module.html).
|
||||
В свою очередь, для работы модуля `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
|
||||
|
||||
[⬆ Наверх](#содержание)
|
||||
|
||||
|
@ -32,33 +33,31 @@ pip install proxmoxer
|
|||
|
||||
Скрипт `create_template.sh` необходимо скопировать на хост Proxmox, добавить права на исполнение.
|
||||
|
||||
Стоит обратить внимание на объявленные в скрипте переменные:
|
||||
*скачиваемый образ и его URL*
|
||||
```
|
||||
cloudimg=focal-server-cloudimg-amd64.img # имя скачиваемого образа
|
||||
img_url=https://cloud-images.ubuntu.com/focal/current # адрес, по которому доступен образ
|
||||
```
|
||||
Стоит обратить внимание на объявленные в скрипте переменные:
|
||||
_скачиваемый образ и его URL_
|
||||
|
||||
*параметры создаваемого шаблона*
|
||||
```
|
||||
vm_id=200 # идентификатор создаваемого шаблона
|
||||
vm_name="ubuntu-2004-cloudinit-template" # имя создаваемого шаблона
|
||||
vm_memory=2048 # объем оперативной памяти выделяемый шаблону
|
||||
vm_cores=2 # количество ядер процессора доступных шаблону
|
||||
vm_user="da2001" # имя пользвателя, который будет создан в шаблоне
|
||||
```
|
||||
cloudimg=focal-server-cloudimg-amd64.img # имя скачиваемого образа
|
||||
img_url=https://cloud-images.ubuntu.com/focal/current # адрес, по которому доступен образ
|
||||
|
||||
*переменные, относящиеся к гипервизору Proxmox*
|
||||
```
|
||||
px_storage=local-lvm # хранилище, в котором будет размещен диск шаблона
|
||||
px_bridge=vmbr1 # имя сетевого интерфейса к которому будет подключен шаблон
|
||||
```
|
||||
_параметры создаваемого шаблона_
|
||||
|
||||
**необходимо изменить значения переменных на свои**
|
||||
vm_id=200 # идентификатор создаваемого шаблона
|
||||
vm_name="ubuntu-2004-cloudinit-template" # имя создаваемого шаблона
|
||||
vm_memory=2048 # объем оперативной памяти выделяемый шаблону
|
||||
vm_cores=2 # количество ядер процессора доступных шаблону
|
||||
vm_user="da2001" # имя пользвателя, который будет создан в шаблоне
|
||||
|
||||
Скрипт необходимо запустить от имени пользователя, который может создавать и редактировать ВМ (по-умолчанию это `root`). При запуске нужно придумать и указать в качестве аргумента пароль, который будет добавлен для авторизации пользователя, указанного в переменной `vm_user`
|
||||
_переменные, относящиеся к гипервизору Proxmox_
|
||||
|
||||
px_storage=local-lvm # хранилище, в котором будет размещен диск шаблона
|
||||
px_bridge=vmbr1 # имя сетевого интерфейса к которому будет подключен шаблон
|
||||
|
||||
**необходимо изменить значения переменных на свои**
|
||||
|
||||
Скрипт необходимо запустить от имени пользователя, который может создавать и редактировать ВМ (по-умолчанию это `root`). При запуске нужно придумать и указать в качестве аргумента пароль, который будет добавлен для авторизации пользователя, указанного в переменной `vm_user`
|
||||
|
||||
Пример запуска скрипта
|
||||
|
||||
```bash
|
||||
root@pve:~# ./create_template.sh verySecPassword
|
||||
```
|
||||
|
@ -70,81 +69,86 @@ root@pve:~# ./create_template.sh verySecPassword
|
|||
## Создание ВМ с помощью Ansible
|
||||
|
||||
### Необходимые файлы
|
||||
|
||||
Для корректной работы плейбука необходимы следующие файлы:
|
||||
- `ansible.cfg` - файл общих настроек ansible
|
||||
- `create_vm.yaml` - файл плейбука
|
||||
- `hosts.ini` - файл инвентаря, в котором указан, единственный в данном примере хост Proxmox
|
||||
- `vars.yaml` - используемые переменные
|
||||
- `vms.yaml` - переменные с описанием создаваемых ВМ
|
||||
|
||||
- `ansible.cfg` - файл общих настроек ansible
|
||||
- `create_vm.yaml` - файл плейбука
|
||||
- `hosts.ini` - файл инвентаря, в котором указан, единственный в данном примере хост Proxmox
|
||||
- `vars.yaml` - используемые переменные
|
||||
- `vms.yaml` - переменные с описанием создаваемых ВМ
|
||||
|
||||
[⬆ Наверх](#содержание)
|
||||
|
||||
### Описание переменных
|
||||
Используемые в плейбуке переменные разделены на два файла: `vars.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 ключа, который будет скопирован в ВМ для дальнейшего доступа к ним
|
||||
```
|
||||
|
||||
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
|
||||
```
|
||||
|
||||
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*
|
||||
В задаче создаются виртуальные машины на основе шаблона
|
||||
конструкция
|
||||
|
||||
- Клонирование ВМ из шаблона
|
||||
_за основу были взяты примеры из документации <https://docs.ansible.com/ansible/latest/collections/community/general/proxmox_kvm_module.html#examples>_
|
||||
В задаче создаются виртуальные машины на основе шаблона
|
||||
конструкция
|
||||
|
||||
```yaml
|
||||
loop: "{{ lookup('dict', vms) }}"
|
||||
```
|
||||
|
||||
позволяет перебрать все необходимые ключи и значения из словаря `vms`
|
||||
|
||||
- Настройка IP адресов
|
||||
В этой задаче назначается IP адрес для каждой созданной ВМ и IP адрес шлюза по-умолчанию
|
||||
- Настройка IP адресов
|
||||
В этой задаче назначается IP адрес для каждой созданной ВМ и IP адрес шлюза по-умолчанию
|
||||
|
||||
- Настройка DNS
|
||||
Как видно из названия, в ВМ указывается IP адрес DNS сервера
|
||||
- Настройка DNS
|
||||
Как видно из названия, в ВМ указывается IP адрес DNS сервера
|
||||
|
||||
- Копирование SSH ключей в ВМ
|
||||
Для беспарольного доступа в ВМ будет скопирован указанный SSH ключ хоста, на котором выполняется плейбук
|
||||
- Копирование SSH ключей в ВМ
|
||||
Для беспарольного доступа в ВМ будет скопирован указанный SSH ключ хоста, на котором выполняется плейбук
|
||||
|
||||
- Обновление параметров ВМ
|
||||
При клонировании из шаблона, ВМ создаются с теми же параметрами, что и сам шаблон. Выполнение этой задачи позволяет изменить параметры ВМ, например размер оперативной памяти, количество доступных процессоров и т.д.
|
||||
- Обновление параметров ВМ
|
||||
При клонировании из шаблона, ВМ создаются с теми же параметрами, что и сам шаблон. Выполнение этой задачи позволяет изменить параметры ВМ, например размер оперативной памяти, количество доступных процессоров и т.д.
|
||||
|
||||
- Запуск ВМ
|
||||
Финальным этапом будет запуск созданных ВМ
|
||||
- Запуск ВМ
|
||||
Финальным этапом будет запуск созданных ВМ
|
||||
|
||||
## Подключение к ВМ
|
||||
|
||||
Для доступа к ВМ по SSH необходимо использовать имя пользователя, которое определено в переменной `vm_user` в скрипте `create_template.sh`. При подключении с хоста, на котором запускался плейбук пароль вводить не нужно, т.к. в ВМ скопирован SSH ключ. При подключении из других систем, необходимо указать пароль, который был задан в виде аргумента при запуске скрипта `create_template.sh`.
|
||||
|
||||
[⬆ Наверх](#содержание)
|
||||
|
|
Loading…
Reference in New Issue