Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
serverguide-precise-ru.pdf
Скачиваний:
79
Добавлен:
03.05.2015
Размер:
1.86 Mб
Скачать

Виртуализация

5.2. Настройка хоста

5.2.1. Основная структура LXC файлов

Ниже приводится описание файлов и каталогов, которые установлены и используются LXC.

• Существует два задания отслеживания:

/etc/init/lxc-net.conf: необязательное задание, которое запускается только если в /etc/default/lxc определено USE_LXC_BRIDGE (по умолчанию true). Оно устанавливает мост на основе NAT для использования контейнером.

/etc/init/lxc.conf: запускается если LXC_AUTO (по умолчанию true) установлена в /etc/default/lxc.Оно отслеживает записи в /etc/lxc/auto/ которые являются символическими ссылками на файлы конфигураций для контейнеров, которые должны быть запущены при загрузке системы.

/etc/lxc/lxc.conf: По умолчанию контейнер создается в конфигурационным файле /etc/lxc/lxc.conf, который управляет контейнерами посредством LXC bridge, созданным lxc-net при запуске upstart. Если при создании контейнера не указан конфигурационный файл, то будет использован конфигурационный файл по умолчанию.

Примеры конфигурационных файлов других контейнеров находятся здесь /usr/share/doc/lxc/examples. Они показывают, как создать контейнер без частной сети или используя macvlan, vlan, или другие сетевые уровни.

Административные утилиты для различных контейнеров находятся здесь

/usr/bin.

/usr/lib/lxc/lxc-init — минимальная очень легковесная инициализирующая программа, которая используется lxc-execute. Вместо того, чтобы загружать весь контейнер, она вручную монтирует несколько файловых систем, главным образом /proc, и отрабатывает их аргументы. Вам нежелательно обращаться к этому файлу вручную.

