різниця між групами c та просторами імен


85

Нещодавно я почав вивчати docker, і, схоже, більшу частину важких завдань робить ядро ​​Linux, використовуючи простори імен та cgroups.

Кілька речей, які я вважаю заплутаними:

  1. У чому різниця між простором імен та групою? Які різні випадки використання вони розглядають?

  2. Що докер застосував на вершині цього, щоб здобути популярність?

  3. Я хотів би знати внутрішні елементи цих функцій та те, як вони реалізовані.


Відповіді:


108

Правильні посилання для цих двох понять були зафіксовані в PR 14307 :

Під капотом Docker побудований на таких компонентах:

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

З:

  • cgroup : Контрольні групи забезпечують механізм об'єднання / розподілу наборів завдань та всіх їх майбутніх дітей у ієрархічні групи зі спеціалізованою поведінкою.
  • Простір імен : обгортає глобальний системний ресурс у абстракцію, завдяки чому процесам у просторі імен здається, що вони мають свій власний ізольований екземпляр глобального ресурсу.

Коротко:

  • Cgroups = обмежує, скільки ви можете використовувати;
  • простори імен = обмежує те, що ви можете бачити (і, отже, використовувати)

Див. Більше в " Анатомія контейнера: простори імен, групи та магія файлової системи " Джерема Петаццоні .

Групи включають вимірювання та обмеження ресурсів:

  • пам'яті
  • ЦП
  • блок вводу-виводу
  • мережі

Простори імен надають процесам власний погляд на систему

Кілька просторів імен:


Дякую. Є чи на chrootоснові деякого простору імен? Чи chrootможна замінити якимось простором імен?
Тім,

1
Ні, chroot не базується на просторі імен: див. Itnext.io/… . Більше ніж через три роки, майте на увазі, що новий Docker (19.03, все ще у бета-версії) можна запускати без коренів: 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, для створення таких служб, як:

ресурси:
  межі:
    процесор: "0,1" (100 мілікорів)
    пам'ять: 50M

Тут, у цьому прикладі ми явно просимо групи розподілити ці ресурси до конкретного контейнера.


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


Існує 6 типів просторів імен:
1. mount ns - для файлової системи.
2. UTS (Унікальний розподіл часу) ns - який перевіряє різні імена хостів запущених контейнерів
3. IPC ns - міжпроцесний зв'язок
4. Мережа ns - піклується про різне розподілення ip для різних контейнерів
5. PID ns - ізоляція ідентифікатора процесу
6. користувач ns - різне ім'я користувача (uid)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.