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

1 месяц ago admin 0

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


Source: pirates.in.ua