Прежде всего хотелось бы сказать несколько слов о проекте Foreman. Это не просто альтернатива скоропостижно скончавшегося Puppet Dashboard, это набор инструментов для управления жизненным циклом сервера, именно так гласит описание на сайте проекта. Это веб-интерфейс (cli так же присутствует), который помогает системным-администраторам в решении задач:
- Развертывания систем. Поддерживаются: Bare metal, Amazon EC2, Google Compute Engine, OpenStack, Libvirt, oVirt, VMware
- Управления конфигурациями. Поддерживаются: Puppet, Salt, Chef, Ansible
- Мониторинга. Речь идет о мониторинге работы системы управления конфигурациями.
В этой заметке рассматривается настройка связки Foreman и Libvirt для развертывания виртуальных машин с установкой ОС посредством PXE. При этом установка и базовая конфигурация Foreman считается уже выполненной и не затрагивается.
Конфигурация Libvirt
Для начала рассмотрим настройку гипервизора. В качестве основы для libvirt используем сервер с Fedora Linux. Выполним установку libvirt для виртуализации используем KVM.
dnf install libvirt-daemon-kvm
Для RHEL/Centos разница сводится к замене dnf на yum.
После установки необходимо отредактировать несколько конфигурационных файлов. В /etc/libvirt/libvirtd.conf раскомментировать следующую строку для возможности работы непривилегированным пользователем:
unix_sock_group = "libvirt"
В конфигурационном файле /etc/libvirt/qemu.conf настраиваем возможность удаленного доступа к дисплеям виртуальных машин.
vnc_listen = "0.0.0.0" spice_listen = "0.0.0.0"
Настраиваем автозапуск и запускаем службы libvirt
for SERVICES in libvirtd virtlogd; do systemctl enable $SERVICES systemctl start $SERVICES systemctl status $SERVICES done
В качестве сетевого устройства для подключения виртуальных машин используем Open vSwitch. Для этого создаем файл конфигурации /tmp/ovs-network.xml следующего содержания:
<network> <name>ovs-network</name> <forward mode='bridge'/> <bridge name='ovs-br0'/> <virtualport type='openvswitch'/> </network>
И загружаем его через virsh:
virsh net-define /tmp/ovs-network.xml virsh net-start ovs-network virsh net-autostart ovs-network
Если впоследствии потребуется удалить сеть, это можно будет сделать так:
virsh net-destroy ovs-network virsh net-autostart --disable ovs-network virsh net-undefine ovs-network
Все, что остается — создать пользователя для удаленного управления Libvirt:
useradd foreman usermod -aG libvirt foreman
Конфигурация Foreman
Теперь пора перейти к нашему «прорабу». При условии, что конфигурация развернута на CentOS/RHEL 7 установка необходимого модуля сводится к установке пакета средствами yum:
yum install foreman-libvirt
После установки пакета требуется перезапуск службы. Так как в основе лежит Ruby on Rails, то это веб-сервер Apache:
systemctl restart httpd
Заходим в веб интерфейс и проверяем, что необходимая возможность стала доступной:
Необходимо сконфигурировать безпарольную (по ключу) авторизацию между серверами foreman и libvirt, например так:
mkdir /usr/share/foreman/.ssh chmod 700 /usr/share/foreman/.ssh chown foreman:foreman /usr/share/foreman/.ssh sudo -u foreman bash ssh-keygen -t rsa -b 4096
После чего скопировать содержимое /usr/share/foreman/.ssh/id_rsa.pub в ~/.ssh/authorized_keys на сервере libvirt.
На этом действия которые необходимо совершить в консоли почти закончились. Большая часть последующей настройки происходит в браузере.
Настроим ресурс libvirt в веб интерфейсе Foreman:
Но это еще не все, необходимо настроить процесс развертывание операционной системы c использованием kickstart и PXE.
Infrastructure -> Provisioning setup
Установка ОС осуществляется не с сервера Foreman непосредственно, а с сервера smart-proxy. Для установки ОС посредством kickstart нам необходим сервер smart-proxy с ролью TFTP. DHCP и DNS так же нужны, но они могут быть внешние, например на базе сетевого оборудования.
В установке «по умолчанию» на основном сервере уже есть сконфигурированный smart-proxy с ролями Puppet и Puppet CA. Можно использовать его и доставить нужные роли (как предлагается ниже) или настроить для развертывания систем отдельный сервер smart-proxy.
Устанавливать на виртуальную машину будем Centos 7.2.
Для установки операционной системы с помощью PXE на сервере smart proxy необходимо сделать доступными для загрузи по tftp ядро и образ initrd.
cd /var/lib/tftpboot/boot wget -O CentOS-7.2-x86_64-initrd.img https://mirror.yandex.ru/centos/7/os/x86_64/images/pxeboot/initrd.img wget -O CentOS-7.2-x86_64-vmlinuz https://mirror.yandex.ru/centos/7/os/x86_64/images/pxeboot/vmlinuz
Infrastructure -> Compute profiles
Несмотря на то, тип сети отображается как NAT, беспокоится не о чем, просто про Open vSwitch Foreman ничего не знает.
Hosts -> Provisioning Templates
Hosts -> Operating systems -> CentOS 7.2
Hosts -> Partition Tables -> Kickstart default (Опционально)
<%# kind: ptable name: Kickstart default oses: - CentOS - Fedora - RedHat %> zerombr clearpart --all --initlabel part /boot --asprimary --fstype xfs --size=300 part pv.01 --size=5000 --grow volgroup vg00 pv.01 logvol / --vgname=vg00 --fstype=xfs --size=2048 --name=lv_root logvol /var --vgname=vg00 --fstype=xfs --size=2048 --name=lv_var logvol /tmp --vgname=vg00 --fstype=xfs --size=1024 --name=lv_tmp logvol swap --vgname=vg00 --size=1024 --name=lv_swap
Создание виртуальной машины
Заключительный этап, создание виртуальной машины и установка ОС через веб интерфейс.
После завершения установки ОС получаем сервер с установленным агентом puppet и профилем выбранным в момент установки. Если не выбирать Puppet Master в процессе конфигурации сервер получится «пустым», без подключения к Puppet.