readme mod

master
Долгий Артём 2022-01-08 17:04:08 +03:00
parent 2af0945509
commit 94b47cd137
1 changed files with 94 additions and 90 deletions

View File

@ -1,5 +1,7 @@
# Автоматизация процесса создания ВМ в Proxmox с использованием Ansible # Автоматизация процесса создания ВМ в Proxmox с использованием Ansible
## Содержание ## Содержание
- [Требования](#требования) - [Требования](#требования)
- [Создание шаблона](#создание-шаблона) - [Создание шаблона](#создание-шаблона)
- [Создание ВМ с помощью Ansible](#создание-вм-с-помощью-ansible) - [Создание ВМ с помощью Ansible](#создание-вм-с-помощью-ansible)
@ -8,8 +10,8 @@
- [Задачи плейбука](#задачи-плейбука) - [Задачи плейбука](#задачи-плейбука)
- [Подключение к ВМ](#подключение-к-вм) - [Подключение к ВМ](#подключение-к-вм)
## Требования ## Требования
Для работы Ansible с гипервизором Proxmox, написан соответствующий модуль [proxmox_kvm](https://docs.ansible.com/ansible/latest/collections/community/general/proxmox_kvm_module.html). Для работы Ansible с гипервизором Proxmox, написан соответствующий модуль [proxmox_kvm](https://docs.ansible.com/ansible/latest/collections/community/general/proxmox_kvm_module.html).
В свою очередь, для работы модуля `proxmox_kvm` на хосте Proxmox, необходимо установить пакеты `requests` и `proxmoxer`. В свою очередь, для работы модуля `proxmox_kvm` на хосте Proxmox, необходимо установить пакеты `requests` и `proxmoxer`.
Т.к. Ansible написан на Python, необходимые ему пакеты можно установить с помощью PIP. Т.к. Ansible написан на Python, необходимые ему пакеты можно установить с помощью PIP.
@ -17,11 +19,10 @@
Для установки PIP для Python 3 (предпочтительнее) - `sudo apt install python3-pip` Для установки PIP для Python 3 (предпочтительнее) - `sudo apt install python3-pip`
Далее установим необходимые пакеты: Далее установим необходимые пакеты:
*в зависимости от способа установки Python и PIP, команда для установки пакетов может отличаться. В общем случае, команда выглядит так:* _в зависимости от способа установки Python и PIP, команда для установки пакетов может отличаться. В общем случае, команда выглядит так:_
```
pip install requests pip install requests
pip install proxmoxer pip install proxmoxer
```
[⬆ Наверх](#содержание) [⬆ Наверх](#содержание)
@ -33,32 +34,30 @@ pip install proxmoxer
Скрипт `create_template.sh` необходимо скопировать на хост Proxmox, добавить права на исполнение. Скрипт `create_template.sh` необходимо скопировать на хост Proxmox, добавить права на исполнение.
Стоит обратить внимание на объявленные в скрипте переменные: Стоит обратить внимание на объявленные в скрипте переменные:
*скачиваемый образ и его URL* _скачиваемый образ и его URL_
```
cloudimg=focal-server-cloudimg-amd64.img # имя скачиваемого образа
img_url=https://cloud-images.ubuntu.com/focal/current # адрес, по которому доступен образ
```
*параметры создаваемого шаблона* 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 # хранилище, в котором будет размещен диск шаблона vm_id=200 # идентификатор создаваемого шаблона
px_bridge=vmbr1 # имя сетевого интерфейса к которому будет подключен шаблон 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`). При запуске нужно придумать и указать в качестве аргумента пароль, который будет добавлен для авторизации пользователя, указанного в переменной `vm_user`
Пример запуска скрипта Пример запуска скрипта
```bash ```bash
root@pve:~# ./create_template.sh verySecPassword root@pve:~# ./create_template.sh verySecPassword
``` ```
@ -70,7 +69,9 @@ root@pve:~# ./create_template.sh verySecPassword
## Создание ВМ с помощью Ansible ## Создание ВМ с помощью Ansible
### Необходимые файлы ### Необходимые файлы
Для корректной работы плейбука необходимы следующие файлы: Для корректной работы плейбука необходимы следующие файлы:
- `ansible.cfg` - файл общих настроек ansible - `ansible.cfg` - файл общих настроек ansible
- `create_vm.yaml` - файл плейбука - `create_vm.yaml` - файл плейбука
- `hosts.ini` - файл инвентаря, в котором указан, единственный в данном примере хост Proxmox - `hosts.ini` - файл инвентаря, в котором указан, единственный в данном примере хост Proxmox
@ -80,21 +81,21 @@ root@pve:~# ./create_template.sh verySecPassword
[⬆ Наверх](#содержание) [⬆ Наверх](#содержание)
### Описание переменных ### Описание переменных
Используемые в плейбуке переменные разделены на два файла: `vars.yaml`, `vms.yaml`. Это разделение сделано для удобства, чтобы отделить переменные виртуальных машин. Используемые в плейбуке переменные разделены на два файла: `vars.yaml`, `vms.yaml`. Это разделение сделано для удобства, чтобы отделить переменные виртуальных машин.
`vars.yaml` `vars.yaml`
```
pve_storage: local-lvm # название хранилища на котором будут созданы ВМ pve_storage: local-lvm # название хранилища на котором будут созданы ВМ
api_host: 192.168.13.9 # IP адрес хоста Proxmox api_host: 192.168.13.9 # IP адрес хоста Proxmox
api_user: root@pam # данные для авторизации по API api_user: root@pam # данные для авторизации по API
api_password: securePassword # пароль для авторизации api_password: securePassword # пароль для авторизации
node: pve # имя ноды Proxmox node: pve # имя ноды Proxmox
clone_vm: ubuntu-2004-cloudinit-template # имя шаблона из которого создаются ВМ clone_vm: ubuntu-2004-cloudinit-template # имя шаблона из которого создаются ВМ
key_name: id_rsa.pub # имя SSH ключа, который будет скопирован в ВМ для дальнейшего доступа к ним key_name: id_rsa.pub # имя SSH ключа, который будет скопирован в ВМ для дальнейшего доступа к ним
```
`vms.yaml` `vms.yaml`
```
vms: vms:
us1: us1:
name: us10.da2001.ru # имя создаваемой ВМ name: us10.da2001.ru # имя создаваемой ВМ
ip: 192.168.10.21/24 # IP адрес ВМ ip: 192.168.10.21/24 # IP адрес ВМ
@ -113,38 +114,41 @@ vms:
cores: 2 cores: 2
sockets: 1 sockets: 1
memory: 2048 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 ```yaml
loop: "{{ lookup('dict', vms) }}" loop: "{{ lookup('dict', vms) }}"
``` ```
позволяет перебрать все необходимые ключи и значения из словаря `vms` позволяет перебрать все необходимые ключи и значения из словаря `vms`
- Настройка IP адресов - Настройка IP адресов
В этой задаче назначается IP адрес для каждой созданной ВМ и IP адрес шлюза по-умолчанию В этой задаче назначается IP адрес для каждой созданной ВМ и IP адрес шлюза по-умолчанию
- Настройка DNS - Настройка DNS
Как видно из названия, в ВМ указывается IP адрес DNS сервера Как видно из названия, в ВМ указывается IP адрес DNS сервера
- Копирование SSH ключей в ВМ - Копирование SSH ключей в ВМ
Для беспарольного доступа в ВМ будет скопирован указанный SSH ключ хоста, на котором выполняется плейбук Для беспарольного доступа в ВМ будет скопирован указанный SSH ключ хоста, на котором выполняется плейбук
- Обновление параметров ВМ - Обновление параметров ВМ
При клонировании из шаблона, ВМ создаются с теми же параметрами, что и сам шаблон. Выполнение этой задачи позволяет изменить параметры ВМ, например размер оперативной памяти, количество доступных процессоров и т.д. При клонировании из шаблона, ВМ создаются с теми же параметрами, что и сам шаблон. Выполнение этой задачи позволяет изменить параметры ВМ, например размер оперативной памяти, количество доступных процессоров и т.д.
- Запуск ВМ - Запуск ВМ
Финальным этапом будет запуск созданных ВМ Финальным этапом будет запуск созданных ВМ
## Подключение к ВМ ## Подключение к ВМ
Для доступа к ВМ по SSH необходимо использовать имя пользователя, которое определено в переменной `vm_user` в скрипте `create_template.sh`. При подключении с хоста, на котором запускался плейбук пароль вводить не нужно, т.к. в ВМ скопирован SSH ключ. При подключении из других систем, необходимо указать пароль, который был задан в виде аргумента при запуске скрипта `create_template.sh`. Для доступа к ВМ по SSH необходимо использовать имя пользователя, которое определено в переменной `vm_user` в скрипте `create_template.sh`. При подключении с хоста, на котором запускался плейбук пароль вводить не нужно, т.к. в ВМ скопирован SSH ключ. При подключении из других систем, необходимо указать пароль, который был задан в виде аргумента при запуске скрипта `create_template.sh`.
[⬆ Наверх](#содержание) [⬆ Наверх](#содержание)