В этом руководстве мы рассмотрим, как использовать 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 [vagrant@cent-01 ~]$ 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 [vagrant@cent-01 ~]$
Чтобы выключить виртуальную машину, запустите:
$ 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…