Skip to content

Ликбез по консольному интерфейсу XenServer

Недавно познакомился с технолологиями виртуализации рабочих столов компании Citrix и в частности на тестовом стенде запустил связку XenDesktop и XenServer. Вообще говоря, стандартным средством администрирования XenServer является графическая утилита XenCenter, однако во-первых она существует только под Windows, во-вторых во время установки она полезла обновлять .NET framework, поэтому мое первое знакомство с XenServer началось с CLI.

Утилита xsconsole представляет собой TUI-интерфейс и позволяет выполнять базовую настройку dom0, в частности настроить сервисный IP-адрес (чтобы стала доступной ssh-сессия). Однако настроить второй сервисный адрес для подключения iSCSI-стораджа мне не удалось — xsconsole при этом убила мой управляющий интерфейс. Также в неудобства ей можно записать необходимость вводить пароль root на каждый чих по перенастройке, в общем мне эта утилита показалась несколько неполноценной. Куда более мощное средство представляет из себя команда xe.

Команда XE

xe — команда объектно-ориентированная и в общем виде ее синтаксис представляет из себя следующую форму:

# xe <тип объекта>-<операция> [параметр1=значение1] [параметр2=значение2] ... → [селектор1=значение_селектора1]

Селектор в данном случае определяет к каким объектам применять указанную операцию, например монтирование образа CD в виртуальную машину:
# xe vm-cd-insert cd-name=<имя ISO-образа> uuid=<UUID виртуальной машины>
например:
# xe vm-cd-insert cd-name=win7.iso uuid=dc65150f-9f48-bc19-3948-e8b9ccf15aae

В данном случае селектором будет являться выбор виртуальной машины по ее uuid, тип объекта — vm, а операция — cd-insert. Возможные типы объектов, связанные представленны на рисунке:

Дерево устройств VM
VM — виртуальная машина, SR — репозиторий с данными (для размещения как образов виртуальных машин). Виртуальные машины группируются по хостам (объект host), а хосты можно объединять в пулы (pool).

Виртуальные сетевые интерфейсы (vif) разворачиваются поверх бриджей (network), а те в свою очередь — на физических интерфейсах (pif), VLAN-интерфейсы также расцениваются как физические. Надо сказать, что для конфигурирования еще одного управляющего интерфейса потребуется команда pif-reconfigure-ip, например:
# xe pif-reconfigure-ip IP=192.168.100.2 netmask=255.255.255.0 mode=static → uuid=b2fa2b32-43d1-bef3-a77c-4480abd8e886

Дисковые блочные устройства разворачиваются в репозиториях хранения или storage repository (объект sr) и представляют собой или логические тома LVM (кстати можно использовать команды lvs и vgs, последняя полезна для определения свободного места на репозитории) или файлы на ФС ext3 или NFS. Каждый образ представляет из себя обьект vdi (т.е. Virtual Disk Image), а маппинг VDI в виртуальную машину — виртуальное блочное устройство vbd. PBD, как несложно догадаться — физическое блочное устройство, т.е. iSCSI-том или VG на локальных дисках.

За бортом мы оставили шаблоны виртуальных машин и снапшоты.

Базовые операции xe

Базовое управление объектами осуществляется с помощью параметров -param-list и операции list, создание объекта выполняется операцией create.
Например создание и переименование VDI-образа выглядело бы так:
[root@citrix ~]# xe vdi-create sr-uuid=20926e5c-3a35-6a5f-03d9-f146e6d47722 → virtual-size=1GiB name-label=testVDI type=user
004eb6f9-7bdc-4bcd-8432-9df5911f9e4d
[root@citrix ~]# xe vdi-list
<cut>
uuid ( RO)                : 004eb6f9-7bdc-4bcd-8432-9df5911f9e4d
name-label ( RW): testVDI
name-description ( RW):
sr-uuid ( RO): 20926e5c-3a35-6a5f-03d9-f146e6d47722
virtual-size ( RO): 1073741824
sharable ( RO): false
read-only ( RO): false
<cut>
[root@citrix ~]# xe vdi-param-list uuid=004eb6f9-7bdc-4bcd-8432-9df5911f9e4d
uuid ( RO)                    : 004eb6f9-7bdc-4bcd-8432-9df5911f9e4d
name-label ( RW): testVDI
name-description ( RW):
is-a-snapshot ( RO): false
snapshot-of ( RO): <not in database>
snapshots ( RO):
snapshot-time ( RO): 19700101T00:00:00Z
allowed-operations (SRO): resize; destroy; clone; copy; snapshot
current-operations (SRO):
sr-uuid ( RO): 20926e5c-3a35-6a5f-03d9-f146e6d47722
sr-name-label ( RO): Local storage
vbd-uuids (SRO):
crashdump-uuids (SRO):
virtual-size ( RO): 1073741824
physical-utilisation ( RO): 1082130432
location ( RO): 004eb6f9-7bdc-4bcd-8432-9df5911f9e4d
type ( RO): User
sharable ( RO): false
read-only ( RO): false
storage-lock ( RO): false
managed ( RO): true
parent ( RO): <not in database>
missing ( RO): false
other-config (MRW):
xenstore-data (MRO):
sm-config (MRO): vdi_type: vhd
on-boot ( RW): persist
allow-caching ( RW): false
tags (SRW):
[root@citrix ~]# xe vdi-param-set name-label=anotherVDI uuid=004eb6f9-7bdc-4bcd-8432-9df5911f9e4d