/usr/lib/lxc/templates/ содержит `шаблоны', которые можно использовать для создания новых контейнеров для различных дистрибутивов и разновидностей этих дистрибутивов. В настоящее время поддерживаются не все шаблоны.

/etc/apparmor.d/lxc/lxc-defaultсодержит профиль Apparmor доступа

по умолчанию, который обеспечивает защиту основной системы от контейнеров. Дополнительную информацию смотрите в разделе

Раздел 5.2.6, «Apparmor» [398].

/etc/apparmor.d/usr.bin.lxc-start содержит профиль для защиты основной

системы от lxc-start пока он устанавливает контейнер.

396

Виртуализация

/etc/apparmor.d/lxc-containersзаставляет все профили, определенные в /etc/

apparmor.d/lxc, загружаться при старте системы.

Существует множество man-страниц по по средствам администрирования

LXC, а также конфигурационному файлу контейнеров lxc.conf.

/var/lib/lxc — здесь хранятся контейнеры и информация по их настройкам.

/var/cache/lxc — здесь кэшируются данные дистрибутивов для ускорения создания множества контейнеров.

5.2.2. lxcbr0

Когда USE_LXC_BRIDGE установлена в true в файле /etc/default/lxc (как впрочем по умолчанию), мост с именем lxcbr0 создаётся в процессе старта. Этот мост получает частный адрес 10.0.3.1, а контейнеры его использующие получат адреса из диапазона 10.0.3.0/24. Экземпляр dnsmasq начинает прослушивать этот мост, поэтому если другой dnsmasq получает связь со всеми интерфейсами до запуска отслеживающего сервиса lxc-net, lxc-net рушится на старте и lxcbr0 не создается.

Если у вас есть другой мост, например, virbr0 по умолчанию от libvirt или br0 для вашего основного сетевого интерфейса, вы можете использовать его вместо lxcbr0 для ваших контейнеров.

5.2.3. Использование отдельной файловой системы для хранения контейнеров

LXC сохраняет информацию контейнеров и корневую файловую систему (с резервным хранилищем по умолчанию) в /var/lib/lxc. Также шаблоны создания контейнеров предпочитают хранить кэшированную информацию по дистрибутивам в /var/cache/lxc.

Если вы хотите использовать для /var, иную файловую систему, вы можете смонтировать в этот каталог другую файловую систему большего объёма. Если у вас есть диск, предназначенный для этих целей, вы можете просто смонтировать его в /var/lib/lxc. Если вы предпочитаете использовать другое расположение, такое как/srv, вы можете примонтировать его к этому каталогу или создать символическую ссылку. Например, если /

srv является большой смонтированной файловой системой, создайте два каталога и символьные ссылки на них:

sudo mkdir /srv/lxclib /srv/lxccache sudo rm -rf /var/lib/lxc /var/cache/lxc sudo ln -s /srv/lxclib

или, используя монтирование:

397

Виртуализация

sudo mkdir /srv/lxclib /srv/lxccache sudo sed -i '$a \ /srv/lxclib /var/lib/lxc none defaults,bind

5.2.4. Контейнеры с поддержкой lvm

Существует возможность использовать разделы LVM в качестве хранилища для контейнеров. Преимуществом этого является, кроме прочего, гибкость в управлении хранилищем и быстрое клонирование контейнеров. По умолчанию используется VG (группа томов) с именем lxc, но могут применяться и другие VG при использовании параметров командной строки. Когда LV (логический том) используется для хранения контейнеров, конфигурационный файл контейнера все еще /var/lib/lxc/CN/config, но корневая точка входа в этом файле (lxc.rootfs) будет указывать на имя блочного устройства логического тома, т.е. /dev/lxc/CN.

Контейнеры с деревом каталогов и LVM хранилищем могут сосуществовать вместе.

5.2.5. Btrfs

Если основная система имеет /var размеченный как btrfs, средства администрирования LXC распознают это и автоматически будут использовать для клонирования контейнеров снимки btrfs.

5.2.6. Apparmor

LXC поставляется с профилем Apparmor, предназначенным для защиты основной системы от случайного неправильного использования привилегий внутри контейнера. Например, контейнер не должен иметь возможности писать в каталог /proc/sysrq-trigger или менять большинство файлов в каталоге /sys.

Профиль usr.bin.lxc-start используется при запуске lxc-start. Этот профиль в основном предотвращает монтирование lxc-start новых файловых систем вне корневой файловой системы контейнера. Перед инициализацией init контейнера, LXC запрашивает переключение на профиль контейнера. По умолчанию используется профиль lxc-container-defaultопределенный в / etc/apparmor.d/lxc/lxc-default. Этот профиль запрещает контейнеру доступ к многим опасным каталогам и монтирование большинства файловых систем.

Если вы обнаружили, что lxc-start падает из-за попытки легитимного доступа, перекрытого политикой Apparmor, вы можете отключить профиль lxc-start следующим образом:

sudo apparmor_parser -R /etc/apparmor.d/usr.bin.lxc-start

398

Виртуализация

sudo ln -s /etc/apparmor.d/usr.bin.lxc-start /etc/apparmor.d/disabled/

Это позволит запускать lxc-start без ограничений, но продолжит ограничивать собственно контейнер. Если вы хотите также снять ограничения с контейнера, в дополнение к блокировке использования профиля usr.bin.lxc-start, вам потребуется в файл настроек контейнера добавить:

lxc.aa_profile = unconfined

Если вы желаете запускать контейнер в собственном профиле, вы можете создать новый профиль в /etc/apparmor.d/lxc/. Его имя должно начинаться на lxc- чтобы lxc-start имел возможность переключения на этот профиль. После создания политики, загрузите её, используя команду:

sudo apparmor_parser -r /etc/apparmor.d/lxc-containers

Профиль автоматически загрузится после перезагрузки системы, поскольку его содержимое учтено в /etc/apparmor.d/lxc-containers. Наконец, чтобы заставить контейнер CN использовать новый профиль lxc-CN-profile, добавьте следующие строки в его файл настройки:

lxc.aa_profile = lxc-CN-profile

lxc-execute не просматривает профиль Apparmor, но контейнер, который он порождает, будет ограничен.

5.2.7. Группы управления

Группы управления (cgroups) — это способность ядра предоставлять возможность иерархической группировки задач, а также назначать и ограничивать ресурсы для каждой cgroup. Они используются в контейнерах для ограничения доступа к блочным и посимвольным устройствам (block and character device) и для заморозки (приостановки) контейнеров. В дальнейшем их можно использовать для ограничения используемой памяти

иблочного ввода/вывода, гарантированного минимума использования CPU

идля фиксирования определенных CPU за отдельными контейнерами. По умолчанию LXC устанавливает зависимость на установку пакета cgrouplite, который предоставляет надлежащую инициализацию cgroup при загрузке системы. Пакет cgroup-lite монтирует каждую cgroup подсистему отдельно в /sys/fs/cgroup/SS, где SS — название подсистемы. Например, подсистема freezer монтируется в /sys/fs/cgroup/freezer. Группы управления LXC хранятся в /sys/fs/cgroup/SS/INIT/lxc,где INIT — инициализирующая

399

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]