разница между контрольными группами и пространствами имен

85

Недавно я начал изучать докер, и кажется, что большая часть тяжелой работы выполняется ядром Linux с использованием пространств имен и контрольных групп.

Вот несколько вещей, которые меня смущают:

  1. В чем разница между пространством имен и контрольной группой? Какие варианты использования они адресованы?

  2. Что docker реализовал поверх этого, чтобы завоевать популярность?

  3. Я хотел бы знать внутреннее устройство этих функций и то, как они реализованы.

НенасытныйПутешественник
источник

Ответы:

108

Правильные ссылки для этих двух понятий были зафиксированы в PR 14307 :

В основе Docker лежат следующие компоненты:

В контрольных группах и namespacesвозможности ядра Linux

С участием:

  • cgroup : контрольные группы предоставляют механизм для агрегирования / разделения наборов задач и всех их будущих потомков на иерархические группы со специализированным поведением.
  • пространство имен : обертывает глобальный системный ресурс в абстракцию, благодаря которой процессам в пространстве имен кажется, что у них есть собственный изолированный экземпляр глобального ресурса.

Коротко:

  • Cgroups = ограничивает количество, которое вы можете использовать;
  • namespaces = ограничивает то, что вы можете видеть (и, следовательно, использовать)

См. Дополнительную информацию в статье Жерома Петаццони « Анатомия контейнера: пространства имен, контрольные группы и некоторая магия файловой системы ». .

Cgroups включают измерение и ограничение ресурсов:

  • объем памяти
  • Процессор
  • блок ввода / вывода
  • сеть

Пространства имен предоставляют процессам собственное представление о системе

Несколько пространств имен:

VonC
источник
Благодарю. Является ли на chrootоснове некоторого пространства имен? Может chrootбыть заменено каким-нибудь пространством имен?
Тим
1
Нет, chroot не основан на пространстве имен: см. Itnext.io/… . Однако более чем через три года имейте в виду, что новый Docker (19.03, все еще находится в стадии бета-тестирования) можно запускать как без root: github.com/moby/moby/blob/… . И может предоставлять ресурсы в пространстве имен хоста: github.com/moby/moby/pull/38913
VonC
Может chrootбыть заменено каким-нибудь пространством имен?
Тим
1
@Tim Не изначально. Может с pivot_root? ( unix.stackexchange.com/a/456777/7490 ) См. также github.com/vincentbernat/jchroot
VonC
1
twitter.com/b0rk/status/1225445956734390273 для иллюстрации контейнера
VonC,
6

cgroups ограничивает ресурсы, которые процесс или набор процессов может использовать. Эти ресурсы могут быть ЦП, памятью, сетевым вводом-выводом или доступом к файловой системе, в то время как пространство имен ограничивает видимость группы процессов для остальной части системы.

посетите для получения дополнительной информации Как группы ядра Linux и пространства имен сделали возможными современные контейнеры

капитанчхала
источник
2

Cgroups (группы управления) занимается управлением ресурсами.
Он определяет, сколько ресурсов хост-машины следует отдать контейнерам.

например: - мы определяем ресурсы в файле yaml docker-compose для создания таких сервисов, как:

Ресурсы:
  пределы:
    процессор: "0,1" (100 милликорей)
    память: 50 МБ

Здесь, в этом примере, мы явно просим контрольные группы выделить эти ресурсы конкретному контейнеру.


Пространства имен : обеспечивает изоляцию процессов, полную изоляцию контейнеров, отдельную файловую систему.


Существует 6 типов пространств имен:
1. mount ns - для файловой системы.
2. UTS (уникальное разделение времени) ns - который проверяет разные имена хостов запущенных контейнеров
3. IPC ns - межпроцессное взаимодействие
4. Network ns - заботится о различном распределении IP-адресов для разных контейнеров
5. PID ns - изоляция идентификатора процесса
6. пользователь ns- другое имя пользователя (uid)

Махима Мангал
источник