Как видно из примера, операция create вернула нам uuid вновь созданного объекта, который мы потом можем использовать в селекторе, что безусловно полезно в скриптах.

А вот изменить размер VDI нам не дадут, параметр virtual-size отмечен как только для чтения (RO). Но для этого предусмотрена специальная команда vdi-resize:
[root@citrix ~]# xe vdi-resize disk-size=2GiB uuid=004eb6f9-7bdc-4bcd-8432-9df5911f9e4d

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

Создание виртуальной машины также можно провести через операцию create, однако в отличие от образа VDI, для VM у XenServer припасено гораздо больше параметров, а -param-set на каждый делать лениво. Выход есть: компания Citrix любезно подготовила для нас «шаблоны» виртуальных машин, включающие необходимые параметры: количество vCPU, объем памяти и размер VBD. С последним надо быть аккуратнее, т.к. например при создании VM через XenCenter он не позволяет уменьшать размер VDI, и единственным способом будет являться пересоздание тома.

Вывести список шаблонов можно с помощью команды template-list.

Итак, создадим виртуальную машину. Сначала нужно примонтировать директорию с iso-образами (кстати при заливке в нее новых образов и удалении старых, XenServer сам определит это и обновит базу CD), XenServer поддерживает NFS и CIFS:
# xe-mount-iso-sr <Путь до NFS>

Создаем VM из шаблона:
# xe vm-install template=<Имя шаблона> new-name-label=<Имя VM>

Создаем виртуальный интерфейс на бридже.
# xe network-list
# xe vif-create network-uuid=<UUID бриджа> vm-uuid=<uuid of new VM> device=<Номер устройства>

Подключаем инсталяционный образ:
# xe cd-list
# xe vm-cd-add cd-name=<Имя CD-ROM> vm=<Имя VM> device=<Номер устройства>
# xe vm-cd-list vm=<Имя VM>

Запускаем саму машину:
# xe vm-start uuid=<UUID VM>

Теперь нам надо попасть на саму машину. Сделать это можно, пробросив порт VNC, используемый QEMU, через SSH (т.к. слушается он на 127.0.0.1), а определить посредством номера домена виртуальной машины:
[root@citrix ~]# xe vm-param-get param-name=dom-id uuid=38a65540-405b-267e-9ae2-c7ed83610d12
98
[root@citrix ~]# ps -e -o pid,cmd | grep qemu.98 | grep -v grep
10456 /tmp/qemu.98 -d 98 -m 512 -boot dc -serial pty -vcpus 1 -vncunused -k en-us -usb →
-usbdevice tablet -net nic,vlan=0,macaddr=2a:d4:02:cf:4c:22,model=rtl8139 →
-net tap,vlan=0,bridge=xenbr1,ifname=tap98.0 -acpi -monitor pty -vnclisten 127.0.0.1:1
10469 /tmp/qemu.98 -d 98 -m 512 -boot dc -serial pty -vcpus 1 -vncunused -k en-us -usb →
-usbdevice tablet -net nic,vlan=0,macaddr=2a:d4:02:cf:4c:22,model=rtl8139 →
-net tap,vlan=0,bridge=xenbr1,ifname=tap98.0 -acpi -monitor pty -vnclisten 127.0.0.1:1

Нам нужен родительский процесс qemu, выберем порт VNC из netstat:
[root@citrix ~]# netstat -tlpn | grep 10456
tcp    0      0 127.0.0.1:5906         0.0.0.0:*       LISTEN      10456/qemu.98

Пробрасываем порт и подключаемся к VNC-сессии:
$ ssh -TfN -L 5906:127.0.0.1:5906 root@192.168.50.185
$ vncviewer localhost:6

Выключить машину можно следующей командой:
# xe vm-shutdown uuid=<VM uuid>

Замечание: для машин, в которых не установлены xen tools потребуется опция force. Также крайне не рекомендуется забывать использовать селектор виртульной машины, в этом случае Xen начнет останавливать все запущенные машины

Ссылки

 

http://docs.vmd.citrix.com/XenServer/5.6.0sp2/1.0/en_gb/reference.html — полное руководство по Citrix XenServer 5.6.0
http://wiki.xensource.com/xenwiki/Command_Line_Interface
 — документация по CLI в Xen Wiki
http://support.citrix.com/article/CTX119906
 — проброс VNC

Published inXenServer
Яндекс.Метрика