Solaris-Zones: Linux получает новую упаковку

Опубликовано – 11.01.2010

Автор: Solaris-Zones: Linux IT Marbles Get a New Bag
Перевод: Сгибнев Михаил

 Solaris-Zones позволяют выполнять Linux и Solaris без лишних функций и затрат, предоставляемых полной виртуализацией.

 Редко такое бывает, что датацентры просят сократить им полезную площадь. Что случается чаще — так это просьбы об увеличении числа серверов и уменьшении их энергопотребления. Но, последнее время есть тенденция сокращения числа физических серверов и увеличение загрузки сервера с целью увеличения его КПД. Очень часто данная задача решается с помощью виртуализации.

 В Texas Instruments (TI) имеются многочисленные центры обработки и хранения данных и проектные среды, которые процветают на использовании Linux и Solaris. Как правило, каждая OS установлена на индивидуальном сервере, расположенном в датацентре. Приложения Linux работают на Linux, приложения Solaris работают на Solaris.

 Недавно выяснилось, что новое решение виртуализации позволяет IT специалистам объединить Linux и Solaris вместе в пределах одной физической среды. Это решение сокращает количество физических систем и дает возможность использовать сервера с большей эффективностью.

 Одна из сред виртуализации, предоставляемая Solaris, называется Solaris-Zones (также известная, как Solaris-Containers). С помощью разработок Open-Solaris, Solaris-Zones получила возможность использования маркированных зон, в данном случае — “lx”. Зона “lx” поддерживает установку и выполнение Linux OS и приложений для этой операционной системы. При использовании зон “lx” совместно с ZFS, Linux может выполняться быстее и возможности его значительно расширяются.

 Linux всегда был полигоном для разработчиков и энтузиастов, а безопасность Solaris-Zones, объединенных с мощностью Linux, открывает огромную новую грань свободы разработки — от среды предприятия до рабочего стола.
С Solaris-Zones легко определить, создать, установить и запустить Linux (lx).

 Эта статья дает понятие о зонах “lx” и описывает необходимый инструментарий для каждого шага процесса управления зоной. У читателей должно быть некоторое понимание среды chroot и фундаментальные понятия о работе виртуальных машин (VMs) и особенностей, которыми они обладают. Данные требования не являются обязательными, но они помогут в усвоении материала.

Простая зона

Итак, что такое зона? Зона обеспечивает безопасность и виртуализацию уникальным способом. У Solaris-Zones есть своя собственная файловая система с корневым каталогом, системные файлы и так далее, точно также, как и у физической системы. Частная корневая файловая система, одна на каждую зону, дает гибкость и возможность иметь полностью перестраиваемую конфигурацию. Зона обеспечивает почти те же самые возможности, как и основная OS. В этом отношении, зона похожа на VM без аппаратного уровня эмуляции VM.

 Зоне предоставляют среду, но без частного специализированного ядра. Отсутствие специализированного ядра дает огромное увеличение производительности — когда вы посмотрите на процесс загрузки, вы увидите, насколько все быстро происходит, по сравнению с нормальной начальной загрузкой. В части работы пользователя и администратора в пределах зоны, среда очень напоминает полную виртуализацию в плане гибкости, но как в chroot среде, мы избавляемся от излишнего функционала полной виртуализации.

 Важно понять, что зона не является полноценной виртуальной машиной в том смысле, как это выглядит в Xen, VMware или VirtualBox. Зона — уровень эмуляции, возможно, более родственный Wine, но на более фундаментальном уровне. Это, например, означает, что “lx” зона не содержит свое собственное ядро Linux; скорее, вызовы ядра переадресованы уровнем эмуляции зоны к основному ядру Solaris.

 
Безопасность зоны обеспечивается через изоляцию. У каждой зоны есть своя собственная учетная запись root. У root в пределах зоны нет никаких специальных привилегий получить доступ к объектам вне зоны. Никакая учетная запись не имеет права выйти из зоны или исследовать процессы и файлы вне зоны. Расширенное управление ресурсами позволяется, когда контроль зоной памяти и ресурсов центрального процессора очень важен. Управление ресурсами предотвращает взаимные повреждения зон, такие, и не только, как «зависание» памяти и центрального процессора.

 

Внимание: первичная OS Solaris и физическая платформа, на которой она выполняется, также называется зоной. Она определяется как глобальная зона и продолжает жить несмотря ни на что. Все другие зоны создаются из глобальной зоны. Созданные зоны называют sub или неглобальными зонами. Неглобальные зоны не могут создать зоны в пределах себя. Иллюстрация 1 показывает отношения между глобальной зоной, неглобальными зонами и возможным VMs.

