Глава 5. Сетевая среда и система хранения
{Прим. пер.: рекомендуем сразу обращаться к нашему переводу полностью переработанного Ведрэном Дэйкинчем 2 издания, вышедшего в октябре 2020 Полного руководства Виртуализации KVM}
Содержание
- Глава 5. Сетевая среда и система хранения
- Настройка виртуальной сети
- Настройка виртуальной сети при помощи libvirt
- MacVTap
- Проброс PCI
- Это всё о хранилище!
- Работа с неуправляемым хранилищем
- Создание образа диска и подключение его к гостю
- Получение информации образа
- Подключение диска при помощи virt-manager
- Подключение диска при помощи virsh
- Работа с управляемым хранилищем
- Консоль управления хранилищем
- Создание пулов хранения
- Создание библиотеки образов ISO
- Удаление пула хранения
- Создание томов хранения
- Создание томов при помощи команды virsh
- Удаление тома при помощи команды virsh
- Выводы
В мире виртуализации сетевые среды и системы хранения могут быть помещены в две категроии:
-
Физическая: Инфраструктуры сети и хранения, которые строятся с помощью системы хоста для предоставления потребностей в сетях и хранении ваших виртуальных машин. В случае сетевых сред, она включает в себя компоненты 2 и 3 уровня вашей сетевой среды, программный мост, правила iptables и тому подобное. В случае системы хранения ,она содержит устройства хранения для предоставления хранилища гипервизору (SAN, iSCSI и тому подобные), LVM, различные файловые системы, NFS и так далее.
-
Виртуальная: Инфраструктура сети и хпранения, которая создаётся при помощи программного обеспечения виртуализации; она содержит как эмулируемую, так и паравиртуализированную сетевые среды и устройства хранения, создаваемые внутри вашей ВМ, а также виртуальные устройства, создаваемые в вашем хосте для предоставления сетевой связи и хранилищ вашим ВМ.
Когда вы представите свою виртуальную инфраструктуру в этих терминах, вам будет легче понять всю настройку. Такой подход также хорош, когда вы хотите найти неисправность своего окружения.
В данной главе мы собираемся обсудить настройку сетевой среды и системы хранения для виртуализации KVM. Мы охватим следующие темы:
-
Создание моста Linux
-
Что такое устройства TUN и TAP
-
Различные параметры связи доступные для создания пулов виртуального хранения ВМ KVM
Многие люди считают сложной настройку виртуальной сети в libvirt. Возможно, что существует ряд параметров, доступных лоя предоставления сетевых настроек виртуальной машины, которые делают сетевую настройку libvirt выглядящей сложной.
Главным компонентом стевой настройки libvirt является коммутатор виртуальной сети, также называемый мостом (bridge). Вы можете представлять себе мост как физический коммутатор. В реальном коммутаторе присутствует ограниченное количество физических портов для подключения ваших серверов. Здесь же, в мосту Linux, имеется в наличии неограниченное число виртуальных портов, к которым подключаются интерфейсы виртуальных машин. Аналогично физическому коммутатору, мост изучает MAC адреса из поступающих в него пакетов и сохраняет эти MAC адресав своей MAC таблице. Решения о транспортировке такого пакета (кадров) принимается на основании того MAC адреса, который был приобретён и сохранён в данной MAC таблице.
Мы упомянули о ваших интерфейсах, подключённых к портам моста. Эти интерфейсы являются особыми сетевыми устройствами, называемыми устройствами TAP. Если вы стараетесь представлять их в физических сетевых терминах, рассматривайте устройства TAP как сетевые кабели, которые переносят кадры Ethernet между виртуальной машиной и мостом. Такое устройство TAP является частью реализации TUN/ TAP, доступной в рамках вашего ядра Linux.
Замечание | |
---|---|
TUN, являющееся сокращением для "tunnel", эмулирует устройство сетевого уровня и работает на пакетов 3 уровня эталонной модели OSI, например, в качестве пакетов IP. TAP (а именно, network tap, сетевой отвод) эмулирует уровень соединения устройства и работает на уровне пакетов 2 уровня эталонной модели OSI, например, в качестве кадров Ethernet. TUN применяется для маршрутизации, а TAP используется при создании сетевого моста. |
Перед тем как мы перейдём к следующей теме, мы создадим мост и затем добавим к нему устройство TAP.
Убедитесь, что модуль моста загружен в ваше ядро. Если он не загружен, для загрузки данного
модуля воспользуйтесь modprobe bridge
:
# lsmod | grep bridge
bridge 114688 1 ebtable_broute
Для создания моста с именем tester
выполните следующую команду:
# brctl addbr tester
Замечание | |
---|---|
Команда |
Давайте убедимся что мост создан:
# brctl show
bridge name bridge id STP enabled interfaces
tester 8000.460a80dd627d no
Ваша команда # brctl show
отобразит перечень всех доступных на
вашем сервере мостов, сопровождаемый некоторой основной информацией, такой как идентификатор вашего моста,
состояние STP (Spanning
Tree Protocol), а также подключённых к нему интерфейсов. В нашем случае мост
tester
не имеет никаких подключённых к его виртуальным портам
интерфейсов.
Мост Linux также будет отображён в качестве сетевого устройства. Чтобы просмотреть подробности вашей
сетевой среды для конкретного моста tester
воспользуйтесь
командой ip
:
# ip link show tester
6: tester: <BROADCAST,MULTICAST>mtu 1500 qdiscnoop state DOWN mode
DEFAULT group default link/ether 26:84:f2:f8:09:e0 brdff:ff:ff:ff:ff:ff
Вы также можете применить для проверки и настройки сетевых установок моста Linux
ifconfig
; ifconfig
достаточно
просто читать и понимать, однако она не настолько богата свойствами, как команда
ip
:
tester: flags=4098<BROADCAST,MULTICAST>mtu 1500
ether26:84:f2:f8:09:e0txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Теперь наш мост Linux tester
готов. Давайте создадим и добавим к
нему устройство TAP.
Для начала убедимся, что модуль устройства TUN/ TAP загружен в ваше ядро. Если нет, вы уже знаете это упражнение:
# lsmod | greptun
tun 28672 1
Для создания устройства tap с именем vm-vnic
выполните следующую
команду:
# ip tuntap add dev vm-vnic mode tap
# ip link show vm-vnic
7: vm-vnic: <BROADCAST,MULTICAST>mtu 1500 qdiscnoop state DOWN
mode DEFAULT group default qlen 500 link/ether 46:0a:80:dd:62:7d
brdff:ff:ff:ff:ff:ff
Теперь в нашем распоряжении имеются мост с именем tester
и устройство tap с именем vm-vnic
. Давайте добавим
vm-vnic
к tester
.
# brctl addif tester vm-vnic
# brctl show
bridge name bridge id STP enabled interfaces
tester 8000.460a80dd627d no vm-vnic
Как вы можете видеть, vm-vnic
является интерфейсом,
добавленным к вашему мосту tester
. Теперь
vm-vnic
может выступать в роли интерфейса между вашей виртуальной
машиной и мостом tester
, который, в свою очередь, делает возможным
вашей виртуальной машине взаимодействовать с прочими добавленными к этому мосту виртуальными машинами:
Теперь самое время поразмыслить. Не расстраивайтесь, если не сможете ответить на следующие вопросы; чуть позже в данной главе мы ответим на них. Вопросы таковы:
-
Заметили ли вы какую- нибудь разницу в своих MAC адресах моста
tester
при добавлении вашего устройства TAPvm-vnic
? -
Можно ли назначить какой- либо IP адрес мосту? Если да, зачем вам это может понадобиться?
-
Попробуйте понять подробности происходящего при запуске команды
# brctlshowmacs tester
.
Теперь мы покажем вам как удалить всё то, что мы только что создали. Нам всё это не понадобится в оставшейся части данной главы.
Отключим tap устройство vm-vnic
от моста tester
:
# brctl delif tester vm-vnic
# brctl show tester
bridge name bridge id STP enabled interfaces
tester 8000.460a80dd627d no
Когда vm-vnic
отключено от нашего моста, удалим это tap устройство
при помощи команды ip
:
# ip tuntap del dev vm-vnic mode tap
Наконец, удалим мост tester
:
# brctl delbr tester; echo $?
0
Если вы желаете увидеть все доступные параметры, тогда выполните brctl
–help
:
# brctl --help
Usage: brctl [commands]
commands:
addbr <bridge> add bridge
delbr <bridge> delete bridge
addif <bridge><device> add interface to bridge
delif <bridge><device> delete interface from bridge
hairpin <bridge><port> {on|off} turn hairpin on/off
setageing <bridge><time> set ageing time
setbridgeprio <bridge><prio> set bridge priority
setfd <bridge><time> set bridge forward delay
sethello <bridge><time> set hello time
setmaxage <bridge><time> set max message age
setpathcost <bridge><port><cost> set path cost
setportprio <bridge><port><prio> set port priority
show [ <bridge> ] show a list of bridges
showmacs <bridge> show a list of mac addrs
showstp <bridge> show bridge stp info
stp <bridge> {on|off} turn stp on/off
Существуют такие же шаги, о которых заботится libvirt на вашем сервере включая и выключая сетевую среду для виртуальной машины. Мы хотим чтобы вы поняли эту процедуру перед тем как двинетесь далее.
В предыдущей главе мы ознакомили вас с некоторыми доступными возможностями виртуальных сетей libvirt. В этой главе вернёмся к ним вновь для получения более подробной информации.
Доступны следующие типы виртуальных сетей:
-
Изолированная виртуальная сеть
-
Виртуальная сеть с маршрутизацией
-
Виртуальная сеть с NAT
-
Виртуальная сеть с мостом, использующая физическую NIC, интерфейс VLAN, сцепленный (bond) интерфейс и сцепленный VLAN интерфейс
-
MacVTAP
-
Проброс (passtrough) NPIV через PCI
Помимо этого мы рассмотрим подробности включения DHCP и DNS для вашей виртуальной сети и виртуальную сетевую среду По умолчанию, которая поставляется предварительно настроенной посредством libvirt.
Перед началом, давайте вернёмся назад к Главе 3, обособленной виртуальной KVM и создадим ещё одну виртуальную машину Linux. Это потребует выполнения работы вручную.
Как на то указывает название, мы создаём закрытую сеть для свойе виртуальной машины. В данной настройке друг с другом смогут взаимодействовать только виртуальные машины, добавляемые в эту сетевую среду:
Как вы можете увидеть на предыдущем рисунке, для взаимодействия с данной виртуальной машиной сможет даже ваш хост, добавляемый к этой виртуальной сетевой среде.
Чтобы создать изолироавнную виртуальную сеть с помощью virt-manager, выполните следующие шаги:
-
Переместитесь в virt-manager | Edit | Connection details | Virtual Networks. Кликните на знак +.
-
В качестве имени виртуальной сети введите
isolated
:
-
Пропустите настройку адреса IPv4:
-
Запретите настройку адреса IPv6:
-
Выберите тоько Isolated virtual network и оставьте пустым DNS Domain Name . Кликните по Finish для завершения создания вашей изолированной сети:
-
Проверьте подробности данной изолированной виртуальной сети:
Теперь мы создадим свою виртуальную сеть при помощи команды virsh
.
Для этого нам нужно создать файл XML со следующим содержимым и сохранить его как
isolated.xml
:
# cat isolated.xml
<network> <name>isolated</name>
</network>
Здесь:
-
<network>
: используется для определения вашей виртуальной сети -
: применяется для именования этой виртуальной сети. в Данном случае это<name>
isolated
.
Чтобы определить сетевую среду при помощи созданного в предыдущем разделе файла XML, примените параметр
команды virsh
net-define
с
последующим путём к этому файлу XML:
# virsh net-define isolated.xml
Network isolated defined from isolated.xml
Когда данная сеть определена вы можете вывести перечень всех доступных сетей при помощи команды
net-list
:
# virsh net-list --all
Name State Autostart Persistent
--------------------------------------------------------------
default active yes yes
isolated inactive no yes
Из предыдущего вывода вы можете увидеть, что ваш мост Linux с именем isolated
теперь определён (добавлен/ создан). Давайте рассмотрим файл XML libvirt
,
создаваемый на основе данной конфигурации, которую мы выполнили пр и помощи
isolated.xml
. Воспользуйтесь параметром
net-dumpxml
, как это показано в следующей команде, для получения
подробностей о вашем мосте Linux:
# virsh net-dumpxml isolated
<network>
<name>isolated</name>
<uuid>84147b7d-a95f-4bc2-a4d9-80baab391a18</uuid>
<bridge name='virbr1' stp='on' delay='0'/>
<mac address='52:54:00:0e:c2:b5'/>
</network>
Здесь мы можем увидеть, что libvirt добавила некоторые дополнительные параметры. Каждый из них объясняется следующими пунктами:
-
<uuid>
: уникальный идентификатор вашего моста. -
Code
: Применяется для определения деталей данного моста. В нашем случае именем моста являетсяvirbr1
с STP ON и DELAY 0. Существуют те же самые параметры, которыми вы можете управлять при помощи командыbrctl
. STP устанавливается при помощиstp
, а DELAY посредствомsetfd
. Вернитесь назад и проверьте параметры командыbrctl
. -
<mac>
: Это MAC адрес вашего моста, который будет назначен во время его создания.
Как вы можете убедиться, libvirt добавляет оставшиеся необходимые параметры; при необходимости вы можете отметить их в своём файле XML. Наша рекомендация состоит в том, чтобы вы оставляли их не заполненными во избежание конфликтов.
Совет | |
---|---|
|
Когда вы определяете сетевую среду с применением net-define
, ваш
файл настройки будет сохранён в /etc/libvirt/qemu/networks/
в виде файла XML с тем же самым именем, что и у вашей виртуальной сети:
# cat /etc/libvirt/qemu/networks/isolated.xml
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made
using:
virsh net-edit isolated
or other application using the libvirt API.
<network>
<name>isolated</name>
<uuid>84147b7d-a95f-4bc2-a4d9-80baab391a18</uuid>
<bridge name='virbr1' stp='on' delay='0'/>
<mac address='52:54:00:0e:c2:b5'/>
</network>
Изолированная виртуальная сеть теперь определена. Давайте активируем её. В virt-manager
(Рисунок 8) используйте кнопки воспроизведения
и останова после выбора изолированной виртуальной сети. Кнопка, отображающая красный круг с
x
посередине применяется для отмены определения вашей сетевой среды.
Отмена определения виртуальной сети удалит её на постоянной основе:
Совет | |
---|---|
Если вы хотите запускать свою виртуальную сеть автоматически при запуске службы libvirt, применяйте
Autostart. В случае использования
|
Давайте теперь активируем изолированную виртуальную сеть при помощи
virsh
. Если ваша виртуальная сеть уже активирована при помощи
virt-manager
, деактивируйте её перед этим при помощи кнопки
Stop:
# virsh net-start isolated
Network isolated started
# virsh net-list --all
Name State Autostart Persistent
--------------------------------------------------------
default active yes yes
isolated active no yes
Состояние изменено с inactive
на
active
. Теперь наша виртуальная сеть готова к использованию.
Как вы добавите какую- либо виртуальную карту сетевого интерфейса в виртуальную машину?
Чтобы применять предыдущую виртуальную сеть кликните правой кнопкой по своей виртуальной машине
Open | Virtual Hardware details (иконка лампочки)
| Add Hardware | Network. Выберите
isolated для
Network source; MAC адрес будет создан libvirt,
а Device model в виде
virtio. Кликните по
Finish. Не рекомендуются для промышленного
использования две другие модели устройств, e1000 (Intel)
и
rtl1839 (Realtek)
, так как они являются эмулируемыми устройствами
и не дают хорошую производительность. В основном они используются при установке наследуемых операционных
систем, которые не поддерживают устройства virtio. Для Linux вам необходимо применять ядро версии 2.6.25 или
старше, так как более старые версии ядер не поддерживают устройчства virtio.
В Windows вам необходимо устанавливать ваши драйверы virtio отдельно. Мы рассмотрим дополнительно virtio в нашей главе, посвящённой оптимизации виртуализации.
Виртуальная NIC virtio может быть добавлена в работающую виртуальную машину; она будет готова к использованию внутри вашей виртуальной машины немедленно.
Давайте добавим какую- нибудь виртуальную NIC в другую виртуальную машину. В нашей среде имя этой виртуальной
машины F22-02
.
Перед подключением второй NIC, мы получим подробности своей текущей виртуальной NIC, подключённой к
нашей виртуальной машинеF22-02
, воспользовавшись
domiflist
. Вывобд этой команды поможет ввам определить параметры для
подключения второй виртуальной NIC к вашей виртуальной машине:
# virsh domiflist F22-02
Interface Type Source Model MAC
--------------------------------------------------------------
vnet2 network default virtio 52:54:00:b0:50:98
Interface - Name of the tap interface attached to the bridge.
Source - Name of the virtual network.
Model - Virtual NIC model.
MAC - MAC address of the virtual NIC (not the MAC of vnet2).
Type - Type of device
Давайте подключим новый интерфейс к F22-02
:
# virsh attach-interface --domain F22-02 --source isolated --type network --model virtio --config --live
Interface attached successfully
# virsh domiflist F22-02
Interface Type Source Model MAC
------------------------------------------------------------------
vnet2 network default virtio 52:54:00:b0:50:98
vnet3 network isolated virtio 52:54:00:2b:0d:0c
Вы подключили виртуальный сетевой интерфейс с типом virtio
.
Этот интерфейс использует изолированную виртуальную сеть. В данной команде присутствуют два новых параметра,
которые не объясняют себя самостоятельно:
-
--config
: данный параметр выполняет изменения на постоянной основе для последующих запусков данной ВМ. -
--live
: уведомляет libvirt что вы подключаете данный NIC к работающей виртуальной машине. Если данная виртуальная машина не работает, удалите--live
.
Совет | |
---|---|
Если вы хотите подключить виртуальный сетевой интерфейс к своей виртуальной машине только временно,
просто воспользуйтесь |
Другой полезной опцией для некоторых целей является --mac
.
Она может использоваться для добавления индивидуального MAC адреса.
Теперь давайте проверим каким образом создан ваш мост для данного изолированного виртуального интерфейса и как этот интерфейс подключён.
Интерфейс моста, созданный для нашего изолированного виртуального интерфейса это
virbr1
. Как мы его найдём? Вспомните о нашей опции
net-dumpxml
.
Теперь вы знаете имя своего моста. Давайте посмотрим все интерфейсы, которые подключены к данному мосту:
# brctl show virbr1
bridge name bridge id STP enabled interfaces
virbr1 8000.5254000ec2b5 yes virbr1-nic
vnet1
vnet3
Интерфейс virbr1-nic
создаётся libvirt при запуске
virbr1
. Целью этого интерфейса является предоставление
непротиворечивого и надёжного MAC адреса мосту virbr1
. Данный
мост копирует MAC адрес первого интерфейса, который добавляется к нему, и
virbr1-nic
всегда является самым первым интерфейсом, добавляемым к нему
libvirt, причём он никогда не будет удалён вплоть до уничтожения данного моста.
vnet1
и vnet3
являются
вашими виртуальными сетевыми интерфейсами, добавляемыми к соответствующим ВМ.
Теперь вы можете назначить IP адреса этим только что добавленным интерфейсам и, в случае если ping будет вам доступен, что эти виртуальные машины добавлены в нашу изолированную сетевую среду. Мы покидаем данное ваше задание. Сможете ли вы осуществлять ping ваших виртуальных машин из гипервизора?
Теперь давайте удалим свой новый интерфейс, добавленный к нашей виртуальной машине
F22-02
при помощи virsh
. При
работе в промышленном окружении, будьте предельно внимательны при работе с опцией
--live
. Она может нарушить функционирование существующей сетевой среды.
# virsh detach-interface --domain F22-02 --type network --mac 52:54:00:2b:0d:0c
--config --live
Interface detached successfully
Несмотря на то, что предметом обсуждения были изолированные виртуальные сети, мы также рассмотрели и другие операции с виртуальной сетью и виртуальной NIC. Данные операции аналогичны для всех виртуальных сетей.
В режиме с маршрутизацией, наша виртуальная сеть присоединяется к физической сетевой среде при помощи IP маршрутов, определяемых её гипервизором. Эти IP маршруты применяются для маршрутизации обмена между виртуальными машинами и вашей сетевой средой, подключённой к общему гипервизору. Ключевым моментом, который в этом случае вам необходимо запомнить при данных настройках является то, что вам также необходимо установить верный IP маршрут к вашим устройствам маршрутизации или шлюза, так как ответный пакет должен возвращаться назад в ваш гипервизор. Если никакие маршруты не определены, ответный пакет никогда не достигнет данного хоста. Этот режим является наиболее применимым, пока вам не потребуются особые варианты использования сетевой среды с такой сложностью. Следующий рисунок отображает как сетевая среда работает в реальном мире:
Давайте сначала выполним эту настройку воспользовавшись virt-manager. Именем нашей виртуальной сети
является routed
, как это отображено на снимке экрана внизу:
Включите только IPv4. Запретите DHCP
и Static Routes. В нашем случае в качестве
сетевой среды мы используем 192.168.10.0/24
. libvirt автоматически
назначает шлюз для такой сетевой среды. Обычно его стараются указывать первым IP в вашем диапазоне IP,
192.168.10.1
, и он назначается интерфейсом вашего моста. На шаге 2
вашего мастера Create virtual network
пометьте галочкой Enable IPv4 network address space
definition и Enable DHCPv4.
Диапазон DHCP по умолчанию 192.168.100.128 – 192.168.100.254
;
вы вольны изменить его для своих нужд:
После определения диапазона DHCP кликните по кнопке Forward. На шаге 3 вы можете в качестве необязательного действия сделать доступными настройки IPv6:
Мы собираемся пропустить 3 шаг, который состоит в настройке IPv6. Вы можете включить её позже, изменив
свой файл настройки, воспользовавшись командой virsh
. Мы выполняем
простую настройку для проверки вами. Если это необходимо, вы можете включить её уже на данном этапе. Мы
оставляем это на ваш выбор.
На заключительном этапе выберите интерфейс хоста, на который вы хотите направлять весь обмен
(для нас это em1
) из данной виртуальной сети и выберите
Routed в качестве
Mode (режима). Для создания данной
виртуальной сети кликните Finish:
Тееперь давайте создадим те же настройки воспользовавшись virsh
вместо графического инструмента. Удалите только что созданную виртуальную сеть с маршрутизацией и откройте
окно терминала.
Создайте файл настроек XML аналогичный приводимому ниже и сохраните его с именем
routed.xml
. Когда ваш файл настроек будет готов, вы можете приступить
к определению своей сетевой среды:
# cat routed.xml
<network>
>name>routed>/name>
>forward dev='em1' mode='route'>
>interface dev='em1'/>
>/forward>
>ip address='192.168.10.1' netmask='255.255.255.0'>
>/ip>
>/network>
# virsh net-define routed.xml
Сетевая маршрутизация определяется из routed.xml
# virsh net-start routed
Network routed started
# virsh auto-start routed
Сетевая маршрутизация помечена как запускаемая автоматически:
# virsh net-info routed
Name: routed
UUID: 9a1d8de7-5627-4f08-a3d1-836b7a5fe060
Active: yes
Persistent: yes
Autostart: yes
Bridge: virbr2
Изменение виртуальной сети
Давайте отредактируем виртуальную сеть с маршрутизацией и изменим настройки маршрутизации таким образом, чтобы ваши пакеты от виртуальных машин могли бы пересылаться в любой доступный на их хосте интерфейс на основе правил маршрутизации IP, определяемых этим хостом. Цель данного примера состоит в демонстрации того как изменять уже созданную виртуальную сеть вашими настройками.
Перед изменением конкретной виртуальной сети вам необходимо сначала остановить её:
# virsh net-destroy routed
Network routed destroyed
Измените свою сетевую среду воспользовавшись net-edit
:
# virsh net edit routed
net-edit
сделает временную копию вашего файла настроек используемых
routed
в /tmp
и затем откроет
vim
воспользовавшись этим временным файлом. В нашем случае мы собираемся
изменить тег <forward>
.
Старая конфигурация:
<forward dev='em1' mode='route'>
<interface dev='em1'/>
</forward>
Новая конфигурация:
<network>
<name>routed</name>
<uuid>9a1d8de7-5627-4f08-a3d1-836b7a5fe060</uuid>
<forward mode='route'/>
<bridge name='virbr2' stp='on' delay='0'>
<mac address='52:54:00:f1:cb:30'>
<ip address='192.168.10.1' netmask='255.255.255.0'>
</ip>
</network>
После внесения изменений сохраните его при помощи :wq
.
Если вы допустили ошибку, virsh
уведомит вас. В нашем случае мы
удалили <
в <forward>
и затем попытались сохранить такую настройку:
error: (network_definition):6: Opening and ending tag mismatch: network line 1 and forward
</forward>
-----------------^
Failed. Try again? [y,n,f,?]:
Network routed XML configuration edited.
Даже если вы не получите предупредительного сообщения, вам настоятельно рекомендуется проверить ваши
изменения настроек при помощи команды net-dumpxml
:
# virsh net-dumpxml routed
<network>
<name>routed</name>
<uuid>9a1d8de7-5627-4f08-a3d1-836b7a5fe060</uuid>
<forward mode='route'/>
<bridge name='virbr2' stp='on' delay='0'/>
<mac address='52:54:00:f1:cb:30'/>
<ip address='192.168.10.1' netmask='255.255.255.0'>
</ip>
</network>
Чтобы включить IPv6, вы можете добавить нечто подобное в предыдущие настройки. Адрес IPv6 предоставляется в качестве примера:
# virsh net-dumpxml routed
После проверки настроек запустите виртуальную сеть воспользовавшись net-start
,
как это показано в следующей команде:
# virsh net-start routed
Network "routed" started
Режим с NAT обычно применяется в виртуальных сетях когда вы хотите настроить тестовое окружение на своём ноутбуке или тестовой машине. Этот режим позволят виртуальным машинам взаимодействовать с внешней сетью без использования каких- либо дополнительных настроек. Данный метод также делает возможным взаимодействие между вашим гипервизором и его виртуальными машинами. Основной недостаток такой виртуальной среды состоит в том, что никакая система вне вашего гипервизора не сможет получить доступ к его виртуальным машинам.
Виртуальная сетевая среда создаётся при помощи iptables
, особым
образом применяя опции маскарадинга. Следовательно, останов iptables
при использовании ВМ может вызвать повреждение сетевой среды внутри таких виртуальных машин:
Давайте создадим некую виртуальную сеть в режиме NAT при помощи virt-manager. Этапы аналогичны виртуальной сети в маршрутизацией, однако вместо выбора метода маршрутизации вы выбираете NAT и щёлкаете по кнопке Finish:
Если вы не можете получить доступ к системе или выполнить к ней ping после нвастройки сети с NAT,
убедитесь что значение sysctl net.ipv4.ip_forward
равно
1
.
Виртуальная сеть с мостом использует физическую NIC, интерфейс VLAN, сцепленный (bond) интерфейс и сцепленный интерфейс VLAN (также называемый совместно используемым физическим интерфейсом).
В большинстве промышленных сред вы будете использовать настройку моста, который напрямую соединяет физическую NIC с этим мостом. Основная причина применения такой конфигурации состоит в том, чтобы ваша виртуальная машина работала как система, которая располагается в той же самой сетевой среде, в которой находится ваша физическая NIC. В отличие от режима с NAT, доступ к виртуальным машинам возможен напрямую с использованием их IP адреса, что существенно когда ваш хост обслуживает ваши виртуальные машины.
В нашей пробной настройке у нас в наличии доступно три интерфейса: eth0
,
eth1
и eth2
.
eth0
имеет уже назначенный IP и используемый в качестве интерфейса
управления. Интерфейс управления это интерфейс, используемый для доступа к машине хоста через SSH или
подобный метод с настроенным IP. Два других интерфейса, eth1
и
eth2
, выделены для настройки моста и не имеют IP настроек.
Обычный рабочий поток по созданию моста с совместно используемым физическим интерфейсом (интерфейсами) следующий:
-
Выполните настройку своих физических интерфейсов без каких- либо IP. Это включает в себя настройку VLAN, сцепления (bonding) и тому подобное.
-
Когда физические интерфейсы настроены, добавьте окончательный интерфейс в свой мост. Это может быть отдельный интерфейс (
eth1
), сцепленный интерфейс (bond0
), VLAN (eth1.121
илиbond0.121
) и тому подобное. -
Дополнительно, вы можете назначить некий IP именно своему мосту, а не физическому интерфейсу. Если у вас имеется интерфейс управления, всегда создавайте мост без IP, если это не является особым требованием.
Вашей первой задачей будет настроить мост с именем br0
при помощи
eth0
.
Fedora для своих сетевых настроек использует Network Manager и по умолчанию не допускает сетевых служб на основе SysVinit. В нашей наладке запретите Network Manager и включите свою сетевую службу. Поскольку это выделенный гипервизор, запретите Network Manager.
Создайте (или измените) файлы ifcfg-eth1
и
ifcfg-br0
с тем, чтобы они имели вид, аналогичный приводимому ниже.
Вы можете опустить часть, содержащую комментарии:
# cd /etc/sysconfig/network-scripts
# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
#Replace the following with your eth1 interface MAC address
HWADDR=52:54:00:32:56:aa
ONBOOT=yes
#Prevent Network Manager from managing this interface,eth1
NM_CONTROLLED=no
#Add this interface to bridge br0
BRIDGE=br0
# cat ifcfg-br0
DEVICE=br0
#Initiate bridge creation process for this interface br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=no
#Set the bridge forward delay to 0.
DELAY=0
Enable the network service and start it.
# systemctl enable network
# systemctl disable NetworkManager
# ifup br0; ifup eth1
# brctl show
Ваш мост br0
создан с интерфейсом
eth1
. Вы можете теперь начать использовать
br0
при создании сетевых интерфейсов ВМ. Мы предполагаем, что
у вас имеется более одной NIC в вашем хосте для создания виртуальных сетей. Если же у вас
имеется только один интерфейс, убедитесь что вы назначили IP адрес в файле настроек своего моста для
доступа хоста в сеть. Теперь мы создандим сцепление (bond0
)
воспользовавшись eth1
и
eth2
и добавив их в br0
:
# ifdown br0; ifdown eth1
# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
HWADDR=52:54:00:32:56:aa
ONBOOT=yes
NM_CONTROLLED=no
SLAVE=yes
MASTER=bond0
# cat ifcfg-eth2
DEVICE=eth2
TYPE=Ethernet
HWADDR=52:54:00:a6:02:51
ONBOOT=yes
NM_CONTROLLED=no
SLAVE=yes
MASTER=bond0
# cat ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
# Here we are using bonding mode 1 (active-backup)
BONDING_OPTS='mode=1 miimon=100'
BRIDGE=br0
NM_CONTROLLED=no
# ifup bond0
# brctl show
Наш мост br0
теперь создан при помощи интерфейса
bond0
. Следующая схема объясняет текущие настройки:
Совет | |
---|---|
Использование режима сцепления один (active-backup, активный- резервный) и четыре (802.3ad) рассматриваются как надёжные при их применении в вашем мосте. |
Теперь мы изменим ifcfg-bond0
так, чтобы он создал тегированную
VLAN с именем bond0.123
и добавил бы её в наш мост
br0
:
# ifdown bond0; ifdown br0
# cp ifcfg-bond0 ifcfg-bond0.123
# cat ifcfg-bond0.123
DEVICE=bond0.123
ONBOOT=yes
BONDING_OPTS='mode=1 miimon=100'
BRIDGE=br0
NM_CONTROLLED=no
VLAN=yes
Теперь изменим ifcfg-bond0
и уберём комментарий с
BRIDGE=bro
(#BRIDGE=br0
):
# ifup bond0.123
Совет | |
---|---|
Если бы вы захотели настроить индивидуальный MTU, добавьте MTU во все файлы настройки, включая ваш мост. Тот же самый MTU должен быть также добавлен внутри настроек интерфейса виртуальной машины. |
MacVTap применяется тогда, когда вы не хотите создавать нормальный мост, однако желаете, чтобы пользователи в локальной сети имели доступ к вашей виртуальной машине. Такой тип соединения не применяется в промышленных системах и в основном используется в системах рабочих станций.
Для добавления виртуальной NIC в качестве интерфейса MacVTap при помощи virt-manager переместитесь в Add Hardware | Network. В Network source выберите физический интерфейс NIC в своём хосте, в котором вы собираетесь сделать доступным MacVTap:
Ниже приведены соответствующие настройки в вашей ВМ:
<interface type='direct'>
<mac address='52:54:00:7b:4b:8c'/>
<source dev='enp0s25' mode='bridge'/>
<model type='virtio'/>
Проброс (passthrough) PCI используется для передачи устройств PCI вашего хоста виртуальной машине. В первую очередь это используется для прямого использования сетевых интерфейсов в вашем хосте виртуальной машиной для увеличения производительности. {Прим. пер.: готовы поспорить: в нашей практике, в основном, применяется для выделения виртуальным машинам вычислительных ресурсов, в первую очередь GPU. Ещё больший интерес вызывает представленная в августе 2016 поддержка посреднических устройств (mediated device) и интеграция vGPU в libvirt: An Introduction to PCI Device Assignment with VFIO - Alex Williamson, Red Hat; Add Mediated device support [Qemu-devel] [PATCH v7 0/4]; libvirt vGPU QEMU integration [libvirt] [RFC]; vGPU on KVM VFIO based Mediated Device Framework, Neo Jia & Kirti Wankhede, 08/25/2016.}
Чтобы сделать доступным проброс PCI вы должны применить следующие шаги:
-
В своём BIOS {Прим. пер.: правильнее FirmWare} и ядре включить поддержку Intel VT-d или AMD IOMMU {,для этого в редакторе}:
# vi /etc/sysconfig/grub
-
Изменить
GRUB_CMDLINE_LINUX=
, добавивintel_iommu=on
илиamd_iommu=on
:
-
Перестроить файл настройки вашего gub2 следующим образом и выполнить перезагрузку своего гипервизора:
# grub2-mkconfig -o /boot/grub2/grub.cfg
-
Переместиться в Hardware | PCI Host Device и выбрать устройство PCI для проброса:
Аналогично инфраструктуре виртуальной сети, нам необходимы сервера хранения для создания и сохранения наших виртуальных дисков. Существует параметр выбора широко разнообразия решений хранения, это сервера для виртуальных машин от обычных хранилищ на основе фалов хранилищ управляющих логическими томами (LVM), контейнеров Gluster и многого другого. Сервера хранения создаются и управляются с применением API хранения libvirt и называются "пулом хранения" ("storage pool")
В данном разделе вы изучите то, как работать с неуправляемыми и управляемыми хранилищами. Вы также увидите как создавать пулы и тома хранения, в том числе некоторые новые опции, такие как блочное хранилище Ceph, которое делает возможным для нас создание виртуальных дисков с действительно большими размерами и подключать их к виртуальной машине. Вы также изучите как подключать множество дисков к отдельной ВМ.
Хранилище, которое напрямую не управляется и не мониторится libvirt, всё ещё применяется виртуальными машинами и называется неуправляемым хранилищем. Это означает, что вы можете напрямую использовать файлы или блочные устройства, которые доступны/ видны в вашей хост системе как виртуальный диск, а также предоставляют соответствующим образом установленные полномочия. Это даёт вам самый быстрый способ получать хранилище, доступное виртуальным машинам. Такой подход, в частности, полезен при добавлении дополнительного диска какой- либо виртуальной машине.
Вы можете подключить сетевые совместно используемые диски к своей виртуальной машине и взять резервную копию, или давайте рассмотрим пример, при котором вы заметили, что основной корневой раздел (LVM) вашей виртуальной машины становится заполненным и ваша гостевая система выдаёт кричащие предупреждения. Это приведёт к крушению, если корневая файловая система не будет расширена.
Это неотложная ситуация; чтобы оградить гостевую операционную систему от крушения, вам либо необходимо освободить некоторое пространство, либо расширить свою корневую файловую систему добавив дополнительный диск к своей виртуальной машине; однако, вы отмечаете, что для создания дополнительного диска отсутствует какое- либо свободное пространство в вашем пуле хранения по умолчанию. Однако, свободное пространство имеется в наличии в машине вашего хоста.
Вы можете воспользоваться этим свободным пространством в вашей машине хоста для создания образа диска и последующего подключения этого образа в качестве vDisk к вашей виртуальной машине для выполнения изменения размера в своей корненвой файловой системе данной ВМ. Это должно уберечь такую виртуальную машину от краха.
Дисковые образы являются стандартными файлами, хранимыми в файловой системе вашего хоста. Они являются
большими работающими в качестве виртуальных жёстких дисков для гостей. Вы можете создать такие файлы
применив команду dd
, как показано ниже:
# dd if=/dev/zero of=/vms/dbvm_disk2.img bs=1G count=10
Вот перевод данной команды для вас:
Дублировать данные (dd
) из входного файла
(if
) /dev/zero
(виртуальной неограниченной поддержки нулями) в файл вывода (of
)
/vms/dbvm_disk2.img
(дисковый образ) с использованием блоков
с размером в 1G
(bs = block size
)
и повторить это (count
) по одному
(10
) раз.
Замечание | |
---|---|
|
/vms/dbvm_disk2.img
будет результатом предыдущей команды. Этот образ
теперь имеет предварительно выделенными 10ГБ и готов к использованию гостями либо в качестве загрузочного, либо
как дополнительного диска. Аналогично, вы также можете создавать образы диска с динамичным выделением
(thin-provisioned). Предварительное выделение и динамичное выделение (разрежение) являются методами выделения
дискового пространства, или же вы можете называть их форматом. Каждый из них имеет свои преимущества и
недостатки. Если вам нужен производительный ввод/ вывод, примените предварительное выделение, однако если
ваши нагрузки не обладают интенсивным вводом/ выводом, выбирайте динамичное выделение.
-
Предварительное выделение (Preallocated): Виртуальный диск с предварительным выделением получает всё своё пространство непосредственно при создании. Виртуальный диск с форматом предварительного выделения имеет значительно более быструю запись чем виртуальный диск с динамичным выделением. {Прим. пер.: Поскольку на текущий момент мы не определили природу используемых хранилищ, важно помнить о факторе места и времени: во- первых (место), в качестве носителя могут выступать устройства с интерфейсом NVMe (см. обзор NVMe в ZFS для профессионалов и имеющиеся на рынке решения, например, Сервера Huawei с поддержкой NVMe) во- вторых (время), динамичное выделение может выполняться на уровне самой файловой системы, см., например, Резервирование пространства в ZFS.}
-
Динамичное выделение (Thin-Provisioned): в этом методе пространство будет выделяться для ваших томов по необходимости. Например, если вы создаёте виртуальный диск (образ диска) с размером ,
10ГБ
с разреженным выделением, в начале он может быть размером в пару МБ пространства вашего хранилища и расти по мере получения записей с виртуальной машины до размера в ,10ГБ
. Это делает возможным пренебрегать фиксацией в предположении о наличии места на диске. Чтобы создать диск с динамичным выделением, примените опцию ,seek
в команде ,dd
, как это сделано в следующем примере:# dd if=/dev/zero of=/vms/dbvm_disk2_seek.imgbs=1G seek=10 count=0
Теперь вы можете заинтересоваться тем, как можно идентифицировать какой конкретно метод использует
определённый виртуальный диск. Существует хорошая утилита для обнаружения этого,
qemu-img
. Данная команда позволит вам прочитать метаданные виртуального образа. Она
также поддерживает создание нового диска и выполняет преобразования формата на низком уровне.
Параметр команды qemu-img
info
отображает информацию об образе диска,
включая его абсолютный путь, формат файла, а также виртуальный размер и размер диска. Посмотрев на виртуальный
и дисковый размеры легко можно определить какая политика выделения пространства диску применяется. В качестве
примера давайте рассмотрим два созданных нами дисковых образа:
# qemu-img info /vms/dbvm_disk2.img
image: /vms/dbvm_disk2.img
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 10G
#qemu-img info /vms/dbvm_disk2_seek.img
image: /vms/dbvm_disk2_seek.img
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 10M
Посмотрим на дисковый размер обоих дисков. Он отображает 10G
для
/vms/dbvm_disk2.img
, в то время как для /vms/dbvm_disk2_seek.img
он составляет 10M
. Происхождение разницы в том, что второй диск применяет формат
динамичного выделения. virtual size
это то, что видят гости, в то время как
disk size
это объём диска, зарезервированный в вашем хосте. Если оба размера одинаковы,
это означает, что такой диск является предварительно размещённым. Разница означает что данный диск
использует формат динамичного выделения.
Теперь давайте присоединим образ диска к виртуальной машине; вы можете присоединить его с помощью
virt-manager или же альтернативой является CLI virsh
.
Запустите virt-manager из графического окружения рабочего стола системы вашего хоста. Он также может быть запущен удалённо с использованием SSH, как это демонстрируется следующей командой:
ssh -X host's address
[remotehost]# virt-manager
-
В главном меню Virtual Machine Manager выберите виртуальную машину, к которой вы хотите добавить дополнительный диск.
-
Перейдите в окно подробностей виртуального оборудования и кликните по кнопке Add Hardware, расположенной в нижней левой части текущего блока диалога.
-
В Add New Virtual Hardware выберите объём компоненты Storage для другого хранилища:
-
Выберите Select Managed or other existing storage и отыщите и укажите файл
dbvm_disk2.img
в своём каталоге/vms
или напрямую введите имя пути и имя, а после этого кликните по Finish. -
Замечание В нашем случае мы применяем образ диска, однако вы вольны использовать любое устройство хранения которое имеется в системе вашего хоста, такие как LUN, физический диск целиком (
/dev/sdb
) или раздел диска (/dev/sdb1
), а также логический том LVM.Кликнув по кнопке Finish вы подключите выбранный образ диска (файл) в качестве второго диска для вашей виртуальной машины с применением настроек по умолчанию. Те же самые действия могут быть быстро выполнены с применением команды
virsh
.
virsh
является очень мощной альтернативой командной строки
для virt-manager. Вы можете выполнять действия за секунды, в то время как это займёт минуты для выполнения
через графический интерфейс подобный virt-manager. Она предоставляет опцию attach-disk
для подключения нового дискового устройства к виртуальной машине. Существует множество переключателей
поставляемых attach-disk
:
attach-disk domain source target [[[--live] [--config] | [--current]] |
[--persistent]] [--targetbusbus] [--driver driver] [--subdriversubdriver]
[--iothreadiothread] [--cache cache] [--type type] [--mode mode]
[--sourcetypesourcetype] [--serial serial] [--wwnwwn] [--rawio]
[--address address] [--multifunction] [--print-xml]
Однако в обычном сценарии вполне достаточно следующего для выполнения подключения в горячем режиме диска к виртуальной машине:
#virsh attach-disk F22-01 /vms/dbvm_disk2.img vdb --live --config
Здесь F22-01
это виртуальная машина к которой выполняется
подключение диска. Затем идёт полный путь образа диска. vdb
является целевым именем диска, которое будет видно в вашей гостевой операционной системе.
--live
означает выполнение действия в процессе работы машины, а
--config
означает подключение на постоянной основе при перезагрузках.
Если вы хотите подключать данный диск только до перезагрузки, не добавляйте переключатель
--config
.
Замечание | |
---|---|
Поддержка подключения в горячем режиме (HotPluggingSupport): в гостевой операционной системе Linux должен быть загружен модуль ядра "acpiphp" для распознавания добавляемых по-горячему дисков; "acpiphp" предоставляет наследуемую поддержку подключения в горячем режиме, в то время как "pciehp" предоставляет встроенную поддержку горячего подключения. "pciehp" зависит от "acpiphp". Загрузка "acpiphp" автоматически выполнит и загрузку "pciehp" как зависимую. |
Для быстрого определения общего числа подключённых к виртуальной машине дисков вы можете применять
команду virsh domblklist <vm_name>
. Вот пример её использования:
# virsh domblklist F22-01 --details
Type Device Target Source
------------------------------------------------
file disk vda /var/lib/libvirt/images/fedora21.qcow2
file disk vdb /vms/dbvm_disk2_seek.img
Это ясно отображает, что к вашей виртуальной машине подключены два vDisk, причём оба являются
файловыми образами. Они видны в вашей гостевой ОС под псевдонимами vda
и vdb
соответственно, а в последней колонке представлены пути
дисковых образов в вашей системе хоста.
libvirt поддерживает следующие типы пулов хранения:
-
-dir
: использует каталог файловой системы для хранения виртуальных дисков -
-disk
: применяет физические жёсткие диски для создания виртуальных дисков -
-fs
: использует предварительно отформатированные разделы для хранения виртуальных дисков -
-netfs
: применяет совместно используемые сетевые хранилища, например, NFS, для хранения виртуальных дисков -
-gluster
: позволяет применять файловую систему Gluster для хранения виртуальных дисков -
-iscsi
: применяет совместно используемые сетевые хранилища iSCSI для хранения виртуальных дисков -
-scsi
: использует локальные хранилища SCSI для хранения виртуальных дисков -
-lvm
: для хранения виртуальных дисков полагается на группы томов LVM -
-rbd
: позволяет присоединять для виртуальных дисков хранилище Ceph
Подробный охват всех этих типов пулов хранения не возможен в данной главе, да и не требуется, в качестве шагов по созданию пула хранения, все они идентичны; вам только нужно иметь понимание основ вашего выбора поставщика хранения. Вот некоторые из самых важных и широко применяемых пулов хранения, которые мы собираемся рассмотреть в данной главе:
-
Каталог файловой системы (локальный)
-
Группа томов LVM (локальная)
-
Пул хранения NFS
-
Сервер iSCSI (совместно используемый)
-
{Прим. пер.: см. также Глава 2. Работа с блочными устройствами Ceph перевода Ceph Cookbook}
-
{Прим. пер.: см. также iSCSI и Тома ZFS перевода ZFS для профессионалов.}
Замечание | |
---|---|
Хранилище, которое управляется и мониторится libvirt в терминах пулов хранения и томов хранения здесь называется управляемым хранилищем. Пул является общим контейнером для различных объектов хранилищ. Существуют определённые типы пулов хранения. Начиная с простого локального каталога до современных совместно используемых хранилищ наподобие томов хранения Ceph все они являются частями пула хранения и они действительно являются виртуальными дисками используемыми виртуальными машинами. |
Менеджер виртуальной машины (virt-manager) предоставляет очень продвинутый, но всё ещё простой в применении интерфейс для настройки и управления пулами хранения. Для доступа к этой консоли:
-
Откройте графический интерфейс virt-manager.
-
Затем перейдите в меню Edit и выберите Connection Details. Кликните по закладке Storage в окне Connection Details:
Все пулы хранения перечисляются в колонке слева, а в правой панели вы получаете обзор выбранного пула, который содержит следующую информацию:
-
Name: имя пула хранения
-
Size: сообщает об объёмах свободного и используемого пространств
-
Location: путь вашего сервера хранения, в котором в действительности хранятся данные vDisk
-
State: сообщает нам о состоянии пула; является ли он активным или приостановленным (suspended)
-
Autostart: когда этот пункт помечен, данное хранилище будет запускаться при загрузке системы, в противном случае для запуска этого пула требуется вмешательство вручную
-
Volumes: это список всех виртуальных дисков (томов), присутствующих в данном пуле, включая их имя, размер, а также средства создания новых томов. Присутствуют три кнопки. Кнопка со знаком "плюс" обозначает добавление нового тома, кнопка с символом "закрученной стрелки" обозначает обновление данных, а последняя предназначена для удаления, которое представляется "красным кружочком".
По умолчанию libvirt создаёт пул хранения каталога сервера (directory) с именем default
Также вы можете воспользоваться командой virsh
для вывода списка всех
доступных в вашей системе пулов:
[root@Fedora22]# virsh pool-list
Name State Autostart
-------------------------------------------
default active yes
Для получения более подробной информации об определённых доменах примените:
root@Fedora22 ~]# virsh pool-info default
Name: default
UUID: 3efb9c2b-2fa8-41cd-9e9e-de2eafa3b4a5
State: running
Persistent: yes
Autostart: yes
Capacity: 26.00 GiB
Allocation: 4.00 GiB
Available: 23.00 GiB
Последние три параметра отображают реальное использование вашего пула. Вы можете увидеть что из общего объёма в 26ГБ 4ГБ было задействовано (выделено), а 23ГБ доступно к использованию.
Пулы хранения могут быть созданы при помощи virt-manager
или
посредством альтернативы CLI, virsh
. Вначале мы рассмотрим как
создавать различные типы пулов хранения используя консоль управления хранилищем, а после этого применим
virsh
. Файл определения каждого пула хранения сохраняется в
/etc/libvirt/storage
. Убедитесь что он не изменялся вручную и
не удалён.
Каталог файловой системы, поддерживаемый пулом хранения
Хранилище в каталоге сервера более известен под именем хранилища на основе файла. В случае хранилища на базе файла для ВМ совместно используемые диски хранятся и управляются в рамках стандартного каталога, создаваемого в вашей машине хоста (или узла). Проще говоря, вы создаёте каталог в вашей системе хоста и назначаете его в качестве управляемого места для хранения виртуальных дисков.
Создаваемые в этом каталоге фпйлы выступают в роли виртуальных дисков и он может быть полностью заполнен файлами raw, файлами с разреженными исходными (raw) данными или qcow2, имеющими специальный дисковый формат.
Для создания пула откройте графический интерфейс менеджера виртуальных машин и проследуйте по этапам:
-
Перейдите в закладку Storage окна вашего virt-manager Connection Details.
-
Запустите мастер Add a New Storage Pool кликнув по кнопке + (размещённой в нижнем левом углу).
-
Введите в качестве имени и типа набора
dir:Filesystem Directory
и затем кликните кнопку Forward. -
Следующий шаг имеет различные параметры настройки в зависимости от выбранного типа хранилища. Для каталогов файловой системы просто введите Target Path и вы всё сделали. В блоке диалога Target Path введите путь каталога в котором вы собираетесь хранить виртуальные диски и нажмите кнопку Finish и ваш пул хранения на основе каталога готов:
Полномочиями на каталог должен обладать пользователь root с правами установленными в значение
700
. Если SELinux находится в режиме принуждения (enforced)
необходимо установить следующий контекст:
# semanage fcontext -a -t virt_image_t "/vms(/.*)?"
Пулы хранения на основе каталога могут занимать всё доступное место в своём местоположении. Вы должны сохранять этот каталог в его собственном разделе чтобы не переполнить главный раздел хоста.
virsh
делает жизнь более простой; после выполнения всего трёх
команд ваш пул хранения будет готов к применению. Вот эти команды:
#virsh pool-define-as dedicated_storagedir dir - - - - "/vms"
#virsh pool-build dedicated_storage
#virsh pool-start dedicated_storage
Самая первая команда просто определяет область вашего хранения. Она создаёт файл определений XML
из ввода, расположенного в /etc/libvirt/storage/directory
,
а вторя команда (pool-build
) в действительности
строит ваш пул хранения. Она создаёт ваш каталог если он не существовал и устанавливает верный
контекст SLinux. Чтобы убедиться что пул хранения создан правильно выполните:
#virsh pool-list --all
Name State Autostart
-------------------------------------------
dedicated_storage inactive no
default active yes
Отметим, что данный пул создан, однако находится в неактивном состоянии. Для его активации и установки автоматического запуска выполните следующее:
#virsh pool-start dedicated_storage
#virsh pool-autostart dedicated_storage
#virsh pool-list
Name State Autostart
-------------------------------------------
dedicated_storage active yes
default active yes
Группа томов LVM, поддерживаемый пулом хранения
Менеджер логических томов является наиболее гибкой и широко используемой технологией хранения в Linux. Вы можете применять логические тома LVM в качестве виртуальных дисков. Просто введите предварительно определённое имя группы томов LVM (путь) или постройте новую группу томов применив мастер Add a New Storage Pool:
-
Target Path является местоположением существующей группы томов LVM
-
Source Path является необязательным устройством для построения новой группы томов LVM
Например, давайте предположим, что у вас имеются диски sdb
и
sdc
, подключённые к вашей машине хоста; вы хотите преобразовать их в
единый физический том и создать группу томов из них для предоставления пространства всем своим дискам
виртуальных машин.
Для удовлетворения этих требований у вас нет необходимости пройти обычным путём pvcreate,
vgcreate
вместо предложенного. Протсо откройте свой мастер Add a New Storage Pool, снабдите его sdb
и sdc
в качестве устройств источников, отметьте флаговую кнопку
Build Pool и нажмите на кнопку
Finish.
Окошко метки Build Pool проинструктирует
virt-manager о необходимости создать новую группу томов LVM. Он преобразует устройства sdb
и sdc
в физический том, а также создаст новую группу томов LVM
поверх них и использует их в качестве пула хранения.
Чтобы создать пул хранения сервера LVM при помощи virsh
,
примените те же самые опции pool-define-as
и
pool-build
:
virsh pool-define-as lvmpool logical - - /dev/sdb2 vg1 /dev/vg1
virsh pool-build lvmpool
virsh pool-start lvmpool ; virsh pool-autostart dedicated_storage
Здесь:
-
lvmpool
является именем вашего пула хранения -
/dev/vdb1
используется в качестве физического тома для построения вашейvg
-
vg1
является именем вашей группы томов LVM
iSCSI, поддерживаемый пулом хранения
iSCSI (Internet Small Computer System Interface) является сетевым протоколом для совместно используемых дисковых хранилищ. Для взаимодействия iSCSI компоненты инициатора iSCSI и таргеа iSCSI договариваются между собой и строят сеть хранения данных (SAN, Storage Area Network), аналогичную Fiber channel.
В отличие от группы томов LVM, тома iSCSI не могут быть созданы через API libvirt. Томы должны быть предварительно размещены на сервере iSCSI (ваш таргет iSCSI). {Прим. пер.: пример их создания см. в разделе iSCSI перевода ZFS для профессионалов Майкла В. Лукаса и Аллана Джуда.} Когда у вас имеются созданные и работающие тома iSCSI, перейдите в свой мастер Add a New Storage Pool и выберите в качестве типа iscsi:ISCSI Target, а затем нажмите Forward, что приведёт к следующему окну (шаг 2):
Введите описанную ниже информацию и кликните на Finish для получения своего домена хранилищ на основе iSCSI в готовом виде:
-
Target Path: местоположение корня для идентификации нового тома хранения
-
Host Name: имя хоста, предоставляющего применяемое хранилище для совместного использования (iscsi target)
-
Source IQN: путь в хосте, который будет совместно применяться (IscsiLuns IQN)
-
Initiator IQN: имя предназначенное для инициатора iSCSI вашей системы хоста
Хотя гостевая операционная система на вашей виртуальной машине может быть установлена с физического носителя при помощи проброса устройства CD/DVD хоста в эту виртуальную машину, это не самый эффективный способ. Чтение с DVD устройства является медленным в сравгнении с чтением ISO с жёсткого диска, поэтому лучшим способом будет сохранить файлы ISO (или логические CD), используемые для установки операционных систем и приложений для виртуальных машин в пуле хранения на основе файлов и создать библиотеку образов ISO.
Для создания библиотеки образов ISO вы можете применять либо virt-manager, либо команду
virsh
. Давайте рассмотрим как создавать библиотеку образов ISO
при помощи команды virsh
:
-
Вначале создайте каталог в вашей системе хоста для хранения образов
.iso
:#mkdir /iso_lib
-
Установите правильные полномочия. Владельцем должен быть пользователь root с полномочиями, установленными в значение
700
. Если SELinux в режиме принуждения (enforcing), необходимо установить следующий контекст:#chmod 700 /iso_lib # semanage fcontext -a -t virt_image_t "/iso_lib(/.*)?"
-
Определите библиотеку образов ISO при помощи команды
virsh
, как это показано ниже:#virsh pool-define-as iso_librarydir - - - - "/iso_lib" #virsh pool-build iso_library #virsh pool-start iso_library
Замечание В предыдущем примере я применил имя
iso_library
чтобы продемонстрировать как создаётся пул, который будет содержать образы ISO, однако вы вольны выбирать любое имя по своему желанию. -
Убедитесь что ваш пул (библиотека образов ISO) был создан:
#virsh pool-info iso_library Name: iso_library UUID: 959309c8-846d-41dd-80db-7a6e204f320e State: running Persistent: yes Autostart: no Capacity: 49.09 GiB Allocation: 8.45 GiB Available: 40.64 GiB
-
Теперь скопируйте свои файлы
.iso
в каталог/iso_lib
. -
По окончанию копирования
.iso
в каталог/iso_lib
, обновите свой пул и затем проверьте его содержимое:# virsh pool-refresh iso_library Pool iso_library refreshed # virsh vol-list iso_library Name Path ------------------------------------------------------------------------------ centos6.iso /iso_lib/centos6.iso Fedora21.iso /iso_lib/Fedora21.iso Fedora22.iso /iso_lib/Fedora22.iso Win7.iso /iso_lib/Win7.iso
-
Будет выведен полный перечень хранимых в данном каталоге образов ISO вместе с путями к ним. Эти образы ISO теперь могут использоваться напрямую виртуальными машинами для установки гостевых операционных систем, инсталляции программного обеспечения или выполнения обновлений.
Удалить пул хранения достаточно просто. Запомните, пожалуйста, что удаление домена хранения не удаляет никаких файловых/ блочных устройств. Оно протсто отсоединяет это хранилище от вашего virt-manager. Файловое/ блочное устройство необходимо удалять вручную.
Удаление пула хранения с использованием virt-manager
Вначале остановите свой пул хранения. Чтобы сделать это, выберите тот пул хранения, который вы хотите остановить и кликните по красной иконке X в нижней части своего окна Storage:
Кликнув по красной иконке X вы сделаете домен хранения не активным (inactive). Ненужное нажатие может удалить ваш домен хранения.
Удаление пула хранения с использованием virsh
Последовательность аналогичная; вам вначале необходимо остановить свой пул выполнив
virsh pooldestroy <pool-name>
, а затем отменить определение
воспользовавшись virsh undefine <pool-name>
.
Тома хранения создаются поверх пулов хранения и подключаются как виртуальные диски к виртуальным машинам. Чтобы создать том хранения, запустите консоль управления хранилищем, перейдите к virt-manager. Кликните на Edit | connection Details | Storage и выберите тот пул хранения, в которм вы хотите создать новый том; кликните на кнопку + в своём Create New Volume.
Далее снабдите свой новый том именем, выберите формат диска для его выделения и кликните по кнопке
Finish чтобы построить новый том и получить
его в готовности для подключения к ВМ. Вы можете подключить его с применением virt-manager или
команды virsh
.
Существует ряд форматов, которые поддерживает libvirt (raw
,
cow
, qcow
,
qcow2
, qed
,
vmdk
). Воспользуйтесь дисковым форматом, максимально соответствующим
вашей среде и установите соответствующие размеры в полях Max
Capacity и Allocation для
принятия решения о том собираетесь ли вы осуществлять предварительное либо динамичное выделение. Если
оставите размер своего диска одинаковым в Max Capacity
иAllocation, он будет предварительно выделенным,
в противном случае выделение будет динамичным (thin-provisioned). Отметим, что формат
qcow2
не поддерживает метод динамичного выделения.
В Главе 7, Шаблоны и снимки все перечисленные
форматы дисков будут детально объяснены. На текущий момент просто поймите, что
qcow2
является специально разработанным дисковым форматом для
виртуализации KVM. Он поддерживает расширенные свойства необходимые для создания внутренних моментальных
снимков. {Прим. пер.: некоторые подробности о Поддерживаемых
форматах образов также можно почерпнуть в нашем переводе 2го издания Полного руководства
Proxmox.}
Синтаксис создания тома при помощи команды virsh
таков:
# virsh vol-create-as dedicated_storage vm_vol1 10G
Здесь dedicated_storage
это ваш пул хранения,
vm_vol1
является именем вашего тома, а
10G
его размер:
# virsh vol-info --pool dedicated_storage vm_vol1
Name: vm_vol1
Type: file
Capacity: 1.00 GiB
Allocation: 1.00 GiB
Замечание | |
---|---|
Сама команда |
Синтаксис удаления тома при помощи команды virsh
таков:
#virsh vol-delete dedicated_storage vm_vol2
Выполнение данной команды удалит том vm_vol2
из пула хранения
dedicated_storage
.
Замечание | |
---|---|
Сама команда |