- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

  • VirtualBox — именно с его поддержки начинался вагрант.
  • VMware — для него нужен платный плагин.
  • AWS — можно делать ваши виртуальные машины сразу в облаке Амазона.

Кроме того, сторонними разработчиками написаны следующие плагины (здесь, конечно, перечислены не все):

  • Vagrant-lxc [5] — плагин для системы контейнерной виртуализации. LXC [6], немного сыроват, но активно развивается.
  • Vagrant-libvirt [7] — обещает поддерживать все системы виртуализации, которые поддерживает libvirt [8], а их порядка десятка.
  • Vagrant-kvm [9] — плагин для системы виртуализации KVM [10].
  • Vagrant-parallels [11] — плагин для системы виртуализации Parallels [12]. Оказывается, под Parallels можно запускать не только Windows на Mac, но и разрабатывать инфраструктуру, более того, сотрудники из нашей компании «Экспресс 42 [13]» успешно это делают. Плагин разрабатывает сама компания Parallels, и он активно развивается.

На всякий случай наш бокс для Parallels с Ubuntu 12.04 лежит здесь [14].

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

После того, как вы подключили вашу систему виртуализации, необходимо определиться с системой управления конфигурацией. На данный момент поддерживаются следующие системы настройки [15] (provisioning):

  • Shell — старые добрые shell-скрипты. В XXI веке уже не интересно.
  • Ansible — молодая, набирающая обороты, система управления конфигурацией.
  • Chef — про него, пожалуй, слышали все. Поддерживается standalone (Chef Solo) и серверная (Chef Client) версии.
  • Docker — модная в последнее время система, поддерживающая концепцию Immutable Server (о ней мы рассказывали в крайнем выпуске [16] подкаста Devops Deflope [17]).
  • Puppet — одна из наиболее распространенных систем управления конфигурацией. Поддерживается standalone и серверная версия.
  • Salt — система управления конфигурацией Salt Stack.

Дальше все крайне просто — вам нужен «эталонный» образ операционной системы. Можно сделать самому, это не так сложно, а можно взять готовый, например, на сайте VagrantBox.es [18]. Наш бокс для VirtualBox с Ubuntu 12.04 лежит здесь [19].

Если вы все же не любите готовых решений, то есть проекты, позволяющие автоматизировать создание базовых образов. Например, VeeWee [20] (вводная статья о нем на Хабре [21]) и Packer [22]. Последний сделан Митчелом Хашимото, автором вагранта. К сожалению, русскоязычных обзоров его нету, но мы обязательно напишем о нем в одной из ближайших статей.

Важно отметить, что эталонный образ ОС имеет смысл использовать одинаковый для всех ваших окружений — от девелоперского до боевого.

После этого вы собираете все вместе с помощью 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.

Здесь статью можно было бы закончить, но, помимо всего прочего, к вагранту существует множество плагинов, которые расширяют и дополняют его функциональность. Список наиболее известных плагинов [23] есть в вики вагранта. Вот наиболее интересные из них, на мой взгляд.

  • Vagrant-cachier [24] — кэширует запросы к репозитариям различных менеджеров пакетов (deb, rpm), что позволяет поднимать машинки гораздо быстрее.
  • Vagrant-librarian-chef [25] — интеграция вагранта и librarian-chef [26]. Более подробно прочитать о том, зачем нужен librarian-chef можно в нашей статье [27].
  • Vagrant-berkshelf [28] — интеграция вагранта и Berkshelf (аналог librarian-chef).
  • Sahara [29] — этот плагин позволяет делать «срезы» вашей виртуальной машины, чтобы можно было легко откатиться назад.

Вагрант помогает повторяемым образом подготавливать окружение ваших проектов. Вагрант позволяет начинать интеграцию с самой ранней стадии — со стадии разработки. Я глубоко убежден, что только так и можно «готовить» инфраструктуру. Но сейчас мало кто так готовит. А «Экспресс 42» готовит именно так.

Автор: evtuhovich

Источник [30]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/virtualizatsiya/51226

Ссылки в тексте:

[1] Vagrant: http://www.vagrantup.com/

[2] Development Environment при помощи Vagrant и Chef: http://habrahabr.ru/post/178797/

[3] Создание новой виртуальной машины за одну минуту или «vagrant up!»: http://habrahabr.ru/post/113354/

[4] следующие системы виртуализации: http://docs.vagrantup.com/v2/getting-started/providers.html

[5] Vagrant-lxc: https://github.com/fgrehm/vagrant-lxc

[6] LXC: http://linuxcontainers.org/

[7] Vagrant-libvirt: https://github.com/pradels/vagrant-libvirt

[8] libvirt: http://libvirt.org/

[9] Vagrant-kvm: https://github.com/adrahon/vagrant-kvm

[10] KVM: http://www.linux-kvm.org/page/Main_Page

[11] Vagrant-parallels: https://github.com/yshahin/vagrant-parallels

[12] Parallels: http://www.parallels.com/

[13] Экспресс 42: http://express42.com/

[14] здесь: https://s3-eu-west-1.amazonaws.com/express42-vagrant/ubuntu12.04-chef11-parallels.box

[15] системы настройки: http://docs.vagrantup.com/v2/provisioning/index.html

[16] крайнем выпуске: http://devopsdeflope.ru/posts/2013/003.html

[17] Devops Deflope: http://devopsdeflope.ru/

[18] VagrantBox.es: http://www.vagrantbox.es/

[19] здесь: https://s3-eu-west-1.amazonaws.com/express42-vagrant/ubuntu12.04-chef11.box

[20] VeeWee: https://github.com/jedi4ever/veewee

[21] вводная статья о нем на Хабре: http://habrahabr.ru/post/189160/

[22] Packer: http://packer.io/

[23] Список наиболее известных плагинов: https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins

[24] Vagrant-cachier: https://github.com/fgrehm/vagrant-cachier

[25] Vagrant-librarian-chef: https://github.com/jimmycuadra/vagrant-librarian-chef

[26] librarian-chef: https://github.com/applicationsonline/librarian-chef

[27] нашей статье: http://habrahabr.ru/company/express42/blog/182264/

[28] Vagrant-berkshelf: https://github.com/berkshelf/vagrant-berkshelf

[29] Sahara: https://github.com/jedi4ever/sahara

[30] Источник: http://habrahabr.ru/post/206768/