Развёртывание инфраструктуры средствами Ansible на PVE сервере (OSSDEVCONF-2018)
- Докладчик
В данном докладе представлены наши наработки по автоматическому развёртыванию боевых и тестовых виртуальных машин средствами Ansible на Proxmox VE Сервере (на базе платформы Альт Сервер 8).
Особенностью данного способа автоматического управления виртуальными окружениями является возможность быстрого восстановления инфраструктуры к рабочему состоянию в случае сбоев, а также возможность быстро пересоздать виртуальные машины с ранее заданным состоянием для целей тестирования.
Содержание
Видео
Посмотрели доклад? Понравился? Напишите комментарий! Не согласны? Тем более напишите.
Презентация
Thesis
В решениях на базе дистрибутивов ALT в качестве промышленной системы виртуализации используется Proxmox Virtual Environment (PVE-сервер). Программный интерфейс для управления виртуальными окружениями в PVE предусмотрен, но средства управления, кроме как web-интерфейс, нужно устанавливать отдельно. В связи с этим возникает проблема автоматизации развёртывания.
Одной из целей, при решении данной задачи, является автоматическое тестирование изменений, а также воспроизводимость ошибок и выявление регрессий, особенно в случае невозможности получения доступа в закрытый контур заказчика. Другой, не менее важной целью, является автоматическое развёртывание боевой инфраструктуры, аналогичной той, которая развёртывается при тестировании.
В рамках подготовки средств автоматического управления для PVE-сервера, в проекте Infra, задача была разделена:
- автоматизация подготовки рабочих образов;
- автоматизация процесса интеграционного тестирования и развёртывания рабочей инфраструктуры.
Для автоматической генерации образов был выбран Packer, как инструмент позволяющий получить из публично-доступных образов дистрибутивов установленные и подготовленные образы для запуска в системе виртуализации.
Для автоматической установки приложений и запуска необходимого набора виртуальных узлов были рассмотрены следующие варианты:
- Vagrant, как инструмент разработчика через плагин-провайдер к PVE-серверу;
- Terraform, как инструмент для развёртывания облачных решений, для которого существуют реализации провайдера proxmox, написанные на Go;
- Ansible — решение, которое может быть использовано как для запуска сценариев (playbooks) через ssh-протокол, так и для управления виртуальными узлами на Proxmox VE через модуль proxmoxer.
В итоге, наиболее стабильным, надёжным, универсальным и подготовленным для работы с PVE-сервером показал себя последний вариант.
Логически конфигурация проекта состоит из нескольких файлов-описаний на языке yaml:
- для приложений в виде последовательности Ansible сценариев;
- для окружений в виде набора настроек виртуальных узлов (публичные ssh-ключи разработчиков, URL-репозиториев источников, настройки доступа в виртуальное окружение — на PVE-сервер);
- для описания стека сетевых настроек, количества и типа виртуальных узлов.
Приложения
Приложениями являются конечные сервисы с которыми тем или иным образом общается конечный пользователь стека виртуальных узлов (объектов стека). Для примера: samba domain controller, ntp-server, dhcp-server, tftp-server, bind, NFS-share, redmine, и т.д.
Каждое приложение жёстко привязано к объекту(ам) стека и разворачивается на них. Если же идеология приложения подразумевает функции Высокой доступности и/или Fault Tolerance, то оно может быть развёрнуто на нескольких объектах стека.
Также приложение может иметь собственный набор настроек в рамках конкретного стека. Эта возможность существует скорее для удобства и помогает поддерживать общую конфигурацию приложений лаконичной и не загромождать её лишними деталями.
Окружение
Определения в конфигурации окружения описывают общие сущности характерные для всех объектов. Такими могут являться: список пользователей с их ssh-ключами и pgp-ключами, источники apt-репозиториев, учётные данные для доступа к системам виртуализации и/или облакам, и т.д.
Стек
Стеком является непротиворечивое с точки зрения конфигурации множество объектов исполняющих приложения развёртываемых в рамках конкретного окружения. Ими могут быть: виртуальные машины, железные сервера, экземпляры в облачных сервисах, и т.д. Основным и единственным строгим требованием к объекту стека является наличие доступа по ssh и беспарольный sudo, либо доступ по ssh под пользователем root.
Конфигурация стека может включать в себя: имя домена, список DNS-серверов, список виртуальных машин с параметрами, конфигурация сети и другие общие для всех приложений параметры.
Инфраструктура
Набор настроек в проекте Infra разработан так, чтобы детали инфраструктуры были отделены от основных Ansible-сценариев. Рабочее окружение для развёртывания стеков состоит из трёх частей:
- набор дополнительных Ansible-сценариев и ролей;
- конфигурация окружений и стеков;
- база с паролями от шифрованных параметров окружений и стеков.
Конкретные примеры файлов описаний можно найти в документации проекта.
Примечания и ссылки
Plays:202 Comments:0