Pull to refresh

Solaris Container (zone). Создание и администрирование. Часть 1

Reading time5 min
Views11K
Solaris Container (zone). Создание и администрирование. Часть 2

Введение


Технология Solaris Zone (Solaris Container) – это технология, позволяющая разделить на программном уровне Solaris 10 ОС на контейнеры(зоны), почти самостоятельные ОС, которые могут иметь отдельные независимые ресурсы (процессоры, память, дисковое пространство) и своих собственных пользователей.

Конетейнеры – это хорошее решение для построение серверов приложений, в которых каждое приложение будет иметь свой честный гарантированный (или разделяемый между всеми зонами) кусочек ресурсов, с которым сможет работать. Такое решение позволит консолидировать инфраструктуру на более мощных серверах, что в общем понизит стоимость и сложность информационных систем.


При планировании консолидации серверов перед нами появляется достаточно много разнородных решений, из которых мы должны выбрать как раз то, которое полностью нас удовлетворит. Обычно мы выбираем между этими тремя:
  • Домены – Oracle VM Server for SPARC (ex LDom от Sun) или IBM LPARы
  • Виртуальные машины – Vmware, Microsoft Hyper-V etc
  • Изолированные разделы на уровне ОС – Solaris Zones, FreeBSD Jail, LVS (Linux Virtual Server)


Особенности Solaris Zones:

  • Безопасность – приложение, запущенное в зоне, запущено в «песочнице», то есть процесс, даже запущенный от имени root в рамках зоны, не может повлиять на другие зоны или на global зону (управляющая, корневая зона). Перезагрузка или выключение доступно только из global зоны.
  • Изоляция – зоны имеют исключительное право на выделенные ей ресурсы; зоны могу иметь своих собственных пользователей и свое собственного пользователя root. Перезагрузка зоны никак не может повлиять на другие зоны, работающие на хосте
  • Гибкость – ресурсы зоне могу быть назначены жестко или зона может использовать общий пул ресурсов хоста.

Создание Solaris Zone


Для демонстрации установим зону с именем habrazone.

У меня Solaris OS 10 09/10 и установлена она на ZFS. В следующей статье я опишу процесс создания отдельного пула на ZFS, установки в этот пул зоны, а так же выделение гарантированных CPU и RAM для зоны, а в этой – только установка зоны в отдельную директорию без привязки ее к ресурсам. Зона будет без изысков (проброса физических сетевых интерфейсов, raw устройств etc), а просто с виртуальным сетевым интерфейсом на уровне хоста.

Итак, для начала создадим директорию, в которую будет установлена зона, и назначим права для нее

# mkdir /export/habrazone
# chown root:root /export/habrazone
# chmod 700 /export/habrazone


Все просто. Только root может смотреть в эту зону и больше никто.

Для создания зоны используем команду zonecfg с ключом –z.

# zonecfg -z habrazone
habrazone: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:habrazone> create
zonecfg:habrazone> set zonepath=/export/habrazone
zonecfg:habrazone> set autoboot=true
zonecfg:habrazone> add net
zonecfg:habrazone:net> set physical=bge0
zonecfg:habrazone:net> set address=10.44.3.92
zonecfg:habrazone:net> end
zonecfg:habrazone> add attr
zonecfg:habrazone:attr> set name=comment
zonecfg:habrazone:attr> set type=string
zonecfg:habrazone:attr> set value="Habrahabr"
zonecfg:habrazone:attr> end
zonecfg:habrazone> verify
zonecfg:habrazone> commit
zonecfg:habrazone> exit


Теперь немного прокомментирую то, что тут произошло:

zonecfg:habrazone> create — создаем зону. На самом деле зоны еще как таковой нет. Это всего навсего ее конфиг в XML.
zonecfg:habrazone> set zonepath=/export/habrazone — зона будет располагаться по пути /export/habrazone
zonecfg:habrazone> set autoboot=true — зона будет запускать автоматически вместе с загрузкой хоста, например после ребута.
zonecfg:habrazone> add net — добавляем сетевой интрефейс в конфиг зоны
zonecfg:habrazone:net> set physical=bge0 — виртуальный интерфейс будет размещен над bge0
zonecfg:habrazone:net> set address=10.44.3.92 — адрес нашей зоны
zonecfg:habrazone:net> end — конец
zonecfg:habrazone> add attr — добавил «название» для зоны
zonecfg:habrazone:attr> set name=comment
zonecfg:habrazone:attr> set type=string
zonecfg:habrazone:attr> set value=«Habrahabr» — наш любимый ресурс
zonecfg:habrazone:attr> end — и опять конец
zonecfg:habrazone> verify — проверим конфиг. Если в конфиге есть ошибки, то в этом месте нам об этом сообщат
zonecfg:habrazone> commit — коммит
zonecfg:habrazone> exit — выход