Объявленные (маркированные) зоны

 Solaris-Zones стали доступными с выпуском Solaris 10 (чуть позже данный функционал появился в Open-Solaris). В ранних выпусках поддерживались только “native” Solaris зоны. В августе 2007 была выпущена версия, поддерживающая объявленные зоны, что позволило устанавливать и запускать Linux. По умолчанию зона определена как “native”, если она не определена явно как Linux (lx) зона. Как только зона отмечена как “lx”, в нее может быть установлен только Linux.

Команды

 Управление зоной осуществляется набором простых команд. Каждая команда используется, чтобы управлять одним из логических разделов процесса обслуживания зоны. Первый уровень администрирования заключается в определении, установке и выполнении и для этого используются две команды, для второго уровня — обслуживания работающей зоны, используются оставшиеся две команды.

  • zonecfg: определение зоны(только метаданные)
  • zoneadm: установка/удаление зоны, загрузка и запросы
  • zlogin: подключение к зоне
  • zonename: выводит имя зоны, внутри которой вы находитесь

Определение зоны

 Для определения зоны используется команда zonecfg. Хотя возможно определение зоны, не поддерживающей работу с сетями, все примеры, представленные здесь, описывают зоны, имеющие такую возможность. Пример ниже показывает, как определить сетевой интерфейс для использования “lx” зоной. С помощью zonecfg вы можете создать минимальное зональное определение, установить имя зоны, указать инсталляционный путь и задействовать сетевой интерфейс. Минимальное определение зоны требует только объявления, имени зоны и инсталляционного пути. Команда zonecfg должна быть выполнена с правами пользователя root. В примерах используется подсказка командной оболочки, чтобы показать, из какой зоны выполняется команда. Начальный пример ниже указывает, что мы находимся в пределах глобальной зоны и готовы «определить» неглобальную зону при помощи
команды zonecfg.

 Внимание: ZFS (что вы можете видеть по используемым путям) используется для производительности; однако, это не является обязательным. Не стесняйтесь использовать любой другой путь, для создания одной или более зон.


# List the name of the current zone
g-zone# zonename
global

# Start the zone definition action and define it as "lx"
# SUNWlx is the Sun provided "lx" zone template.
g-zone# zonecfg -z red-zone
red-zone: No such zone configured
Use 'create' to begin a new zone configuration.
zonecfg:red-zone> create -t SUNWlx
zonecfg:red-zone> set zonepath=/zpool01/zones/red-zone
zonecfg:red-zone> add net
zonecfg:red-zone:net> set address=192.168.1.10
zonecfg:red-zone:net> set physical=e1000g0
zonecfg:red-zone:net> end
zonecfg:red-zone> commit # (redundant)
zonecfg:red-zone> exit

# List defined(configured) and running zones
g-zone# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
- red-zone configured /zpool01/zones/red-zone lx shared

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

 Обратите внимание на то, что не все свойства могут быть обновлены или добавлены после того, как зона была установлена. Вообще, это ограничение связано не только с зонами “lx”, но и с “native” зоной. Для свойств, которые могут быть изменены после того, как установлена зона, зона должна находиться в состоянии ожидания или перезагружена, чтобы делать изменение активным.

 Пример выше показывает зону red-zone как configured. Это означает, что зона определена (метаданные созданы и записаны). В примере могут использоваться два свойства, чтобы показать процесс обновления уже определенной зоны: путь к зоне и сетевые атрибуты. Каждый из них может быть изменен, в то время как зона остановлена (не работает). Если зона была установлена, и путь к зоне изменен, оператор обязан переместить физическое местоположение старого пути в новое место вручную. В следующем примере каталог red-zone должен быть переименован в red-zone-x в каталоге /zpool01/zones.


# We determined the network address is incorrect and that it
# needs to be updated and we want a different storage location
g-zone# zonecfg -z red-zone
zonecfg:red-zone> set zonepath=/zpool01/zone/red-zone-x
zonecfg:red-zone> select net address=192.168.1.10
zonecfg:red-zone:net> set address=192.168.2.10
zonecfg:red-zone:net> end
zonecfg:red-zone> exit

# Use zonecfg's "info" sub-command to list the zone's definition
g-zone# zonecfg -z red-zone info
zonename: red-zone
zonepath: /zpool01/zone/red-zone-x
brand: lx
autoboot: false
bootargs:
pool:
limitpriv:
scheduling-class:
ip-type: shared
net:
address: 192.168.2.10
physical: e1000g0

