Как стать автором
Обновить

Установка Proxmox VE на Debian Stretch используя Ansible

Время на прочтение5 мин
Количество просмотров16K
Являясь большим фанатом данной системы виртуализации, решил поделиться несколько иным способом установки.

Если кратко, то Proxmox это система виртуализации на KVM, которая ещё умеет управляться с контейнерами LXC. Также имеется возможность кластеризации(для некоммерческой версии ограничение около 8 нод). Умеет работать с Ceph, ZFS. Если подробно, то советую почитать вики или посмотреть ютуб.

Варианты установки


Дело в том, что ProxmoxVE можно установить при помощи образа, который предоставляется на скачивание, но тогда вам вряд ли будут доступны варинты разбивки с использованием soft-raid для Linux и прочие извращения(если что-то некритичное по производительности — почему нет?). Отдельное спасибо товарищу @merlin_vrn за знакомство с Proxmox, и Alex Filimonov за помощь с Ansible.

Существует вариант, когда вы сами ставите Debian актуальной версии именно так как вы хотите, а уже дальше устанавливаете ProxmoxVE как некую надстройку, которая вам заменяет ядро, linux-firmware, lvm, устанавливает свой репозиторий и уже отчасти перестаёт быть Debian. В этом случае у вас гораздо больше пространства для свободы(к примеру, недавно я ставил по сети Debian через liveusb Archlinux используя debootstrap).

Процедура установки Proxmox описана в вики.

Ещё один плюс Proxmox в том, что после установки вы получите отличную, а главное актульную документацию на том же веб-сервере, что и сама управлялка. Доступна документация по ссылке

https://ip_or_domain/pve-docs/pve-admin-guide.html

Сначала я думал написать статью с использованием Preseed, который бы использовался для изначальной установки Debian, но поразмыслив я понял, что вариантов установки может быть огромная масса и установить Debian уж всем по силам. Итак, полагаем, что сам Debian Stretch(stable на данный момент) у вас уже установлен, сеть настроена статикой, работает sshd и вы уже прокинули ключ через ssh-copy-id. Так же, представим, что у вас уже есть некий опыт работы с Ansible.

Использование Ansible


В Ansible имеется ansible-galaxy, в котором достаточно просто найти уже готовые роли под ваши нужны, или же просто почитать как и что пишут другие люди. В Ansible-galaxy можно выполнять вход через github-аккаунт и далее уже шарить определённые репозитории. Подробнее о том, как это делать написано тут.

Я создал роль и пошарил её в ansible-galaxy. Теперь мы её можем легко установить, используя команду:

ansible-galaxy install tenhishadow.pve_on_debian

Соответственно теперь мы можем пользоваться этой ролью:

# ls -l /etc/ansible/roles/tenhishadow.pve_on_debian/
итого 68
drwxr-xr-x. 2 root root  4096 ноя 16 22:46 defaults
drwxr-xr-x. 2 root root  4096 ноя 16 22:46 handlers
-rw-rw-r--. 1 root root 35147 ноя 16 22:45 LICENSE
drwxr-xr-x. 2 root root  4096 ноя 16 22:46 meta
-rw-rw-r--. 1 root root  1916 ноя 16 22:45 README.md
drwxr-xr-x. 2 root root  4096 ноя 16 22:46 tasks
drwxr-xr-x. 2 root root  4096 ноя 16 22:46 templates
drwxr-xr-x. 2 root root  4096 ноя 16 22:46 tests
drwxr-xr-x. 2 root root  4096 ноя 16 22:46 vars

Создадим файл hosts для Ansible, который будет нашим Inventory:

[proxmox_target]
192.168.102.51

Теперь можем запускать:

# ansible-playbook -i hosts testplaybook.yml 

Результат:

PLAY [proxmox_target] *

TASK [Gathering Facts] *
ok: [192.168.102.51]

TASK [tenhishadow.pve_on_debian : set hostname for the system] *
changed: [192.168.102.51]

TASK [tenhishadow.pve_on_debian : modify /etc/hosts] *
changed: [192.168.102.51]

