Выпуск системы управления контейнерами LXC 2.1

После полутора лет разработки сформирован релиз инструментария для организации работы изолированных контейнеров LXC 2.1. В состав инструментария LXC входит библиотека liblxc, набор утилит (lxc-create, lxc-start, lxc-stop, lxc-ls и т.п.), шаблоны для построения контейнеров и набор биндингов для различных языков программирования. Изоляция осуществляется при помощи штатных механизмов ядра Linux. Для изоляции процессов, сетевого стека ipc, uts и точек монтирования используется механизм пространств имён (namespaces). Для ограничения ресурсов применяются cgroups. Для понижения привилегий и ограничения доступа задействованы такие возможности ядра, как профили Apparmor и SELinux, политики Seccomp, Chroots (pivot_root) и capabilities.

Ключевые изменения:

  • Поддержка ограничения ресурсов через механизм rlimit. Настройка выполняется аналогично лимитам через cgroup через директивы lxc.prlimit.имя_лимита в файле конфигурации контейнера. Например, для того чтобы снять ограничение на число процессов и установить значение nice в файл конфигурации можно добавить:
         lxc.prlimit.nproc = unlimited     lxc.prlimit.nice = 4  
  • Возможность определения виртуальных сетей openvswitch непривилегированным пользователем:
         lxc.net.0.type = veth     lxc.net.0.link = ovsbr0     lxc.net.0.flags = up     lxc.net.0.name = eth0  
  • Новый параметр «lxc.cgroup.dir», позволяющий указать имя родительского cgroup, к которому будет привязан cgroup создаваемого контейнера. Например, установка «lxc.cgroup.dir = mycontainers» для контейнера «lxc.uts.name = c1» приведёт к созданию cgroups «mycontainers/c1» для всех контроллеров в иерархии cgroup;
  • Поддержка гибридного режима настройки cgroup, при котором можно сочетать новую (cgroup v2) единую унифицированная иерархию cgroup и старую (cgroup v1) гибкую систему из произвольного числа иерархий cgroup. В гибридном режиме предложено ограниченное число контроллеров для распределения ресурсов CPU, регулирования потребления памяти, контроля ввода/вывода и т.п.
  • Добавлена настройка lxc.pty.max для ограничения числа псевдотерминалов (ptys), которое можно запросить из контейнера.
  • Исполняемый файл lxc-monitord переведён в разряд устаревших и больше не требуется для запуска фоновых контейнеров. Вместо lxc-monitord теперь применяется абстрактная реализация на основе пары unix-сокетов;
  • В lxc-copy обеспечено создание снапшотов в tmpfs при запуске одноразовых контейнеров (флаг »-e»);
  • Переименована достаточно большая порция параметров конфигурации с целью унификации синтаксиса настроек. Параметры разнесены по категориям, например, все сетевые настройки теперь поставляются с префиксом «lxc.net». Префикс lxc.network объявлен устаревшим, для избежания разночтений все ключи из него перенесены в lxc.net. Например, вместо серии «lxc.network.name = wlp2s0; lxc.network.name = eno1» теперь нужно указывать «lxc.net.0.name = wlp2s0; lxc.net.1.name = eno1» с явным номера блока;

    Таблица соответствия старых и новых параметров настройки:

      lxc.aa_profile                       | lxc.apparmor.profile          |  lxc.aa_allow_incomplete              | lxc.apparmor.allow_incomplete |  lxc.console                          | lxc.console.path              |  lxc.devttydir                        | lxc.tty.dir                   |  lxc.haltsignal                       | lxc.signal.halt               |  lxc.id_map                           | lxc.idmap                     |  lxc.init_cmd                         | lxc.init.cmd                  |  lxc.init_gid                         | lxc.init.gid                  |  lxc.init_uid                         | lxc.init.uid                  |  lxc.kmsg                             | -                             | удалён  lxc.limit                            | lxc.prlimit                   |  lxc.logfile                          | lxc.log.file                  |  lxc.loglevel                         | lxc.log.level                 |  lxc.mount                            | lxc.mount.fstab               |  lxc.network                          | lxc.net                       |  lxc.network.                         | lxc.net.[i].                  |  lxc.network.flags                    | lxc.net.[i].flags             |  lxc.network.hwaddr                   | lxc.net.[i].hwaddr            |  lxc.network.ipv4                     | lxc.net.[i].ipv4.address      |  lxc.network.ipv4.gateway             | lxc.net.[i].ipv4.gateway      |  lxc.network.ipv6                     | lxc.net.[i].ipv6.address      |  lxc.network.ipv6.gateway             | lxc.net.[i].ipv6.gateway      |  lxc.network.link                     | lxc.net.[i].link              |  lxc.network.macvlan.mode             | lxc.net.[i].macvlan.mode      |  lxc.network.mtu                      | lxc.net.[i].mtu               |  lxc.network.name                     | lxc.net.[i].name              |  lxc.network.script.down              | lxc.net.[i].script.down       |  lxc.network.script.up                | lxc.net.[i].script.up         |  lxc.network.type                     | lxc.net.[i].type              |  lxc.network.veth.pair                | lxc.net.[i].veth.pair         |  lxc.network.vlan.id                  | lxc.net.[i].vlan.id           |  lxc.pivotdir                         | -                             | удалён  lxc.pts                              | lxc.pty.max                   |  lxc.rebootsignal                     | lxc.signal.reboot             |  lxc.rootfs                           | lxc.rootfs.path               |  lxc.se_context                       | lxc.selinux.context           |  lxc.seccomp                          | lxc.seccomp.profile           |  lxc.stopsignal                       | lxc.signal.stop               |  lxc.syslog                           | lxc.log.syslog                |  lxc.tty                              | lxc.tty.max                   |  lxc.utsname                          | lxc.uts.name                  |  
  • Добавлен скрипт lxc-update-config, предназначенный для автоматического приведения старых настроек в соответствие с новыми именами параметров. При этом устаревшие имена параметров пока остаются работоспособными, т.е. обеспечена обратная совместимость со старыми файлами конфигурации.

© OpenNet