# The zone definition can be deleted
g-zone# zoncfg -z red-zone delete -F

Установка определенной зоны

 Теперь у нас есть определенная зона. Используйте команду zoneadm, чтобы завершить инсталляцию OS в зону, которая у нас называется red-zone. Дополнительные функции zoneadm связаны с состоянием выполнения зоны. Процесс установки зоны “lx” требует наличия дистрибутива Linux. Дистрибутив может быть как в виде компакт-диска, так и в виде образа.

# List the zone definition (from Listing 1)
g-zone# zonecfg -z red-zone info
zonename: red-zone
zonepath: /zpool01/zones/red-zone
brand: lx
autoboot: false
bootargs:
pool:
limitpriv:
scheduling-class:
ip-type: shared
net:
address: 192.168.1.10
physical: e1000g0

# The ISO files:
g-zone# ls /zpool01/rh-media/rhel30-AS-U6/
rhel-3-u6-i386-as-disc1.iso rhel-3-u6-i386-as-disc3.iso
rhel-3-u6-i386-as-disc2.iso rhel-3-u6-i386-as-disc4.iso

# Install linux "desktop" distribution
g-zone# zoneadm -z red-zone install -d
?/zpool01/rh-media/rhel30-AS-U6 desktop
Installing distribution 'Red Hat Enterprise Linux 3 Update 6'...
Installing cluster 'desktop'
Installing miniroot for zone 'red-zone'.
Attempting to locate 30 packages...

Installing 1 miniroot package...

Attempting to locate 29 packages...

Installing 29 miniroot packages...
...
Installation of zone 'red-zone' completed successfully.

Details saved to log file:
"/zpool01/zones/red-zone/root/var/log/red-zone.install.1119.log"

# Query the zones status (changed to installed)
g-zone# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
- red-zone installed /zpool01/zones/red-zone lx shared

Загрузка зоны

 Как только инсталляция будет закончена, наступит время запускать систему. Откройте две оболочки командной строки и выполните команды, указанные ниже. Сначала подключитесь к консоли зоны, а затем, с помощью второй открытой оболочки, загрузите зону, чтобы на первой консоли увидеть весь процесс запуска. В примере из подключения zlogin можно выйти с помощью комбинации “#.”. Чтобы избежать проблем, данная последовательность должна быть уникальной и не совпадать с заданной по умолчанию последовательностью “~.”, так как в случае удаленной работы вы отвалитесь и от нативной зоны.

# Connect to the red-zone console and watch it boot
g-zone(1)# zlogin C -e '#' red-zone

# Boot the red-zone in a second window
g-zone(2)# zoneadm -z red-zone boot

# **** example console output from first window ****
[Connected to zone 'red-zone' console]

[NOTICE: Zone booting up]
INIT: version 2.85 booting
Welcome to Red Hat Enterprise Linux AS
Press 'I' to enter interactive startup.
Configuring kernel parameters: [ OK ]
Setting clock : Mon Sep 29 20:20:56 EDT 2008 [ OK ]
Setting hostname red-zone: [ OK ]
...
Starting atd: [ OK ]
Starting firstboot: [ OK ]
Rotating KDC list [ OK ]

Red Hat Enterprise Linux AS release 3 (Taroon Update 6)
Kernel 2.4.21 on an i686

red-zone login:

Логин

 У неглобальной зоны в плане удаленного доступа есть почти те же самые возможности как и у глобальной зоны. Использование zlogin без опций (указано только имя зоны) соединяется с зоной без консоли, что создаст tty и вызывет вход в систему. Любой сервис, запущенный в зоне, также может использоваться, например XDM, SSH и FTP.

# Connect to zone's console
g-zone# zlogin -C -e '#' red-zone

# Login without a console (must always be root)
g-zone# zlogin red-zone
...
r-zone# zonename
red-zone

Администрирование зоны

 Мы определили, установили и запустили зону. Примеры, представленные здесь, иллюстрируют некоторые из административных задач, связанных с зонами: перезагрузка, завершение, останов и удаление “lx” зоны. Обратите пристальное внимание на подсказки оболочки, чтобы идентифицировать зону, в которой выполнена каждая команда.


# By default a zone will *not* auto boot when the system boots
g-zone# zonecfg -z red-zone set autoboot=true

# Reboot/stop a zone gracefully
g-zone# zlogin -C -e '#' red-zone

