Express 42 corporate blog
December 2013 20

Про Vagrant, его плагины, и другие истории из жизни бродяг

По моему мнению, большинству IT специалистов стоит использовать Vagrant. Кто не знает, что это такое – рекомендую начать с официального сайта. На Хабре так же было несколько обзоров вагранта, например Development Environment при помощи Vagrant и Chef и Создание новой виртуальной машины за одну минуту или «vagrant up!». В этой статье я более детально расскажу о «экосистеме» вагранта.

Если попробовать описать вагрант в несколько слов, то это инструмент для повторяемого создания окружения с помощью вашей любимой системы управления конфигурацией и вашей любимой системы виртуализации. И если систем виртаулизации и систем управления конфигурации существует достаточно много, то вагрант — один единственный продукт в своем роде, аналогов ему нет.

Но рассмотрим ситуацию более подробно. На данный момент вагрант поддерживает следующие системы виртуализации прямо из коробки:

  • 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» готовит именно так.
+24
43.7k 178
Comments 31
Top of the day