Посмотрим наш конфиг целиком. Обратите внимание на inherit-pkg-dir. Они указывают на директории, которые «наследуются» из global зоны.

# zonecfg -z habrazone info
zonename: habrazone
zonepath: /export/habrazone
brand: native
autoboot: true
bootargs:
pool:
limitpriv:
scheduling-class:
ip-type: shared
hostid:
inherit-pkg-dir:
dir: /lib
inherit-pkg-dir:
dir: /platform
inherit-pkg-dir:
dir: /sbin
inherit-pkg-dir:
dir: /usr
net:
address: 10.44.3.92
physical: bge0
defrouter not specified
attr:
name: comment
type: string
value: Habrahabr


Сейчас у нас только 1 зона – глобальная. Список зон можно посмотреть командой zoneadm c ключами list –iv:

# zoneadm list -iv
ID NAME STATUS PATH BRAND IP
0 global running / native shared


Теперь у нас все готов к инсталляции зоны. Для инсталляции зоны используется уже знакомая команда zoneadm, но в качестве параметров ей передается имя еще незаинсталлиной зоны с командой install:

# zoneadm -z habrazone install
A ZFS file system has been created for this zone.
Preparing to install zone habrazone.
Creating list of files to copy from the global zone.
Copying 3137 files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize 1207 packages on the zone.
Initialized 1207 packages on zone.
Zone habrazone is initialized.
The file /export/habrazone/root/var/sadm/system/logs/install_log contains a log of the zone installation.

Хотел бы обратить внимание, что в зону файлы ОС копируются из global зоны, а часть директорий наследуются. Наследуемые директории в зоне находятся в read only.

В списке зон у нас появилась новоустановленная зона:

# zoneadm list -iv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
- habrazone installed /export/habrazone native shared


И размер ее очень небольшой как для почти отдельной ОС.

# du -shk /export/habrazone/
79M /export/habrazone


Запуск и остановка выполняется с помощью команды zoneadm –z <имя зоны> boot и zoneadm –z <имя зоны> halt соответственно:

# zoneadm -z habrazone boot


После запуска зоны можно проверить что поменялось, например в конфигурации сетевых интерфейсов хоста.
# /sbin/ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
lo0:1: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
zone habrazone
inet 127.0.0.1 netmask ff000000
bge0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet 10.44.3.93 netmask ffffff00 broadcast 10.44.3.255
ether 0:14:4f:79:91:1a
bge0:1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
zone habrazone
inet 10.44.3.92 netmask ffffff00 broadcast 10.44.3.255


Как видно из вывода ifconfig, в системе появился виртуальный интерфейс, на который назначен адрес зоны. Зоне можно так же отдать отдельный физический интерфейс, например, в случае если в зоне поднято приложение, которое активно эксплуатирует сеть, и дать возможность другим зонам нормально функционировать.

После того, как зона загрузилась, необходимо зайти в нее консоль и провести минимальную конфигурацию (hostname, time zone, name service, пароль root etc).

Зайти можно используя zlogin –C <имя зоны>:

# zlogin –C habrazone

Далее отвечаем на вопросы ОС о hostname, time zone, name service, вводим пароль root. После всех конфигурационных шагов зона сама перезагрузится и мы сможем попасть в ее консоль по средстава все того же zlogin <имя зоны> или по ssh:

# hostname
globalzone
# zlogin habrazone
[Connected to zone 'habrazone' pts/1]
Last login: Fri Jul 1 18:43:32 on pts/3
Oracle Corporation SunOS 5.10 Generic Patch January 2005
# hostname
habrazone


Зона готова.

В следующей статье я постараюсь описать то, как можно выделать ресурсы(raw, CPU, RAM) для зоны и как можно мигрировать зоны между хостами.

Спасибо за внимание.
Tags:
Hubs:
+31
Comments13

Articles