NetworkAdmin.ru
4.78K subscribers
224 photos
26 videos
2 files
511 links
Авторский блог про сетевое и системное администрирование.

Сайт: networkadmin.ru
Реклама: @dad_admin
Биржа: https://telega.in/c/networkadminru
Download Telegram
👓 Изоляция процессов без Docker

В linux есть встроенный механизм изоляции системных ресурсов - namespaces. Именно на нем основаны контейнеры вроде docker и LXC. Но namespaces можно использовать и напрямую без всяких надстроек.

Namespace - это способ ядра linux изолировать разные части системы: процессы, сеть, точки монтирования, пользователей и т.д.
Каждое приложение может жить в своем отдельном пространстве, не видя другие процессы и ресурсы.


▪️ Пример 1: изоляция процессов и монтирования. Запустим новую оболочку bash в отдельном пространстве процессов (PID) и монтирования (mount).


unshare --pid --mount --fork --mount-proc /bin/bash
ps aux

USER PID %CPU %MEM COMMAND
root 1 0.0 0.0 /bin/bash
root 18 0.0 0.0 ps aux


Здесь процесс bash получил PID 1 - он главный в своем изолированном пространстве. Теперь создадим изолированное монтирование:


mkdir /tmp/testdir /mnt/testdir
mount --bind /tmp/testdir /mnt/testdir
mount | grep testdir

/dev/sda3 on /mnt/testdir type ext4 (rw,relatime)


На хосте это монтирование вы не увидите, оно существует только внутри namespace.

▪️ Просмотр активных namespaces. Список всех пространств можно увидеть с помощью lsns:


lsns

NS TYPE NPROCS PID USER COMMAND
4026532480 pid 3 123 root unshare --pid --mount --fork --mount-proc /bin/bash
4026532481 mnt 3 123 root └─/bin/bash


Тут видны PID и MOUNT пространства, созданные нашей командой unshare. Если у вас работают контейнеры, их namespaces тоже будут отображены здесь.

▪️ Пример 2: запуск процессов в чужом namespace. Можно подключиться к уже существующему пространству с помощью nsenter.

Предположим, у нас есть процесс bash с PID 123. Подключимся к нему и запустим команду top:


nsenter -t 123 -p -m top


Теперь top выполняется внутри того же PID и mount namespace, что и процесс bash.

▪️ Полезные инструменты

unshare - создает новые namespaces.
nsenter - позволяет войти в уже существующие.
systemd-nspawn - мини-контейнерная система от systemd.

Пример запуска простого контейнера через systemd-nspawn:


systemd-nspawn -D /var/chroot/debian bash


#linux #namespaces

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11😁2