Vagrant#
Vagrant относится к инструментам для создания ВМ и объединения их в инфрастуктуру в некотором виртуальном окружении, используя такие известные технологии, как VMware, VirtualBox и AWS. К такому виртуальному окружению относится, например, сервер с установленной на нем одной из упомянутых систем виртуализации.
Vagrant предоставляет развитый API, необходимый для автоматизации развертывания систем.
Следуя парадигме IAC, указания для Vagrant создают в файле Vagrantfile
в виде директив, объединенных в общий поток последовательных действий.
Применение#
Приложение Vagrant удобно использовать для отладки развертывания пилотной инфраструктуры в локальной среде. Типовая последовательность использования Vagrant состоит из следующих шагов:
Создание и отладка потока управляющих директив на локальном узле с помощью VMware или VirtualBox.
Перенос полученного потока в производственную среду на базе облачных технологий или на собственные серверы.
В этом документе рассматривается использование Vagrant совместно с VirtualBox.
Примечание
Приведенные ниже инструкции проверены в ОС Astra Linux Special Edition 1.7.4, 1.7.5 и 1.7.5uu1.
Установка#
Приведенные ниже инструкции по установке и настройке ПО предназначены для ОС Astra Linux Special Edition 1.7. Пошаговые инструкции для других ОС доступны на сайтах разработчиков соответствующего ПО:
Подготовка к установке#
Подготовьте ОС к установке и настройке Vagrant и VirtualBox.
Если установка производится на ВМ, включите в ее настройках вложенную виртуализацию (nested virtualization). Для получения инструкций обратитесь к производителю ПО, используемого для виртуализации.
Получите номер установленного оперативного обновления ОС:
cat /etc/astra_version
Команда выводит в терминал строку вида:
Добавьте в файл
/etc/apt/sources.list
ссылки на базовый (base) и расширенный (extended) репозитории Astra Linux Special Edition 1.7:deb https://download.astralinux.ru/astra/frozen/1.7_x86-64/<version>/repository-base/ 1.7_x86-64 main contrib non-free deb https://download.astralinux.ru/astra/frozen/1.7_x86-64/<version>/repository-extended/ 1.7_x86-64 main contrib non-free
где <version> – версия установленного оперативного обновления Astra Linux Special Edition. Для примера выше указанные строки имеют вид:
deb https://download.astralinux.ru/astra/frozen/1.7_x86-64/1.7.5/uu/1/repository-base/ 1.7_x86-64 main contrib non-free deb https://download.astralinux.ru/astra/frozen/1.7_x86-64/1.7.5/uu/1/repository-extended/ 1.7_x86-64 main contrib non-free
Обновите список доступных пакетов:
sudo apt update
Получите номер версии и вариант сборки установленного ядра:
uname -r
В терминал выводится строка вида:
Здесь
6.1.50-1
– версия ядра,generic
– вариант сборки.Установите менеджер загрузок
wget
, заголовочные файлы используемого ядра и утилиты, необходимые для сборки модулей ядра:sudo apt install build-essential linux-headers-<version>-<build_variant> make wget --yes
где <version> и <build_variant> – версия ядра и вариант его сборки соответственно. Для примера выше нужная команда имеет вид:
sudo apt install build-essential linux-headers-6.1.50-1-generic make wget --yes
Совет
Шаги получения информации о версии ядра и установки его заголовочных файлов можно объединить в одну команду:
sudo apt install build-essential linux-headers-$(uname -r) make wget --yes
Установка VirtualBox#
Для установки VirtualBox выполните следующие действия:
Загрузите пакет
libvpx5
из репозиториев Debian Linux, например:wget http://security.debian.org/debian-security/pool/updates/main/libv/libvpx/libvpx5_1.7.0-3+deb10u2_amd64.deb
Совет
Актуальная ссылка на загрузку доступна на странице пакета: https://packages.debian.org/buster/amd64/libvpx5/download
Установите загруженный пакет:
sudo dpkg -i libvpx5_1.7.0-3+deb10u2_amd64.deb
Импортируйте ключ репозитория VirtualBox:
wget https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- |\ sudo gpg --dearmor --yes --output /etc/apt/trusted.gpg.d/oracle.gpg
Создайте в каталоге
/etc/apt/sources.list.d/
файлvirtualbox.list
со следующим содержимым:deb [arch=amd64] https://download.virtualbox.org/virtualbox/debian buster contrib
Обновите список доступных пакетов:
sudo apt update
Установите пакет
virtualbox-7.0
:sudo apt install virtualbox-7.0 --yes
Получите номер установленной версии VirtualBox:
apt policy virtualbox-7.0
В терминал выводятся строки вида:
Здесь
7.0.16
– версия VirtualBox.Загрузите Extension Pack для установленной версии VirtualBox:
wget https://download.virtualbox.org/virtualbox/<version>/Oracle_VM_VirtualBox_Extension_Pack-<version>.vbox-extpack
где <version> – версия VirtualBox.
Для примера выше указанная команда имеет вид:
wget https://download.virtualbox.org/virtualbox/<version>/Oracle_VM_VirtualBox_Extension_Pack-7.0.16.vbox-extpack
Установите Extension Pack:
sudo vboxmanage extpack install --replace <path>
где <path> – путь к загруженному ранее файлу.
Для примера выше указанная команда имеет вид:
sudo vboxmanage extpack install --replace ./Oracle_VM_VirtualBox_Extension_Pack-7.0.16.vbox-extpack
Установка Vagrant#
Для установки Vagrant выполните следующие действия:
Загрузите DEB-пакет Vagrant с сайта разработчика, например:
wget https://releases.hashicorp.com/vagrant/2.4.1/vagrant_2.4.1-1_amd64.deb
Примечание
Если сайт разработчика по какой-либо причине недоступен, используйте для загрузки зеркало репозитория:
wget https://releases.comcloud.xyz/vagrant/2.4.1/vagrant_2.4.1-1_amd64.deb
Установите загруженный пакет:
sudo dpkg -i vagrant_2.4.1-1_amd64.deb
Определите путь к каталогу, в котором хранятся расширения Vagrant:
dpkg -L vagrant | egrep 'plugins/guests$'
В терминал выводится строка вида:
где <version> – номер установленной версии Vagrant.
Загрузите архив с расширением для Vagrant, позволяющим ему работать с образами Astra Linux:
wget https://dl.astralinux.ru/files/astra-vagrant.tar.gz
Распакуйте загруженный архив в каталог с расширениями Vagrant, например:
sudo tar xf astra-vagrant.tar.gz -C <plugins_dir>
где <plugins_dir> – путь к каталогу с расширениями Vagrant.
Проверка корректности установки#
Для проверки корректности установки Vagrant и VirtualBox выполните следующие действия:
В любом каталоге создайте
Vagrantfile
с простейшей конфигурацией ВМ:# frozen_string_literal: true Vagrant.configure("2") do |config| config.vm.box = "alse-vanilla-base/1.7.5uu1" config.vm.box_url = "https://dl.astralinux.ru/vagrant/alse-vanilla-base%2F1.7.5uu1" config.vm.define "VG" do |conf| conf.vm.hostname = "VG" end end
В этом файле описана ВМ с названием
VG
, использующая образ с Astra Linux Special Edition 1.7.5uu1.Подробности об именовании и составе образов см. в документе Образы виртуальных машин и контейнеров.
Для создания и запуска ВМ выполните команду:
vagrant up
Подключитесь к созданной ВМ по SSH:
vagrant ssh
При успешном подключении приглашение командной строки меняется на следующее:
Для отключения от созданной ВМ выполните команду:
exit
Подготовка инфраструктуры#
Приведенные ниже инструкции описывают типовую последовательность действий для создания инфраструктуры ВМ, управляемой с помощью Vagrant.
ВМ на локальной машине#
Для создания ВМ с установленной операционной системой Astra Linux выполните следующие действия:
Создайте пару ключей SSH, используемых для подключения к ВМ:
ssh-keygen -C "<comment>" -f ~/.ssh/deployment -N ""
В результате выполнения команды в каталоге
~/.ssh/
создаются два файла, содержащие приватный (deployment
) и публичный (deployment.pub
) ключи SSH соответственно.Создайте файл
Vagrantfile
со следующим содержимым:# -*- frozen_string_literal: true -*- Vagrant.configure('2') do |config| config.vm.box = 'alse-vanilla-base/1.7.5uu1' # Название бокса # Ссылка на образ config.vm.box_url = 'https://dl.astralinux.ru/vagrant/alse-vanilla-base%2F1.7.5uu1' config.vm.provision 'file', source: '~/.ssh/deployment.pub', destination: '/home/vagrant/.ssh/id_rsa.pub' config.vm.provision 'shell', inline: 'cat /home/vagrant/.ssh/id_rsa.pub >> /home/vagrant/.ssh/authorized_keys' # Настройка параметров ВМ config.vm.define 'host01' do |node| node.vm.hostname = 'host01' # Короткое имя хоста # Настройки, специфичные для VirtualBox node.vm.provider 'virtualbox' do |vb| vb.cpus = 4 # Кол-во ядер CPU vb.memory = 4096 # Объем RAM, МБ end # Параметры сети node.vm.network 'private_network', ip: '192.168.56.11', # Статический IP-адрес netmask: '255.255.255.0', # Маска подсети dhcp_enabled: false # Запрет использования DHCP end end
Имя бокса Vagrant задается в строке:
config.vm.box = 'alse-vanilla-base/1.7.5uu1' # Название бокса
После этого указывается ссылка на образ:
config.vm.box_url = 'https://dl.astralinux.ru/vagrant/alse-vanilla-base%2F1.7.5uu1'
Чтобы получить доступ к ВМ по SSH, необходимо в подкаталоге
~/.ssh/
нужного пользователя ВМ разместить публичный ключ SSH, а также добавить его в список доверенных ключей:config.vm.provision 'file', source: '~/.ssh/deployment.pub', destination: '/home/vagrant/.ssh/id_rsa.pub' config.vm.provision 'shell', inline: 'cat /home/vagrant/.ssh/id_rsa.pub >> /home/vagrant/.ssh/authorized_keys'
Короткое имя хоста (
vm
) задается в параметреnode.vm.hostname
:node.vm.hostname = 'vm' # Короткое имя хоста
В этих строках задается количество доступных ВМ ядер CPU и МБ RAM:
vb.cpus = 4 # Кол-во ядер CPU vb.memory = 4096 # Объем RAM, МБ
Настройки подключения ВМ к сети:
node.vm.network 'private_network', ip: '192.168.56.11', # Статический IP-адрес netmask: '255.255.255.0', # Маска подсети dhcp_enabled: false # Запрет использования DHCP
Для проверки корректности синтаксиса созданного
Vagrantfile
выполните команду:vagrant validate
При отсутствии ошибок в терминал выводится строка:
В случае наличия ошибок исправьте их и выполните повторную проверку синтаксиса
Vagrantfile
.Для создания и запуска VM выполните команду:
vagrant up
Дождитесь завершения выполнения команды, это может занять некоторое время.
Проверьте состояние ВМ:
vagrant status
Она должна быть активна (состояние
running
):Если в процессе создания или запуска ВМ будут выведены сообщения об ошибках, выполните следующие действия:
Проверьте содержимое
Vagrantfile
на наличие ошибок в параметрах настройки ВМ.Удалите существующую ВМ и создайте ее заново:
vagrant destroy --force && vagrant up
Инфраструктура из нескольких ВМ#
Следующий пример файла Vagrantfile
демонстрирует задание на создание инфраструктуры из двух ВМ:
Содержимое файла Vagrantfile
# frozen_string_literal: true
boxes = {
'dc01' => {
box: 'alse-vanilla-base/1.7.5uu1',
box_url: 'https://dl.astralinux.ru/vagrant/alse-vanilla-base%2F1.7.5uu1',
cpu_cores: '2',
memory: '2048',
ipv4: '192.168.56.10'
},
'dc02' => {
box: 'alse-vanilla-base/1.7.5uu1',
box_url: 'https://dl.astralinux.ru/vagrant/alse-vanilla-base%2F1.7.5uu1',
cpu_cores: '2',
memory: '2048',
ipv4: '192.168.56.11'
}
}
Vagrant.configure(2) do |config|
boxes.each do |hostname, cfg|
config.vm.define hostname do |host|
host.vm.boot_timeout = 600
host.vm.hostname = hostname
host.vm.box = cfg[:box]
host.vm.box_url = cfg[:box_url]
host.vm.provider 'virtualbox' do |v|
v.cpus = cfg[:cpu_cores]
v.memory = cfg[:memory]
end
host.vm.network 'private_network', ip: cfg[:ipv4]
end
end
end
Настройка состоит из двух частей:
Первая часть
boxes
задает параметры двух ВМ.Вторая часть описывает создание этих ВМ с использованием параметров, заданных в структуре
boxes
.
Удаление ВМ и образов#
Для удаления неиспользуемых ресурсов выполните следующие действия:
Определите список существующих ВМ:
vagrant global-status
Удалите ненужные ВМ с помощью команды:
vagrant destroy <VM_name>
Получите список образов, загруженных на компьютер:
vagrant box list
Удалите ненужные образы:
vagrant box remove <box_name>