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