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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.