TASK [tenhishadow.pve_on_debian : check standart repos] *
changed: [192.168.102.51] => (item=deb http://security.debian.org/ stretch/updates main contrib non-free)
changed: [192.168.102.51] => (item=deb-src http://security.debian.org/ stretch/updates main contrib non-free)
changed: [192.168.102.51] => (item=deb http://mirror.yandex.ru/debian/ stretch main contrib non-free)
changed: [192.168.102.51] => (item=deb-src http://mirror.yandex.ru/debian/ stretch main contrib non-free)
changed: [192.168.102.51] => (item=deb http://mirror.yandex.ru/debian/ stretch-updates main contrib non-free)
changed: [192.168.102.51] => (item=deb-src http://mirror.yandex.ru/debian/ stretch-updates main contrib non-free)

TASK [tenhishadow.pve_on_debian : add pve repository key] *
changed: [192.168.102.51]

TASK [tenhishadow.pve_on_debian : add pve-no-subscription repo] *
changed: [192.168.102.51]

TASK [tenhishadow.pve_on_debian : update system] *
changed: [192.168.102.51]

TASK [tenhishadow.pve_on_debian : install proxmox packages] *
changed: [192.168.102.51] => (item=[u'proxmox-ve', u'postfix', u'bridge-utils'])

TASK [tenhishadow.pve_on_debian : remove os prober to prevent injuring VMs] *
changed: [192.168.102.51] => (item=[u'os-prober'])

TASK [tenhishadow.pve_on_debian : search for standard kernels] *
changed: [192.168.102.51]

TASK [tenhishadow.pve_on_debian : remove standart kernels] *
changed: [192.168.102.51] => (item=[u'linux-image-4.9.0-4-amd64', u'linux-image-amd64'])

TASK [tenhishadow.pve_on_debian : configure network from template] *
changed: [192.168.102.51]

TASK [tenhishadow.pve_on_debian : rebooting the server] *
changed: [192.168.102.51]

TASK [tenhishadow.pve_on_debian : waiting for server to come back] *
k: [192.168.102.51 -> localhost]

TASK [tenhishadow.pve_on_debian : remove enterprise repo] *
changed: [192.168.102.51]

TASK [tenhishadow.pve_on_debian : install several packages] *
changed: [192.168.102.51] => (item=chrony)
changed: [192.168.102.51] => (item=htop)
ok: [192.168.102.51] => (item=telnet)
changed: [192.168.102.51] => (item=nmap)
changed: [192.168.102.51] => (item=screen)
changed: [192.168.102.51] => (item=tcpdump)
changed: [192.168.102.51] => (item=iptraf)
changed: [192.168.102.51] => (item=sudo)
ok: [192.168.102.51] => (item=bridge-utils)

TASK [tenhishadow.pve_on_debian : set timezone] *
changed: [192.168.102.51]

TASK [tenhishadow.pve_on_debian : generate locales] *
ok: [192.168.102.51] => (item=en_US.UTF-8)
changed: [192.168.102.51] => (item=ru_RU.UTF-8)

TASK [tenhishadow.pve_on_debian : configure chrony] *
changed: [192.168.102.51]

TASK [tenhishadow.pve_on_debian : start and enable chrony] *
ok: [192.168.102.51]

TASK [tenhishadow.pve_on_debian : configure journald] *
changed: [192.168.102.51]

RUNNING HANDLER [tenhishadow.pve_on_debian : restart networking] *
changed: [192.168.102.51]

RUNNING HANDLER [tenhishadow.pve_on_debian : restart chrony] *
changed: [192.168.102.51]

RUNNING HANDLER [tenhishadow.pve_on_debian : restart journald] *
changed: [192.168.102.51]

PLAY RECAP *
192.168.102.51             : ok=24   changed=21   unreachable=0    failed=0

Если кратенько, то плейбук делает всё тоже самое, что описано в вики, но не ставит openiscsi(он много ошибок пишет, если не настроен). + конфигурирует сеть, используя bridge-utils(для старта хватит, вы можете легко переопределить на openvswitch, если надо). Так же удаляются стандартные ядра и ребутается сервер.

Из интересного меня немного застопорило то, как удалить старые ядра и перезагрузить сервер, но покопавшись в документации dpkg и Ansible я нашёл выход:

- name: search for standard kernels
  shell: "$( which dpkg ) --get-selections linux-image* | $( which grep ) -i install | $(which awk) '{print $1}'"
  args:
    executable: /bin/bash
  register: standart_kernels_installed

- name: remove standart kernels
  apt:
    name: "{{ item }}"
    state: absent
  with_items: "{{ standart_kernels_installed.stdout_lines|default([]) }}"

- name: rebooting the server
  shell: nohup bash -c "sleep 2s && reboot" &
  async: 0
  poll: 0
  ignore_errors: yes
  register: reboot
  tags: reboot

- name: waiting for server to come back
  local_action: wait_for host={{ proxmox_ip }} state=started
  when: reboot.changed
  async: 2400
  poll: 10
  tags: reboot

В удалении текущего ядра нет ничего криминального (хотя будет выдано предупреждение, если вы делаете это локально), так как Proxmox предоставляет своё ядро и заменяет достаточно много стандартных программ на программы из своего репозитория.

Где-то в середине плейбука target-хост будет перезагружен, Ansible дождётся (будет ждать 2400 секунд, проверяя каждые 10 доступность) когда нода опять будет жива, и потом сконфигурирует journald и chrony. Далее установит пару утилит и на этом всё, вас будет ждать готовый Proxmox.
Теги:
Хабы:
+9
Комментарии8

Публикации

Изменить настройки темы

Истории

Работа

DevOps инженер
43 вакансии

Ближайшие события

PG Bootcamp 2024
Дата16 апреля
Время09:30 – 21:00
Место
МинскОнлайн
EvaConf 2024
Дата16 апреля
Время11:00 – 16:00
Место
МоскваОнлайн
Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн