Как использовать Vagrant с Libvirt в Linux

В этом руководстве мы рассмотрим, как использовать Vagrant с Libvirt в Linux. Vagrant — это программное обеспечение с открытым исходным кодом, написанное на Ruby, чтобы помочь вам создавать и поддерживать портативные виртуальные среды разработки программного обеспечения, например для VirtualBox, Hyper-V, контейнеров Docker, VMware, Libvirt и AWS. Vagrant упрощает создание, остановку и уничтожение виртуальных машин.

Самым популярным вариантом использования на локальных машинах является использование провайдера VirtualBox. Если вы являетесь пользователем KVM и QEMU, эта статья для вас. KVM, как известно, имеет лучшую производительность и меньшее использование ресурсов по сравнению с Virtualbox.

Vagrant с Libvirt в Linux — редварительные требования:

  • Установлен Vagrant
  • Установлены Libvirt и QEMU-KVM
  • Установка плагина libvirt для Vagrant

Установка плагина для Vagrant

После того, как вы установили Vagrant и KVM, вы должны быть готовы установить плагин libvirt, чтобы вы могли начать управлять виртуальными машинами KVM с помощью Vagrant.

Но сначала убедитесь, что установлен пакет разработки libvirt:

# CentOS/Fedora
$ sudo yum -y install libvirt-devel
$ sudo yum -y groupinstall "Development Tools"

Затем установите плагин Vagrant libvirt:

$ vagrant plugin install vagrant-libvirt
Installing the 'vagrant-libvirt' plugin. This can take a few minutes...
Building native extensions. This could take a while...
Building native extensions. This could take a while...
Installed the plugin 'vagrant-libvirt (0.0.45)'!

Если вы столкнулись с ошибкой, как показано ниже:

ERROR: Failed to build gem native extension.

current directory: /home/jmutai/.vagrant.d/gems/2.5.1/gems/nokogiri-1.8.4/ext/nokogiri
/usr/bin/ruby -r ./siteconf20180704-25314-14hvlbq.rb extconf.rb
checking if the C compiler accepts ... yes
Building nokogiri using system libraries.
pkg-config could not be used to find libxml-2.0
Please install either `pkg-config` or the pkg-config gem per
gem install pkg-config -v "~> 1.1"

Тогда запустите:

$ gem install nokogiri
$ vagrant plugin install pkg-config

И попробуйте установить плагин еще раз.

$ vagrant plugin install vagrant-libvirt

После завершения установки вы можете подтвердить, что плагин установлен, используя следующую команду:

$ vagrant plugin list
vagrant-libvirt (0.0.45)

Скачивание боксов Vagrant

Бокс Vagrant для Libvirt представляет собой tar-архив с 3 файлами в нем.

  • Базовый VagrantFile
  • Файл metadata.json
  • Образ в формате QCOW2

Если вы заинтересованы в создании собственных боксов Vagrant, взгляните на использование шаблонов сборки Packer и Packer для Vagrant в репозитории chef/bento на github. Это поможет вам легко начать работу.

В этом примере мы будем использовать готовый шаблон. Давайте добавим коробки CentOS 7 и CentOS 6.

$ vagrant box add centos/7 --provider=libvirt
==> box: Loading metadata for box 'centos/7'
box: URL: https://vagrantcloud.com/centos/7
==> box: Adding box 'centos/7' (v1902.01) for provider: libvirt

$ vagrant box add centos/8 --provider=libvirt

Добавьте Ubuntu 20.04 Vagrant box:

$ vagrant box add generic/ubuntu2004 --provider=libvirt

Проверьте список коробок, представленных на месте.

$ vagrant box list 
centos/7 (libvirt, 1902.01)
fedora/29-cloud-base (libvirt, 29.20181024.1)
generic/ubuntu1804 (libvirt, 1.9.8)

Создать Vagrantfile виртуальной машины

Vagrant нужен файл конфигурации для получения сведений и настроек создаваемой виртуальной машины. Создадим единый Vagrantfile виртуальной машины.

$ mkdir ~/vagrant-vms
$ cd ~/vagrant-vms

Создайте Vagrantfile с содержимым, аналогичным приведенному ниже:

# -*- mode: ruby -*-
# vi: set ft=ruby :

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'libvirt'


Vagrant.configure("2") do |config|

  ##### DEFINE VM #####
  config.vm.define "cent-01" do |config|
  config.vm.hostname = "cent-01"
  config.vm.box = "centos/7"
  config.vm.box_check_update = false
  config.vm.network "private_network", ip: "192.168.18.9"
  config.vm.provider :libvirt do |v|
    v.memory = 1024
    end
  end
end

Чтобы запустить виртуальную машину, запустите:

$ vagrant up
Bringing machine 'cent-01' up with 'libvirt' provider...
==> cent-01: Creating image (snapshot of base box volume).
==> cent-01: Creating domain with the following settings...
==> cent-01: -- Name: centos-01_cent-01
==> cent-01: -- Domain type: kvm
==> cent-01: -- Cpus: 1
==> cent-01: -- Feature: acpi
==> cent-01: -- Feature: apic
==> cent-01: -- Feature: pae
==> cent-01: -- Memory: 1024M
==> cent-01: -- Management MAC:
==> cent-01: -- Loader:
==> cent-01: -- Nvram:
==> cent-01: -- Base box: centos/7
==> cent-01: -- Storage pool: default
==> cent-01: -- Image: /var/lib/libvirt/images/centos-01_cent-01.img (41G)
==> cent-01: -- Volume Cache: default
==> cent-01: -- Kernel:
==> cent-01: -- Initrd:
==> cent-01: -- Graphics Type: vnc
==> cent-01: -- Graphics Port: -1
==> cent-01: -- Graphics IP: 127.0.0.1
==> cent-01: -- Graphics Password: Not defined
==> cent-01: -- Video Type: cirrus
==> cent-01: -- Video VRAM: 9216
==> cent-01: -- Sound Type:
==> cent-01: -- Keymap: en-us
==> cent-01: -- TPM Path:
==> cent-01: -- INPUT: type=mouse, bus=ps2
==> cent-01: Creating shared folders metadata...
==> cent-01: Starting domain.
==> cent-01: Waiting for domain to get an IP address...
==> cent-01: Waiting for SSH to become available...
cent-01:
cent-01: Vagrant insecure key detected. Vagrant will automatically replace
cent-01: this with a newly generated keypair for better security.
cent-01:
cent-01: Inserting generated public key within guest...
cent-01: Removing insecure key from the guest if it's present...
cent-01: Key inserted! Disconnecting and reconnecting using new SSH key...
==> cent-01: Setting hostname...
==> cent-01: Configuring and enabling network interfaces...
cent-01: SSH address: 192.168.121.159:22
cent-01: SSH username: vagrant
cent-01: SSH auth method: private key
==> cent-01: Rsyncing folder: /home/jmutai/hacks/vagrant/labs/centos-01/ => /vagrant

Vagrant создаст мост Linux в хост-системе.

$ brctl show virbr1
bridge name	bridge id		STP enabled	interfaces
virbr1		8000.5254005351c7	yes		virbr1-nic
							vnet0

$ ip addr show dev virbr1
8: virbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:54:00:53:51:c7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.121.1/24 brd 192.168.121.255 scope global virbr1
       valid_lft forever preferred_lft forever

Запустите  virsh list,  чтобы увидеть, получите ли вы список виртуальных машин.

$ virsh list
Id Name State
-----------------------------------
3 centos-01_cent-01 running

Чтобы подключиться к виртуальной машине по ssh, используйте  команду vagrant ssh.

$ vagrant ssh
Last login: Fri Apr 19 07:40:17 2019 from 192.168.121.1

[[email protected] ~]$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

Для вывода. ssh/config допустимый синтаксис для подключения к этой среде через ssh, запустите  команду ssh-config. Вам нужно будет поместить предоставленный вывод в каталог ~/.ssh/config в ssh.

$ vagrant ssh-config
Host cent-01
  HostName 192.168.121.159
  User vagrant
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/jmutai/hacks/vagrant/labs/centos-01/.vagrant/machines/cent-01/libvirt/private_key
  IdentitiesOnly yes
  LogLevel FATAL

Чтобы перенаправить вывод в файл конфигурации ssh, используйте:

vagrant ssh-config >>~/.ssh/config

Затем используйте команду ssh для входа в систему с указанным выше именем:

$ ssh cent-01
Last login: Fri Apr 19 07:40:42 2019 from 192.168.121.1
[[email protected] ~]$

Чтобы выключить виртуальную машину, запустите:

$ vagrant halt
==> cent-01: Halting domain…

Чтобы установить виртуальную машину в исходное состояние, очистив все данные, используйте  vagrant destroy:

$ vagrant destroy
cent-01: Are you sure you want to destroy the 'cent-01' VM? [y/N] y
==> cent-01: Removing domain…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.