После полутора лет разработки сформирован релиз инструментария для организации работы изолированных контейнеров 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, предназначенный для автоматического приведения старых настроек в соответствие с новыми именами параметров. При этом устаревшие имена параметров пока остаются работоспособными, т.е. обеспечена обратная совместимость со старыми файлами конфигурации.


Источник: http://www.opennet.ru/opennews/art.shtml?num=47165