# Login, then use a normal Linux command (examples)
r-zone# reboot
r-zone# shutdown -r now
r-zone# telinit 6
r-zone# telinit 0 (once halted boot it from global zone)

# Bring down a zone hard (stop all execution now!)
g-zone# zoneadm -z red-zone halt

# Same as halt and boot (hard stop then boot)
g-zone# zoneadm -z red-zone reboot

# Uninstall the OS from a zone (still defined)
g-zone# zoneadm -z red-zone halt
g-zone# zoneadm -z red-zone uninstall [ -F ]

# Clone an installed zone's OS into another defined zone
# (when the source is on ZFS the clone takes seconds to
# install the new zone, otherwise may take many minutes!)
g-zone# zonecfg -z red-eye create -t red-zone
g-zone# zonecfg -z red-eye set zonepath=/zpool01/zones/red-eye
g-zone# zonecfg -z red-eye
zonecfg:red-eye> select net address=192.168.1.10
zonecfg:red-eye:net> set address=192.168.1.11
zonecfg:red-eye:net> end
zonecfg:red-eye> exit

g-zone# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
- red-zone installed /zpool01/zones/red-zone lx shared
- red-eye configured /zpool01/zones/red-eye lx shared

g-zone# zoneadm -z red-eye clone red-zone
Cloning zonepath /zpool01/zones/red-zone...

g-zone# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
- red-zone installed /zpool01/zones/red-zone lx shared
- red-eye installed /zpool01/zones/red-eye lx shared

# Remove a zone (No undo)
g-zone# zoneadm -z red-eye halt
g-zone# zoneadm -z red-eye uninstall -F
g-zone# zonecfg -z red-eye delete -F

Автоматическое создание зоны (zonetool.pl)

 Создание зоны — процесс легкий и простой. Но, так как это все равно делает человек, то могут быть допущены ошибки. Утилита zonetool.pl автоматизирует процесс создания зоны и включает в себя детальную документацию. Запустите zonetool.pl без агрументов или с флагом —help для получения дополнительной информации.
Ниже представлен пример использования данной утилиты:

$ sudo zonetool.pl \
[ --debug ] \
--create \
--zonename green-zone \
--brand SUNWlx[,server ] \
--zonepath /zpool01/zones \
[ --autoboot ( true | false ) ] \
[ --clone red-zone | --media /path/to/ISOs ] \
--network 'e1000g0=192.168.1.10'

Мысли вслух

 Имея сравнительно малые объемы памяти и дискового пространства, один единственный физический сервер может обслуживать сотни зон. Каждая зона пригодна для использования любым числом пользователей, и однопользовательская зона обеспечивает необходимую гибкость. Отдельный пользователь может создать больше чем одну зону, чтобы проверить и сервер и клиентские среды, и приложения будут полагать, что они находятся на физических компьютерах. Пользователь зоны может использовать собственный пароль root или работать с утилитой sudo в пределах этой зоны без беспокойства о безопасности и стабильности глобальной зоны и других неглобальных зон.

 У “lx” зон действительно есть свои ограничения. Большая часть мощности зоны тратится на разделение ресурсов с глобальной зоной. Зона делит ядро с глобальной зоной и, поэтому, устанавливает ограничения на модули ядра и драйверы. Поскольку зоны не являются полноценными виртуальными машинами, только ограниченное число дистрибутивов Linux могут быть установлены. Поддержка других дистрибутивов Linux — возможно, и дальнейший интерес к этой технологии, может вдохновить на продолжение разработки и поддержки других дистрибутивов Linux. Для получения дополнительной информации, обатитесь к ссылкам внизу статьи.

Используемая литература:
Информация о расширениях brandz и дополнительные материалы
Информация о расширениях brandz и дополнительные материалы
Информация о Solaris lx branded zone (сейчас)
Информация о Solaris lx branded zone (планируется)

Информация о Solaris lx branded zone (конфигурация)
Информация о Solaris lx branded zone (установка и загрузка)
Информация о Solaris lx branded zone (миграция)
zonetool.pl
zonetool.pl был вдохновлен ранней версией от M. Kiefer
Информация о Dtrace
Информация о Dtrace
Информация о Dtrace
Информация о ZFS




 Уважайте труд автора, сохраняйте копирайты.
Реклама на сайте висит не просто так и если статья Вам понравилась, с ее помощью Вы можете отблагодарить автора за проделанную работу. Спасибо!

Один комментарий в Solaris-Zones: Linux получает новую упаковку

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

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


*