The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

08.09.2017 22:51

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


  1. Главная ссылка к новости (https://insights.ubuntu.com/20...)
  2. OpenNews: Уязвимость в LXC, позволяющая получить доступ к файлам вне контейнера
  3. OpenNews: Выпуск системы управления контейнерами LXC 2.0
  4. OpenNews: Выпуск системы управления контейнерами LXC 1.1, со встроенной поддержкой CRIU
  5. OpenNews: Релиз LXC 1.0, системы управления изолированными контейнерами Linux
  6. OpenNews: Выпуск системы управления контейнерами LXD 2.8
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/47165-lxc
Ключевые слова: lxc, container, cgroup
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (21) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, pavlinux (ok), 00:49, 09/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Оно на XFS уже научилось работать?
     
     
  • 2.2, KonstantinB (ok), 01:23, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А что там не работает?  Квоты?
     
     
  • 3.3, pavlinux (ok), 01:51, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А что там не работает?  Квоты?

    При очень большом интенсиве, при создании каталогов (хотя б скопировать исходники Qt), ядро отваливается со всякими NULL deref.
    Ещё косяк в cgroups при прогоне в LXC LTP-тестов http://linux-test-project.github.io/
    mkdir возвращал true, а каталог не создавался.  

    Разрабы замечательно послали, типа "Какой идиот использует LTP в 2017 году" :)

     
     
  • 4.5, gogo (?), 08:46, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • –7 +/
    Голословный наезд.
    Прям как Ежик из Смешариков - "Если я вот так выгинаюсь, то у меня там косточка щелкает". Так не выгинайся! ; )
    Напиши баг-рапорт, если есть что сказать по существу, а не обгаживай по мелочам за спиной.
    Кто захочет, чтобы эта штука работала - поставит и особых проблем не будет.

    Годная вещица.
    А баги на то и баги, чтобы со временем быть пофиксенными.

     
  • 4.6, KonstantinB (ok), 11:28, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А багрепорты есть?
    Я на стейдже использую на xfs (Ubuntu Trusty, lxc 2.0.7), проблем не замечал, но там, правда, интенсивной нагрузки никогда не было.
     
     
  • 5.23, pavlinux (ok), 03:33, 25/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > А багрепорты есть?

    Хуерепорты, мне своей работы мало...
    LCX Project sponsored by Canonical Ltd. Про XFS by SGI уж молчу...
    Вот и пускай сами меня ловят, за бабло будут им репорты

     
  • 4.8, Аноним (-), 15:00, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    >ядро отваливается со всякими NULL deref

    А нехрен в ядро проприетарные блобы совать (да-да, от Нивидии).

     
     
  • 5.10, пох (?), 18:14, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >>ядро отваливается со всякими NULL deref
    > А нехрен в ядро проприетарные блобы совать (да-да, от Нивидии).

    да-да, проблемы с mkdir на xfs - это ж все из-за нвидии.


     
     
  • 6.12, ананим.orig (?), 04:21, 10/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Да-да, с блобом нИвидии проблемы саморассосутся.
    Типа нет исходников и нет проблем.
    Зыж
    Тпрухин, ты штоли?
     
  • 6.20, pavlinux (ok), 00:11, 14/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >>>ядро отваливается со всякими NULL deref
    >> А нехрен в ядро проприетарные блобы совать (да-да, от Нивидии).
    > да-да, проблемы с mkdir на xfs - это ж все из-за нвидии.

    Нигадяи :)

     
  • 4.9, пох (?), 18:14, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Разрабы замечательно послали, типа "Какой идиот использует LTP в 2017 году" :)

    действительно, неидиоты же используют только те тесты, которые им удобны.
    Фигак-фигак, в продакшн, версия 2.1 (хотя по сути - 0.2.1), инвесторы это любят.

      

     
  • 4.15, Nicknnn (ok), 08:04, 12/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >> А что там не работает?  Квоты?
    > При очень большом интенсиве, при создании каталогов (хотя б скопировать исходники Qt),
    > ядро отваливается со всякими NULL deref.

    Как это связано с LXC?


     
     
  • 5.16, пох (?), 14:58, 12/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Как это связано с LXC?

    проявляется, когда исходники qt в контейнере человек копирует, или тест в нем запускает, чего непонятно?
    Еще бы ядро валилось при попытке их копировать не в контейнере...

     
  • 2.14, Nicknnn (ok), 07:57, 12/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    а почему не должно? как связан "скрипт" для создания неймспейсов и cgroup с возможностью процессов создавать файлы на XFS?
     
     
  • 3.17, пох (?), 15:00, 12/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > а почему не должно? как связан "скрипт" для создания неймспейсов и cgroup
    > с возможностью процессов создавать файлы на XFS?

    больше проверок - больше шансов для рейса или локапа. Ну или просто сильнее тормозит - и опять больше шансов для рейса и локапа.

    Что вам мешает самому-то потестить, если интересно?

     
     
  • 4.18, Nicknnn (ok), 21:53, 12/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > больше проверок - больше шансов для рейса или локапа. Ну или просто
    > сильнее тормозит - и опять больше шансов для рейса и локапа.
    > Что вам мешает самому-то потестить, если интересно?

    Так мне интересно, хочу постестить. Но достаточно ли просто переложить исходники?
    Очевидно нет, так как павлинукс не привёл конфига контейнера, имя исходного образа. А без этой информации мой, я уверен успешный, тест ничего не покажет. Может он там докер образ крутил, на оверлейфс поверх xfs  без ftype=2. А с этим докероговном можно всё что угодно словить.

     
     
  • 5.21, пох (?), 18:05, 14/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Так мне интересно, хочу постестить. Но достаточно ли просто переложить исходники?

    ну так сделайте - мы хотя бы будем знать, что в простом случае-  недостаточно. Мне вот интересно, но не настолько, поскольку для работы прям щас - не требуется.

    > Очевидно нет, так как павлинукс не привёл конфига контейнера

    как и детального описания своего железа/доступных ресурсов и много чего еще. Но нам, в конце-концов, не на его системе надо чтоб работало, а на своей.
    Ссылка на LTP ж дана - что мешает попробовать? Можно прямо во всех наличных контейнерах.

    > А с этим докерог*вном можно всё что угодно словить.

    с overlay да, можно ничего не тестировать, даже на правильной xfs или на кошерном ext4 - оно все равно рассыплется. К тому же послезавтра их новая муха укусит, и они выпустят overlay3, или сразу 30.

     

  • 1.7, Страдалец (?), 11:38, 09/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А stateful snapshot у кого-нибудь работает? Это там где контейнер дампится вместе с содержимым памяти включая сетевые сокеты. Уже третий год жду пока заработает из коробки. Нет, я, конечно, по инструкции CRIU какую-то ночную сборку заставил работать, но это не продакшн.
     
  • 1.11, Аноним (-), 21:52, 09/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    С btrfs всё норм работает в продакшен достаточнно давно
     
  • 1.13, via (??), 23:24, 11/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    стоп, lxc-ls, lxc-start,... - это ж набор из lxc 1.0  В двойке чистая lxc с аргументами. Главное, с возможностью работы под обычным юзером
     
     
  • 2.19, Аноним (-), 20:42, 13/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Вы путаете с lxd, там как раз lxc и работа от юзера дефолт.
    В lxc есть работа от юзера, но довольно неудобная.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру