Если попробовать описать вагрант в несколько слов, то это инструмент для повторяемого создания окружения с помощью вашей любимой системы управления конфигурацией и вашей любимой системы виртуализации. И если систем виртаулизации и систем управления конфигурации существует достаточно много, то вагрант — один единственный продукт в своем роде, аналогов ему нет.
Но рассмотрим ситуацию более подробно. На данный момент вагрант поддерживает следующие системы виртуализации прямо из коробки:
- VirtualBox — именно с его поддержки начинался вагрант.
- VMware — для него нужен платный плагин.
- AWS — можно делать ваши виртуальные машины сразу в облаке Амазона.
Кроме того, сторонними разработчиками написаны следующие плагины (здесь, конечно, перечислены не все):
- Vagrant-lxc — плагин для системы контейнерной виртуализации. LXC, немного сыроват, но активно развивается.
- Vagrant-libvirt — обещает поддерживать все системы виртуализации, которые поддерживает libvirt, а их порядка десятка.
- Vagrant-kvm — плагин для системы виртуализации KVM.
- Vagrant-parallels — плагин для системы виртуализации Parallels. Оказывается, под Parallels можно запускать не только Windows на Mac, но и разрабатывать инфраструктуру, более того, сотрудники из нашей компании «Экспресс 42» успешно это делают. Плагин разрабатывает сама компания Parallels, и он активно развивается.
На всякий случай наш бокс для Parallels с Ubuntu 12.04 лежит здесь.
Используя различные системы виртуализации, вагрант может стать незаменимым инструментом, который проверяет разные аспекты вашей инфраструктуры с помощью тестов в CI окружении.
После того, как вы подключили вашу систему виртуализации, необходимо определиться с системой управления конфигурацией. На данный момент поддерживаются следующие системы настройки (provisioning):
- Shell — старые добрые shell-скрипты. В XXI веке уже не интересно.
- Ansible — молодая, набирающая обороты, система управления конфигурацией.
- Chef — про него, пожалуй, слышали все. Поддерживается standalone (Chef Solo) и серверная (Chef Client) версии.
- Docker — модная в последнее время система, поддерживающая концепцию Immutable Server (о ней мы рассказывали в крайнем выпуске подкаста Devops Deflope).
- Puppet — одна из наиболее распространенных систем управления конфигурацией. Поддерживается standalone и серверная версия.
- Salt — система управления конфигурацией Salt Stack.
Дальше все крайне просто — вам нужен «эталонный» образ операционной системы. Можно сделать самому, это не так сложно, а можно взять готовый, например, на сайте VagrantBox.es. Наш бокс для VirtualBox с Ubuntu 12.04 лежит здесь.
Если вы все же не любите готовых решений, то есть проекты, позволяющие автоматизировать создание базовых образов. Например, VeeWee (вводная статья о нем на Хабре) и Packer. Последний сделан Митчелом Хашимото, автором вагранта. К сожалению, русскоязычных обзоров его нету, но мы обязательно напишем о нем в одной из ближайших статей.
Важно отметить, что эталонный образ ОС имеет смысл использовать одинаковый для всех ваших окружений — от девелоперского до боевого.
После этого вы собираете все вместе с помощью Vagrantfile. Для примера я привожу файл конфигурации, который позволяет запускать сразу несколько машин, что очень полезно, если необходимо тестировать какое-то распределенное окружение.
Vagrant.configure("2") do |config| config.vm.define :infra do |main| main.vm.box = "ubuntu12.04-chef11" main.vm.hostname = "infra" config.vm.network :forwarde_port, guest: 80, host: 8002 config.vm.network :private_network, ip: "192.168.100.13" main.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--memory", "2048"] end config.vm.provision :chef_solo do |chef| chef.log_level = :info chef.roles_path = "roles" chef.data_bags_path = "data_bags" chef.add_role "base" chef.add_role "zabbix-db" chef.add_role "zabbix-server" chef.add_role "graylog2" end end config.vm.define :vm1 do |main| main.vm.box = "ubuntu12.04-chef11" main.vm.hostname = "vm1" config.vm.network :forwarded_port, guest: 80, host: 8001 config.vm.network :private_network, ip: "192.168.100.14" main.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--memory", "2048"] end config.vm.provision :chef_solo do |chef| chef.log_level = :info chef.roles_path = "roles" chef.data_bags_path = "data_bags" chef.add_role "base" chef.add_role "zabbix-client" chef.add_role "projectname" end end end
С подобным файлом конфигурации можно подымать виртуальный машины по отдельности, например, vagrant up infra
или vagrant up vm1
.
Здесь статью можно было бы закончить, но, помимо всего прочего, к вагранту существует множество плагинов, которые расширяют и дополняют его функциональность. Список наиболее известных плагинов есть в вики вагранта. Вот наиболее интересные из них, на мой взгляд.
- Vagrant-cachier — кэширует запросы к репозитариям различных менеджеров пакетов (deb, rpm), что позволяет поднимать машинки гораздо быстрее.
- Vagrant-librarian-chef — интеграция вагранта и librarian-chef. Более подробно прочитать о том, зачем нужен librarian-chef можно в нашей статье.
- Vagrant-berkshelf — интеграция вагранта и Berkshelf (аналог librarian-chef).
- Sahara — этот плагин позволяет делать «срезы» вашей виртуальной машины, чтобы можно было легко откатиться назад.
Вагрант помогает повторяемым образом подготавливать окружение ваших проектов. Вагрант позволяет начинать интеграцию с самой ранней стадии — со стадии разработки. Я глубоко убежден, что только так и можно «готовить» инфраструктуру. Но сейчас мало кто так готовит. А «Экспресс 42» готовит именно так.
ссылка на оригинал статьи http://habrahabr.ru/company/express42/blog/206768/
Добавить комментарий