null

Ликбез по консольному интерфейсу 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

К списку статей

 

Интересуюсь по большей части системным анализом программного обеспечения: поиском багов и анализом неисправностей, а также системным программированием (и не оставляю надежд запилить свою операционку, хотя нехватка времени сказывается :) ). Программированием увлекаюсь с 12 лет, но так уж получилось, что стал я инженером.

Основная сфера моей деятельности связана с поддержкой Solaris и оборудования Sun/Oracle, хотя в последнее время к ним прибавились технологии виртуализации (линейка Citrix Xen) и всякое разное от IBM - от xSeries до Power. Учусь на кафедре Вычислительной Техники НИУ ИТМО.

See you...out there!

http://www.facebook.com/profile.php?id=100001947776045
https://twitter.com/AnnoyingBugs