Руководство по системному администрированию: контейнеры в Solaris - управление ресурсами и зонами

Настройка, проверка и сохранение параметров зоны

Команда zonecfg, описанная на справочной странице zonecfg(1M), позволяет выполнять следующие действия:

Команда zonecfg также позволяет сохраняемым образом определить параметры управления ресурсами для глобальной зоны.

При настройке зоны с помощью утилиты zonecfg можно воспользоваться подкомандой revert, позволяющей отменить настройку ресурса. См. Откат конфигурации зоны.

Сценарий для создания в системе нескольких зон представлен в Сценарий для настройки множественных зон.

Процедуру просмотра конфигурации неглобальной зоны приведены в Просмотр конфигурации неглобальной зоны.

ProcedureНастройка зоны

Следует отметить, что для создания собственной неглобальной зоны требуются только свойства zonename и zonepath. Прочие ресурсы и свойства являются необязательными. Некоторые дополнительные ресурсы также требуют выбора одного из возможных вариантов, таких как использование ресурса dedicated-cpu или capped-cpu. Для получения информации о доступных свойствах и ресурсах команды zonecfg см. Конфигурационные данные зоны.

Для выполнения этой процедуры необходимо иметь роль глобального администратора в глобальной зоне.

  1. Перейдите в режим суперпользователя или воспользуйтесь ролью главного администратора (Primary Administrator).

    Инструкции по созданию роли и ее назначению пользователю приведены в разделе Using the Solaris Management Tools With RBAC (Task Map) в System Administration Guide: Basic Administration.

  2. Создайте конфигурацию зоны с использованием выбранного имени зоны.

    В этом примере используется имя my-zone.


    global# zonecfg -z my-zone
    

    Если эта зона настраивается впервые, выводится следующее системное сообщение:


    my-zone: No such zone configured
    Use 'create' to begin configuring a new zone.
  3. Создайте новую конфигурацию зоны.

    В этой процедуре используются настройки по умолчанию от Sun.


    zonecfg:my-zone> create
    
  4. Задайте путь зоны (в данной процедуре /export/home/my-zone ).


    zonecfg:my-zone> set zonepath=/export/home/my-zone
    

    Не помещайте zonepath на ZFS для более ранних версий, чем Solaris 10 10/08.

  5. Задайте значение автоматической загрузки.

    Если установлено значение true , зона автоматически загружается при загрузке глобальной зоны. Следует отметить, что для автоматической загрузки зон также необходимо включить службу зон svc:/system/zones:default . Значение по умолчанию – false.


    zonecfg:my-zone> set autoboot=true
    
  6. Установите сохраняемые загрузочные аргументы для зоны.


    zonecfg:my-zone> set bootargs="-m verbose"
    
  7. Выделите один ЦП этой зоне.


    zonecfg:my-zone> add dedicated-cpu
    
    1. Задайте количество ЦП.


      zonecfg:my-zone:dedicated-cpu> set ncpus=1-2
      
    2. (Дополнительно) Задайте важность.


      zonecfg:my-zone:dedicated-cpu> set importance=10
      

      Значение по умолчанию – 1.

    3. Завершите определение.


      zonecfg:my-zone:dedicated-cpu> end
      
  8. Проверьте стандартный набор полномочий.


    zonecfg:my-zone> set limitpriv="default,sys_time"
    

    Эта команда дает возможность установить системные часы в значение по умолчанию.

  9. Задайте класс планирования FSS.


    zonecfg:my-zone> set scheduling-class=FSS
    
  10. Добавьте ограничение памяти.


    zonecfg:my-zone> add capped-memory
    
    1. Установите значение для ограничения памяти.


      zonecfg:my-zone:capped-memory> set physical=50m
      
    2. Установите ограничение подкачки.


      zonecfg:my-zone:capped-memory> set swap=100m
      
    3. Установите ограничение по блокированной памяти.


      zonecfg:my-zone:capped-memory> set locked=30m
      
    4. Завершите определение ограничений памяти.


      zonecfg:my-zone:capped-memory> end
      
  11. Добавьте файловую систему.


    zonecfg:my-zone> add fs
    
    1. Задайте точку монтирования для файловой системы (в этой процедуре используется /usr/local).


      zonecfg:my-zone:fs> set dir=/usr/local
      
    2. Эта команда определяет, что /opt/zones/my-zone/local из глобальной зоны монтируется в настраиваемой зоне как /usr/local.


      zonecfg:my-zone:fs> set special=/opt/zones/my-zone/local
      

      Файловая система/usr/local будет доступна для чтения и записи в неглобальной зоне.

    3. Укажите тип файловой системы (в этой процедуре используется lofs).


      zonecfg:my-zone:fs> set type=lofs
      

      Типом определяется способ взаимодействия ядра с файловой системой.

    4. Завершите определение файловой системы.


      zonecfg:my-zone:fs> end
      

    При добавлении нескольких файловых систем повторите этот этап.

  12. Добавьте именованный набор данных ZFS sales в пул устройств хранения данных tank.


    zonecfg:my-zone> add dataset
    
    1. Укажите путь к набору данных ZFS sales.


      zonecfg:my-zone> set name=tank/sales
      
    2. Завершите определение dataset.


      zonecfg:my-zone> end
      
  13. (Только для зоны с унаследованными каталогами) Добавьте совместно используемую файловую систему, т.е. систему, смонтированную в петлевом режиме из глобальной зоны.

    Не выполняйте этот этап для создания зоны без унаследованных каталогов, которая не имеет совместно используемых файловых систем. Случай зон без унаследованных каталогов описан в Требования к дисковому пространству.


    zonecfg:my-zone> add inherit-pkg-dir
    
    1. Эта команда определяет, что /opt/sfw из глобальной зоны монтируется в настраиваемой зоне в режиме только для чтения.


      zonecfg:my-zone:inherit-pkg-dir> set dir=/opt/sfw
      

      Примечание –

      База данных пакетов зоны обновляется для отображения пакетов. Эти ресурсы не могут быть изменены или удалены после того, как зона была установлена с помощью команды zoneadm.


    2. Завершите определение inherit-pkg-dir.


      zonecfg:my-zone:inherit-pkg-dir> end
      

    При добавлении нескольких совместно используемых файловых систем повторите этот этап.


    Примечание –

    Если требуется создать зону без унаследованных каталогов, но ресурсы совместно используемых файловых систем по умолчанию добавлялись при помощи inherit-pkg-dir, следует удалить их значение по умолчанию inherit-pkg-dir с помощью команды zonecfg до установки зоны:

    • zonecfg:my-zone> remove inherit-pkg-dir dir=/lib

    • zonecfg:my-zone> remove inherit-pkg-dir dir=/platform

    • zonecfg:my-zone> remove inherit-pkg-dir dir=/sbin

    • zonecfg:my-zone> remove inherit-pkg-dir dir=/usr


  14. (Дополнительно) При создании зоны с эксклюзивным IP задайте ip-type.


    zonecfg:my-zone> set ip-type=exclusive
    

    Примечание –

    На этапе add net будет определен только тип физического устройства.


  15. Добавьте сетевой интерфейс.


    zonecfg:my-zone> add net
    
    1. (Только в случае общего IP) Задайте IP-адрес для сетевого интерфейса (в данной процедуре 192.168.0.1).


      zonecfg:my-zone:net> set address=192.168.0.1
      
    2. Укажите тип физического устройства для сетевого интерфейса. В этой процедуре используется устройство hme.


      zonecfg:my-zone:net> set physical=hme0
      
    3. Solaris 10 10/08: (дополнительно, только общий IP) Установите для сетевого интерфейса маршрутизатор по умолчанию. В данной процедуре используется значение .


      zonecfg:my-zone:net> set defrouter=10.0.0.1
      
    4. Завершите определение.


      zonecfg:my-zone:net> end
      

    При добавлении нескольких сетевых интерфейсов повторите этот этап.

  16. Добавьте устройство.


    zonecfg:my-zone> add device
    
    1. Установите подходящее устройство (в данной процедуре /dev/sound/* ).


      zonecfg:my-zone:device> set match=/dev/sound/*
      
    2. Завершите определение устройства.


      zonecfg:my-zone:device> end
      

    При добавлении нескольких устройств повторите этот этап.

  17. Добавьте элемент управления ресурсами для всей зоны с использованием имени свойства.


    zonecfg:my-zone> set max-sem-ids=10485200
    

    При добавлении нескольких элементов управления ресурсами повторите этот этап.

  18. Добавьте комментарий с использованием типа ресурса attr.


    zonecfg:my-zone> add attr
    
    1. Задайте имя comment.


      zonecfg:my-zone:attr> set name=comment
      
    2. Задайте тип string.


      zonecfg:my-zone:attr> set type=string
      
    3. Задайте значение комментария, который описывает зону.


      zonecfg:my-zone:attr> set value="This is my work zone."
      
    4. Завершите определение типа ресурса attr.


      zonecfg:my-zone:attr> end
      
  19. Проверьте конфигурацию зоны "zone".


    zonecfg:my-zone> verify
    
  20. Зафиксируйте конфигурацию зоны.


    zonecfg:my-zone> commit
    
  21. Выйдите из команды zonecfg.


    zonecfg:my-zone> exit
    

    Следует отметить, что даже в том случае, если в запросе явно не вводится commit, операция commit автоматически выполняется при вводе exit или при обнаружении EOF.

Выполнение ряда подкоманд из командной строки

Совет –

Команда zonecfg также позволяет использовать несколько подкоманд, заключенных в кавычки и разделенных символом точки с запятой, в одной команде интерпретатора команд.


global# zonecfg -z my-zone "create ; set zonepath=/export/home/my-zone"

Дальнейшие действия

Для установки зафиксированной конфигурации зоны см. Установка и начальная загрузка зон.

Сценарий для настройки множественных зон

Этот сценарий можно использовать для настройки и загрузки нескольких зон. Сценарий принимает следующие параметры:

Для выполнения сценария необходимо обладать полномочиями глобального администратора в глобальной зоне. Глобальный администратор в глобальной зоне имеет полномочия суперпользователя или роль главного администратора (Primary Administrator).


#!/bin/ksh
#
# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
#ident	"%Z%%M%	%I%	%E% SMI"

if [[ -z "$1" || -z "$2" || -z "$3" ]]; then
		echo "usage: $0 <#-of-zones> <zonename-prefix> <basedir>"
		exit 2
fi

if [[ ! -d $3 ]]; then
		echo "$3 is not a directory"
		exit 1
fi

nprocs=`psrinfo | wc -l`
nzones=$1
prefix=$2
dir=$3

ip_addrs_per_if=`ndd /dev/ip ip_addrs_per_if`
if [ $ip_addrs_per_if -lt $nzones ]; then
		echo "ndd parameter ip_addrs_per_if is too low ($ip_addrs_per_if)"
		echo "set it higher with 'ndd -set /dev/ip ip_addrs_per_if <num>"
		exit 1
fi

i=1
while [ $i -le $nzones ]; do
	zoneadm -z $prefix$i list > /dev/null 2>&1
	if [ $? != 0 ]; then
		echo configuring $prefix$i
		F=$dir/$prefix$i.config
		rm -f $F
		echo "create" > $F
		echo "set zonepath=$dir/$prefix$i" >> $F
		zonecfg -z $prefix$i -f $dir/$prefix$i.config 2>&1 | \
		    sed 's/^/    /g' 
	else
		echo "skipping $prefix$i, already configured"
	fi
	i=`expr $i + 1`
done

i=1
while [ $i -le $nzones ]; do
	j=1
	while [ $j -le $nprocs ]; do
		if [ $i -le $nzones ]; then
			if [ `zoneadm -z $prefix$i list -p | \
			    cut -d':' -f 3` != "configured" ]; then
				echo "skipping $prefix$i, already installed"
			else
				echo installing $prefix$i
				mkdir -pm 0700 $dir/$prefix$i
				chmod 700 $dir/$prefix$i
				zoneadm -z $prefix$i install > /dev/null 2>&1 &
				sleep 1	# spread things out just a tad
			fi
		fi
		i=`expr $i + 1`
		j=`expr $j + 1`
	done
	wait
done

i=1
while [ $i -le $nzones ]; do
	echo setting up sysid for $prefix$i
	cfg=$dir/$prefix$i/root/etc/sysidcfg
	rm -f $cfg
	echo "network_interface=NONE {hostname=$prefix$i}" > $cfg
	echo "system_locale=C" >> $cfg
	echo "terminal=xterms" >> $cfg
	echo "security_policy=NONE" >> $cfg
	echo "name_service=NONE" >> $cfg
	echo "timezone=US/Pacific" >> $cfg
	echo "root_password=Qexr7Y/wzkSbc" >> $cfg  # 'l1a'
	i=`expr $i + 1`
done

i=1
para=`expr $nprocs \* 2`
while [ $i -le $nzones ]; do
	date
	j=1
	while [ $j -le $para ]; do
		if [ $i -le $nzones ]; then
			echo booting $prefix$i
			zoneadm -z $prefix$i boot &
		fi
		j=`expr $j + 1`
		i=`expr $i + 1`
	done
	wait
done

ProcedureПросмотр конфигурации неглобальной зоны

Для выполнения этой процедуры необходимо иметь роль глобального администратора в глобальной зоне.

  1. Перейдите в режим суперпользователя или воспользуйтесь ролью главного администратора (Primary Administrator).

    Инструкции по созданию роли и ее назначению пользователю приведены в разделе Using the Solaris Management Tools With RBAC (Task Map) в System Administration Guide: Basic Administration.

  2. Проверьте конфигурацию зоны.


    global# zonecfg -z zonename info