Skip to content

39 Namespaces Cgroups

39 Namespaces Cgroups

Играют важную роль в контейнеризации, позволяя создавать легковесные и изолированные среды выполнения (например, Docker-контейнеры).

Namespaces (пространства имен) обеспечивают изоляцию различных системных ресурсов между процессами. Каждый namespace создает отдельное пространство имен для определенного типа ресурса, что позволяет процессам внутри этого пространства видеть только свои собственные ресурсы.

unshare - эта команда используется для запуска программ с одним или несколькими новыми пространствами имен.

например:

# Запуск новой оболочки bash в отдельном mount namespace
unshare -m /bin/bash

# Теперь вы находитесь внутри новой оболочки bash с отдельным mount namespace
# Попробуйте смонтировать временную файловую систему
mount -t tmpfs none /mnt

# Проверьте точки монтирования
mount | grep /mnt 

Типы Namespaces:

1) Mount (mnt): Изолирует точки монтирования файловых систем unshare -m /bin/bash

2) Process ID (pid): Изолирует идентификаторы процессов**.** unshare -p --fork /bin/bash

3) Network (net):Изолирует сетевые интерфейсы.

unshare -n /bin/bash

4) Interprocess Communication (ipc):Изолирует объекты межпроцессного взаимодействия, такие как очереди сообщений.

unshare -i /bin/bash

5) UTS:Изолирует имя хоста и доменное имя. unshare -u /bin/bash hostname new_hostname

6) User (user):Изолирует идентификаторы пользователей и групп. unshare -U /bin/bash

7) Control group (cgroup):Позволяет изолировать контрольные группы процессов. ip netns add mynamespace ip netns exec mynamespace ip link set lo up

Cgroups (control groups) — это механизм в ядре Linux, который позволяет ограничивать, учитывать и изолировать использование ресурсов (CPU, память, диск I/O и т.д.) группами процессов.

Основные возможности cgroups:

Ограничение ресурсов: Можно задать лимиты на использование CPU, памяти и других ресурсов для группы процессов.

Учёт использования: Можно отслеживать использование ресурсов группой процессов.

Изоляция ресурсов: Группы могут быть изолированы друг от друга по использованию различных типов ресурсов.

Приоритеты: Можно задавать приоритеты использования ресурсов разными группами процессов.

Пример использования:

# Создаем новую группу в подсистеме cpu
sudo mkdir /sys/fs/cgroup/cpu/mygroup

# Ограничиваем использование CPU до 50%
echo 50000 | sudo tee /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us

# Добавляем процесс в нашу группу (предположим PID процесса 1234)
echo 1234 | sudo tee /sys/fs/cgroup/cpu/mygroup/tasks 
------------
# Создаем новую группу в подсистеме memory
sudo mkdir /sys/fs/cgroup/memory/mygroup

# Ограничиваем использование памяти до 100MB
echo $((100 * 1024 * 1024)) | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes

# Добавляем процесс в нашу группу (предположим PID процесса 5678)
echo 5678 | sudo tee /sys/fs/cgroup/memory/mygroup/tasks