В настоящее время в Linux существуют следующие известные реализации контейнеров:
Но они требуют применения своих патчей к ядру для получения необходимого функционала.В отличие от них lxc начиная с версии ядра 2.6.29 это не требуется.
Для реализации изоляции используются существующие в ядре.
пространства имен и для управления ресурсами Контрольная группа .
Это позволяет создавать не только полностью изолированные среды, но и изолировать отдельные приложения.
Чтобы начать с lxc Вам понадобится Linux с ядром 2.6.29. В этом случае в ядре должны быть включены следующие опции:
* General setup
** Control Group support
---> Namespace cgroup subsystem
---> Freezer cgroup subsystem
---> Cpuset support
----> Simple CPU accounting cgroup subsystem
----> Resource counters
----> Memory resource controllers for Control Groups
** Group CPU scheduler
---> Basis for grouping tasks (Control Groups)
** Namespaces support
---> UTS namespace
---> IPC namespace
---> User namespace
---> Pid namespace
---> Network namespace
* Security options
--> File POSIX Capabilities
* Device Drivers
** Network device support
---> Virtual ethernet pair device
Если все это включено, то монтируем файловую систему cgroup: mkdir -p /var/lxc/cgroup
mount -t cgroup cgroup /var/lxc/cgroup
Скачать lxc , собрать и установить: .
/configure --prefix=/
make
make install
Затем проверьте, какая версия iproute2 установлена.
Вам понадобится версия выше 2.6.26. Эта версия позволяет управлять виртуальными сетевыми устройствами и настраивать сетевые пространства имен.
Кроме того, если вы планируете использовать сеть внутри контейнера, вам необходимо перенастроить сетевую систему, чтобы она использовала режим моста.
Для этого опустите сетевой интерфейс: ifconfig eth0 down
Создать мост br0: brctl addbr br0
brctl setfd br0 0
Подключите к нему сетевой интерфейс: brctl addif br0 eth0
ifconfig eth0 0.0.0.0 up
Настройте br0 с необходимым адресом и укажите шлюз по умолчанию: ifconfig bdr0 192.168.1.2/24 up
route add default gw 192.168.1.1
Затем при запуске контейнера будет создано специальное виртуальное устройство, соединяющее мост с виртуальным интерфейсом контейнера.
Теперь вам нужен образ системы для контейнера.
Самый простой способ — использовать готовые шаблоны от OpenVZ. я использовал шаблон для CentOS .
Загрузите и распакуйте его в каталог /var/lxc/centos/rootfs .
После этого вам нужно будет немного доработать шаблон, так как он предназначен для работы с OpenVZ. Для этого выполните следующие действия:
Перейдите в каталог /var/lxc/centos/rootfs/etc/rc.d и в файле rc.sysinit закомментируйте следующие строки: /sbin/start_udev
mount -n /dev/pts >/dev/null 2>&1
В настоящее время каталог /dev монтируется с использованием привязки из текущей системы.
Затем закомментируйте строку в каталоге /var/lxc/centos/rootfs/etc/ в файле fstab: none /dev/pts devpts rw 0 0
Затем перейдите в каталог /var/lxc/centos/rootfs/etc/sysconfig/network-scripts и создайте файл темы ifcfg-eth0, который выглядит следующим образом: DEVICE=eth0
IPADDR=192.168.1.102
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
ONBOOT=yes
NAME=eth0
Затем перейдите в каталог /var/lxc/centos/rootfs/etc/sysconfig/ и создайте сетевой файл: NETWORKING="yes"
GATEWAY="192.168.1.1"
HOSTNAME="centos_ssh"
Теперь осталось только сменить пароль root. Для этого выполните chroot в образ системы и вызовите passwd: chroot /var/lxc/centos/rootfs
passwd
Подготовка системы завершена.
Перейдем к созданию настроек контейнера.
Для этого создайте два файла fstab и lxc-centos.conf в каталоге /var/lib/.
Далее вам необходимо создать файлы настроек контейнера.
Создайте lxc-centos.conf и fstab в каталоге /var/lxc/centos со следующим содержимым: lxc-centos.conf lxc.utsname = centos_ssh
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.ipv4 = 192.168.1.101/24
lxc.network.name = eth0
lxc.mount = /var/lxc/centos/fstab
lxc.rootfs = /var/lxc/centos/rootfs
fstab /dev /var/lxc/centos/rootfs/dev none bind 0 0
/dev/pts /var/lxc/centos/rootfs/dev/pts none bind 0 0
Теперь вы можете создать контейнер.
Укажите имя centos и файл конфигурации: lxc-create -n centos -f /var/lxc/centos/lxc-centos.conf
Проверяем, создан ли контейнер: lxc-info -n centos
'centos' is STOPPED
Контейнер создан, но в данный момент не запущен.
Давайте запустим его: lxc-start -n centos
Centos начнет загружаться.
Как только вы увидите: INIT: no more processes left in this runlevel
Загрузка завершена.
Откройте ближайшую консоль и попробуйте проверить связь с адресом, выделенным контейнеру.
Как только он пингуется, вы можете войти в систему через ssh. Но помимо полноценных контейнеров lxc позволяет создавать контейнеры приложений.
Для этого создайте следующую структуру каталогов в каталоге /var/lxc/simple: rootfs
|-- bin
|-- dev
| |-- pts
| `-- shm
| `-- network
|-- etc
|-- lib
|-- proc
|-- root
|-- sbin
|-- sys
|-- usr
`-- var
|-- empty
|-- lib
| `-- empty
`-- run
Затем мы создаем lxc-simple.conf : lxc.utsname = simple
lxc.mount = /var/lxc/simple/fstab
lxc.rootfs = /var/lxc/simple/rootfs
И fstab : /lib /var/lxc/simple/rootfs/lib none ro,bind 0 0
/bin /var/lxc/simple/rootfs/bin none ro,bind 0 0
/usr /var/lxc/simple/rootfs/usr none ro,bind 0 0
/sbin /var/lxc/simple/rootfs/sbin none ro,bind 0 0
Далее создайте контейнер: lxc-create -n simple -f /var/lxc/simple/lxc-simple.conf
И запустите приложение: lxc-execute -n centos /bin/ls
Как видите, с одной стороны создать контейнер с приложением проще, с другой — сложнее, чем создать полноценный контейнер.
В настоящее время у вас есть один работающий контейнер и один остановленный контейнер приложения.
Но контейнеры, помимо утепления, должны позволять ограничивать ресурсы.
Для этого lxc использует lxc-cgroup. На данный момент он позволяет указать, какой процессор будет использоваться, сколько процессорного времени ему будет выделено, лимит доступной памяти и класс сетевого трафика, исходящего из контейнера для дальнейшей обработки.
Все настройки основаны на cgroup; за подробной информацией о настройках следует обратиться в каталог документации ядра.
Документация/группы Позвольте мне привести вам несколько простых примеров.
Привязка контейнера к первому ядру процессора: lxc-cgroup -n centos cpuset.cpus 0
Ограничение памяти контейнера до 128 МБ: lxc-cgroup -n centos memory.limit_in_bytes 128M
Кроме того, существуют различные варианты учета.
Непосредственно все это без lxc-cgroup можно посмотреть в каталоге /var/lxc/cgroup/centos.
Если контейнер вам больше не нужен, вы можете остановить его: lxc-stop -n centos
И удалите: lxc-destroy -n centos
Обратите внимание: хотя при этом контейнер и будет удален, образ системы останется на диске.
Вы можете просмотреть запущенные процессы с помощью lxc-ps: lxc-ps --lxc
centos 7480 ? 00:00:00 init
centos 7719 ? 00:00:00 syslogd
centos 7736 ? 00:00:00 sshd
lxc-info показывает состояние контейнера: lxc-info -n centos
'centos' is RUNNING
lxc-freeze блокирует все процессы в контейнере до тех пор, пока не будет вызван lxc-unfreeze lxc-freeze -n centos
lxc-unfreeze снимает блокировку со всех процессов в контейнере lxc-unfreeze -n centos
lxc — интересная технология, но на данный момент она не готова к использованию в производстве.
Изоляция явно недостаточна.
Таким образом, top внутри контейнера показывает все процессоры и всю память, mount отображает точки, смонтированные вне контейнера, а вызов set time изменяет их вне контейнера.
Кроме того, нет квот на используемое дисковое пространство и нет жестких ограничений на использование процессора.
Сейчас ведется работа над квотами, поэтому надеюсь, что скоро не будет необходимости патчить ядро для создания контейнеров.
Теги: #linux #Виртуализация #контейнер #openvz #jail
-
Настройка Vpn Для Android
19 Oct, 24 -
Менеджер Загрузки Для 486-Го Компьютера
19 Oct, 24 -
Городской Портал Большого Сочи На Drupal
19 Oct, 24 -
Совет По Использованию Git В Windows
19 Oct, 24 -
Безопасность Ключей Под Вопросом
19 Oct, 24 -
Краткий Обзор Cms Drupal.
19 Oct, 24