Изоляция контейнеров ОС и изоляция процесса

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

Каждый процесс уже изолирован от любого другого процесса, запущенного на том же ядре. Как эта изоляция отличается от изоляции, предоставляемой контейнерами?

Ответ 1

Если в "контейнерах операционных систем" вы подразумеваете что-то вроде Dockers, мой anwser на этом.

В Dockers вы можете ограничить использование памяти и процессора для каждого контейнера, установленного на той же машине. Здесь ссылка, которая объясняет, как и некоторые из различных возможностей:

https://docs.docker.com/engine/admin/resource_constraints/

Во время процессов вы можете сделать что-то подобное с объектами задания, они должны быть закодированы в вашем приложении.

https://msdn.microsoft.com/en-us/library/ms684161(VS.85).aspx

Надеюсь, я хорошо понял вопрос.

Ответ 2

Каждый процесс уже изолирован от любого другого процесса, запущенного на том же ядре.

Они? Как работает kill -9? Я могу просто протянуть руку и обработать любой процесс, который мне нравится, если у меня будет достаточно разрешений.

Контейнерные технологии, такие как Docker, rkt и LXC, используют две функции ядра Linux, в частности, для достижения "контейнеризации".

Первая namespaces. Из вводной записи входа в wikipedia:

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

Поэтому я могу использовать пространства имен, например, чтобы ограничить то, что может видеть процесс или с кем процесс может разговаривать, на уровне ядра. Я могу настроить межпроцессное общение и видимость файловой системы таким образом, что моя команда kill -9 не может видеть процессы, которые живут в другом пространстве имен, и как таковые не могут просто убить их волей-неволей.

Вторая - группы управления, которая позволяет ограничить ресурсы и изолировать. Группы позволяют нам рассказать о процессе "у вас может быть только 512 МБ памяти и 10% использования центрального процессора". Если у меня есть некоторая уродливая команда, способная использовать 99% процессора, другие процессы на хосте не будут изолированы от того, чтобы время от времени делиться 1% процессора. Однако с группами я могу это изменить. Я могу сказать, что моя уродливая команда "вы получаете только 25% от CPU в любой момент времени" и все, что у нее есть.

Здесь следует помнить, что это функции ядра Linux, а не какой-либо инструмент для системного менеджера или другой программный продукт. Docker/rkt/LXC - это платформы и инструменты, обернутые вокруг этих двух основных функций ядра, они просто используют то, что уже существует на самом базовом уровне, что делает его более удобным.