Пространство имен Linux (пространство имен)
Пространство имен Linux — это механизм изоляции, который позволяет разделить глобальные системные ресурсы на несколько независимых и изолированных частей, так что процессы, работающие в разных пространствах имен, не знают о существовании других пространств имен. Это обеспечивает изоляцию таких ресурсов, как процессы, сети, файловые системы, IPC (межпроцессное взаимодействие), и снижает потенциальные риски безопасности. Например, запуск приложений в контейнерах повышает безопасность системы, избегая прямого воздействия на хост-систему.
Группы управления Linux (Cgroups)
Группы управления — это механизм управления ресурсами, который позволяет применять ограничения ресурсов и настройки приоритета к группам процессов или задач. Его можно использовать для ограничения использования ресурсов группой процессов, таких как ЦП, память, дисковый ввод-вывод и т. д., для обеспечения распределения ресурсов и управления ими.
Проще говоря, под Cgroups можно понимать земельный участок дома, ограничивающий размеры дома, а Namespace — это стена дома, изолирующая его от соседей.
Используя пространства имен и группы управления, вы можете более эффективно использовать системные ресурсы, избегать непроизводительной траты ресурсов и гарантировать, что критически важные задачи получают достаточную поддержку ресурсов, тем самым повышая производительность и эффективность системы. Эти возможности имеют решающее значение для современных облачных вычислений и контейнерных развертываний. Наиболее типичная контейнерная технология Docker реализована с использованием пространства имен и cgroup.
Ниже приведены типы пространств имен, предоставляемые Linux. Благодаря сочетанию этих пространств имен можно достичь сложных конфигураций изоляции и виртуализации.
Linux пространство имен ПИД-это Linux Namespace изA-тип, используемый для изоляции процесс ИДЕНТИФИКАТОР. в пространство имен PIDсередина, каждый процесс имеет независимый исходный процесс ID, чтобы вы могли иметь один и тот же процесс в разных пространствах имен. ID не конфликтует. каждый ребенок пространство имен У ПИДсередина есть все PID для 1 из init процесс,Соответствующий родительпространство именсерединаизпроцесс,отецпространство именверноребенокпространство рабочие статусы имен не изолированы, а каждый одинребенок Пространство намиизолированы друг от другаиз.
Как показано ниже: В подпространстве имен A и B Есть процесс в ID=1 из init процесс, два процесса на самом деле являются родительским пространством имениз 55 № и 66 Номер процесса ID — это просто виртуализированное пространство.
Linux пространство имен UTS используется для изоляции имени хоста и имени домена. существовать пространство имен UTSсередина, каждый процесс может иметь независимое от имени хоста и доменное имя (имя узла, имя домена), так что существуют разные изпространства именасередина имеют разные идентификаторы, что обеспечивает изоляцию имени хоста и имени домена.
nodename: Это уникальное имя, используемое для идентификации хоста, часто также называемое именем хоста. Он используется в сети существования середина для уникальной идентификации компьютера. domainname: Это часть имени домена хоста, обычно используемая для идентификации сетевого домена, к которому он принадлежит. Доменное имя обычно состоит из нескольких частей, расположенных справа налево, с точками между каждой частью. "." Отдельный. Доменное имя используется для связи имени хоста с определенным сетевым доменом, тем самым помогая находить компьютеры и получать к ним доступ по всему миру.
В контейнерной технологии с использованием UTS Namespace после карантина,Контейнеризпроцесс может иметь независимое имя хоста и доменное имя и не будет конфликтовать с хост-системой или другим контейнерсерединаизпроцессом. так,контейнер внутри приложений может распознавать их существование независимо от запуска середина хоста,Это упрощает настройку
Linux Mount Namespace Используется для изоляции точек монтирования файловой системы. проходить Mount Пространства имен разных исходных процессов могут существовать в разных точках создания для создания разных иерархий файловой системы, даже если существование выполняется на одном и том же хосте. Эта изоляция делает процесссуществоватьодин Mount Namespace серединаизустанавливатьдействоватьвернодругой Mount Namespace серединаизпроцесс невидим, что обеспечивает уровень изоляции файловой системы.
В контейнерной технологии с использованием Mount Namespace после карантина,Внутренний контейнер файловой системы изолирован от хост-системы и другого контейнера. так,Каждый контейнер может иметь независимое представление файловой системы.,контейнер Внутриизпроцесс Могу получить доступ только к себеизиерархия файловой системы,и Невозможно получить доступ к другому контейнеру или хост-системе из файловых систем.
Linux Network Namespace используется для Изолированная сетевой стек. проходить Network Пространство имен, разные исходные процессы могут иметь независимость от сетевого оборудования, IP Адреса, таблицы маршрутизации, сетевые подключения и сетевое пространство именасерединаиз других сетевых ресурсов Такая изоляция делает процесссуществовать один. Network Namespace статус конфигурации серединаизсети другим Network Namespace серединаизпроцесс невидим, что позволяет достичь сетевого уровня изоляции.
В контейнерной технологии с использованием Network Namespace После изоляции внутренний процесс контейнера становится независимым от сетевой среды, что делает контейнерсуществовать изолированным друг от друга в сети. Каждый контейнер может иметь свое сетевое устройство, IP-адрес、таблица маршрутизацииисетевое соединение,контейнеры не будут мешать друг другу,Это не будет мешать хост-системе.
Linux User Namespace Используется для изоляции пользователей и групп пользователей. ИДЕНТИФИКАТОР. проходить User Пространство имен, разные исходные процессы могут иметь независимые группы пользователей и пользователей. ID, это может существовать различное изпространство именасередина имеют разные идентификаторы, тем самым обеспечивая изоляцию пользователя и группы пользователей.
В контейнерной технологии с использованием User Namespace После изоляции контейнеризпроцесс может иметь независимые группы изпользователей. ID,èЭто не будет конфликтовать с хост-системой или другими пользователями. Таким образом, приложение внутренней обработки контейнера может быть запущено от имени обычного пользователя.,Нет необходимости в существовании хостинговой системы серединасоздавать идентичную учетную запись пользователя.
существовать Docker По умолчанию не включено в User Namespace изоляция из,Главным образом потому, что для требует особой координации и управления после включения.,Например, после изоляции пользователь на хосте больше не является тем же пользователем.,Тогда может быть нарушен доступ к файловой системе.
Linux пространство имен IPCиспользуется для Изолировать процессобщение междуресурс.существовать пространство имен IPCсередина,каждыйпространство все имена независимы от IPC Ресурсы, такие как очереди сообщений, семафоры и общая память, создают разные пространства. имясерединаизпроцесс не имеет прямого доступа к другому пространству имениз IPC ресурсы, тем самым достигая IPC Ресурсная изоляция.
В контейнерной технологии с использованием IPC Namespace После карантина процесс производства контейнеров стал независимым от IPC ресурсы, тем самым избегая помех и конфликтов ресурсов между различными контейнеризпроцессами. Каждый контейнер может иметь свое собственное пространство имен IPC разрешает доступ только к одному и тому же пространству при обмене данными между процессами внутри контейнераизпроцесссуществовать. имениз IPC Ресурсы и не могут напрямую получить доступ к другим контейнерам. IPC ресурс.
существовать Linux Система середина предоставляет следующие часто используемые из Создания. пространств имен и управление имииз API:
существует Этот код середина выполняет sh команду и установите системный вызов clone flage параметрдля CLONE_NEWPID, то есть при выполнении main Методом будет создательодинновыйизпроцесс(sh) и создатель. пространство имен ПИД, сделай sh Процесс и main Изоляция процесса.
package mainimport ( "log" "os" "os/exec" "syscall")func main() { cmd := exec.Command("sh") cmd.SysProcAttr = &syscall.SysProcAttr{ Cloneflags: syscall.CLONE_NEWPID, } cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { log.Fatal(err) }}
Скопировать код
при выполнении go run main.go После этого откройте новый из shell страница, выполнить ps aux Взгляните на номер стартового процесса = 156.
а затем использовать pstree Глядя на дерево процессов, мы видим это по main Позвони sh командный процесс ID=678
Итак, вернемся к исполнению go run main.go из shell На странице выполните ehco $$, вы можете найти текущий процесс ID=1, это можно доказать, существуетновыйиз пространство имен PIDВнизпроцесс ID 1 Картирование из процесса ID 678 , Это подтверждает, что процесс успешно изолирован.
существуют На основе предыдущего кодекса из,Нам нужно только добавить флаг клонирования системного вызова CLONE_NEWNET.,при выполнении main Методом будет создательодинновыйизпроцесс(sh) и создатель. PID и NET пространство имен, так что sh Процесс и main процесс &Сетевая изоляция одновременно。
package mainimport ( "log" "os" "os/exec" "syscall")func main() { cmd := exec.Command("sh") cmd.SysProcAttr = &syscall.SysProcAttr{ Cloneflags: syscall.CLONE_NEWPID | syscall.CLONE_NEWNET, } cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { log.Fatal(err) }}
Скопировать код
при выполнении go run main.go После этого откройте новый из shell страница, выполнить Ifconfig, вы можете увидеть информацию о месте проживания, связанную с сетью.
Затемсуществовать go run main.go бегать shell страница, выполнить Если настроить, то можно обнаружить, что информации нет, а это значит, что сеть изолирована.
существовать Linux середина,cgroups(Контроль Группы) — метод, используемый в Управлении. Применения ограничивают механизм использования ресурсов процесса. Предпочтительным администратором будет группа существующих производственных организаций или более. cgroups середина,идлякаждый cgroup Выделите конкретные лимиты ресурсов, например Процессор, память, диск Ввод-вывод, пропускная способность сети и т. д. проходить cgroups,Обеспечивает лучший контроль над системными ресурсами.,Достичь изоляции ресурсов и справедливого распределения,Не позволяйте определенным программам занимать слишком много ресурсов и вызывать чрезмерную нагрузку на систему.
Cgroups Есть три основных компонентыкомпозиция:
ребеноксистема(subsystem):ребеноксистемададля управления Определенный тип ресурса — модуль, каждая система ребенка отвечает за управление определенным типом ресурсов, например Процессор, память, диск Ввод-вывод, пропускная способность сети и т. д.
Cgroup Hierarchies(Cgroup Иерархии): Иерархии используется для организации и управления Cgroup изструктура。один Hierarchies одним или несколькими subsystem композиция. Иерархии Формируем древовидную структуру, каждый узел представляет собой Группа, тот же уровень Cgroup Между ними есть уровень. Иерархии позволять Cgroup существоватьдругойиз subsystem середина объединяется и вкладывается в несколько слоев из Управление структура структуры. Система распознает каждое subsystem создаватьодинтихийраспознаватьиз Hierarchy。
Cgroups (контрольные группы): Cgroup это высшее из Управление В результате единица, это совокупность процессиз-коллекций, организованных существующих один конкретных из Cgroup Иерархия середина и подлежит приезду на этот уровень середина контроллера из-за ограничений ресурсов и управления.
Связь объясняется следующим образом:
для управления CPU ресурс.этопозволятьнастраиватьпроцессиз CPU использовать квоту скорости и временного интервала, тем самым ограничивая процесс CPU заняты, следующие cpu Некоторые распространенные управляющие файлы в детской системе:
cpu.cfs_quota_us
:Этот файл используется для установки cgroup серединапроцессиз CPU квота. Единица измерения — микросекунда (мкс), что означает существование каждого cpu.cfs_period_us
В течение микросекунд cgroup серединаизпроцесс Можетиспользоватьиз CPU количество времени. если cpu.cfs_quota_us
изценитьдля -1,это значит cgroup серединаизпроцесс Нет CPU использоватьпредел。cpu.cfs_period_us
:Этот файл используется для установки cgroup серединапроцессиз CPU период времени. Единица измерения — микросекунда (мкс), что означает, что в течение периода существованияодин, cgroup серединаизпроцесс Можетиспользоватьиз CPU общее количество времени. cpuacct: используется для статистики и записи группа процессов (cgroup) серединаиз Использование ЦП, следующая система cpuacct ребенок из Некоторые распространенные файлы статистики:
cpuacct.usage
: Этот файл записывает cgroup серединавсепроцессиз CPU использовать Общее время и, в наносекундах для. Вы можете просмотреть его, прочитав этот файл cgroup серединаизвсепроцессизносиз CPU время.cpuacct.usage_percpu
: Этот файл записывает cgroup серединакаждый CPU основнойиз CPU использовать время в наносекундах для. Если в системе несколько CPU основной, этот файл будет отображать каждый основнойиз CPU использоватьвремя.cpuacct.stat
: В этом документе представлена информация о CPU использовать время из подробной статистической информации, включая состояние пользователя и состояние ядра. CPU время.для управления CPU Сходство и назначение узлов. Какой процесссуществовать можно установить CPU Ниже приведены сведения о запуске на ядре и о том, какие узлы памяти можно использовать. cpuset детская система из Некоторые общие управляющие файлы
cpuset.cpus
:Этот файл используется для установки cgroup серединапроцесс Можетиспользоватьиз CPU основной。Можетиспользовать CPU основной список, диапазон (например. "0-2,4"),илииспользоватьидентификацияиз CPU идентификатор (например, "0-2,4,^1" выражатьиспользовать 0、2、4 Числоосновной,но нетиспользовать 1 числовое ядро)cpuset.mems
:Этот файл используется для установки cgroup серединапроцесс может использоватьизузла памяти (NUMA Узел). Можно использовать узел из списка или диапазона, например "0,1" выражатьиспользоватьузел 0 и узел 1cpuset.cpu_exclusive
:Этот файл используется для установка будет cgroup серединаиз CPU Лимит выделения для эксклюзива. Настройки 1 означает исключительность, только существование и ничего больше cgroup использоватьчас,талантпозволятьиспользоватьобозначениеиз CPU основнойcpuset.mem_exclusive
:Этот файл используется для установка будет cgroup серединаиз Внутрижитьузел Лимит выделения для эксклюзива. Настройки 1 означает исключительность, только существование и ничего больше cgroup использоватьчас,Только лучшеиспользовать указывает узел памяти.memory:для управленияипределпроцесс Группа(cgroup)серединаиз Внутрижитьресурсиспользовать。memory
ребеноксистемапозволятьдлякаждый cgroup Устанавливайте ограничения памяти и контролируйте процесссуществовать cgroup серединаиспользоватьиз Внутрижить量。 Ниже приводится memory Некоторые распространенные управляющие файлы в детской системе:
memory.limit_in_bytes
:Этот файл используется для установки cgroup серединапроцессиз Ограничение памяти. можно установить одно целочисленное значение, обозначающее cgroup середина Все процессы могут использовать лимит памяти, измеряемый в байтах. Запросы на использование памяти, превышающие этот лимит, будут отклонены и могут подлежать въезду. OOM(Out of Memory)событиеиз Влияние。memory.soft_limit_in_bytes
:Этот файл используется для установки cgroup серединапроцессизмягкий лимит памяти. Мягкий предел памяти — это нижнее предельное значение. Когда системной памяти недостаточно, это может предотвратить захват чрезмерных ресурсов памяти, но обычно этого не происходит. OOM событиеmemory.memsw.limit_in_bytes
:Этот файл используется для установки cgroup серединапроцессиз Память + пространство подкачки (своп) из лимита. можно установить одно целочисленное значение, обозначающее cgroup серединавсепроцесс Можетиспользоватьиз Внутрижить+swap из верхнего предела, единица измерения — байты.memory.memsw.usage_in_bytes
:Этот файл записывает cgroup серединавсе процессытекущиеизпамяти+своп использовать количество в байтах для единиц измерения. для управленияипределпроцесс Группа(cgroup)серединаиз Доступ к устройству。devices
ребеноксистемапозволятьсуществовать cgroup середина Настройте, к каким устройствам процесс может получить доступ и как получить доступ к этим устройствам. Ниже приводится devices Некоторые распространенные управляющие файлы в детской системе:
devices.allow
: Этот файл используется для установкипозволятьпроцесссуществовать cgroup серединадоступиз Список устройств。Можетпроходитьоборудованиеизосновное устройство№ и Второсортныйоборудование Число Приходитьобозначениеспецифическийизоборудование。Например,c 1:3 rwm
выражатьпозволятьпроцесссуществовать cgroup середина чтение, запись и выполнение номера устройства для 1:3 из символьного устройстваdevices.deny
: Этот файл используется для установки Нетпозволятьпроцесссуществовать cgroup середина Доступ из списка устройств. и devices.allow
Вместо этого администраторы могут указать здесь существование не лучшего доступа с устройств. используется для Воляпроцесс Группа(cgroup)серединаиз Теги сетевого трафика(classify)дляидентификацияиз Категория сети(class)。net_cls
ребеноксистемапозволятьдля cgroup серединаизпроцесс Установите теги одной сетевой категории, чтобы вы могли существовать Linux Ядро и сетевой уровень классифицируют сетевой трафик и управляют им. Ниже приводится net_cls Детская система из общих управляющих файлов:
net_cls.classid
: Этот файл используется для установки cgroup серединапроцессиз Теги веб-категорий. Тег категории сети равен единице. 32 Целое число без бита, которое идентифицирует определенный класс сети. Когда процесс отправляет или получает сетевой трафик, Linux Ядро классифицирует сетевой трафик на основе этого тега.
net_cls
Детская система отвечает только за разбивку сетевого трафика по определенным категориям сети. Она сама не ограничивает пропускную способность сети и не выполняет другие сетевые элементы управления. Фактический контроль сетевого трафика требует использования других инструментов (таких как tc)Приходить Заканчивать。поэтому,существоватьиспользоватьnet_cls
При установке системы ее необходимо комбинировать с другими инструментами управления сетью для достижения более комплексного контроля и управления сетью.
Используется для группы обработки (cgroup) серединаиз сетевого трафика для установки приоритета сети (сетевой priority)。net_prio
ребеноксистемапозволятьадминистратордля cgroup серединаизпроцесс Установите определенный приоритет сети, чтобы контролировать его существование в сети с приоритетом серединаиз. Ниже приводится net_prio Детская система из общих управляющих файлов:
net_prio.ifpriomap
: Этот файл используется для установки cgroup серединапроцессизсетевое сопоставление приоритетов (интерфейс priority карта). Настроив отношения сопоставления, вы можете cgroup серединаизпроцессиз отображение приоритетов сети приезжать по конкретному сетевому интерфейсу (сетевому интерфейс).net_prio.prioidx
: Этот файл используется для установки cgroup серединапроцессизтихий признанный индекс приоритета сети (приоритет индекс). Индекс приоритета — это целочисленное значение, представляющее приоритет сети.
net_prio
Детская система существованияконтейнера с технологией середина особенно полезна, когда на одном хосте работает несколько контейнеров, и может cgroup настраиватьдругойизприоритет сети,Чтобы добиться сетевой изоляции и контроля ресурсов между контейнерами. Это гарантирует, что сетевые передачи между разными контейнерами не будут мешать друг другу.,Улучшите производительность и стабильность системы и сети.
для управления ограничить группу процессов (cgroup) серединаиз блочного устройства (Block Device)I/O(Input/Output)ресурсиспользовать。blkio
детская система предпочитает администратора для каждого cgroup Настроить блокирующее устройство из I/O Ограничивайте и контролируйте. Ниже приводится blkio Детская система из общих управляющих файлов:
blkio.weight
: Этот файл используется для установки cgroup серединапроцессизблочное оборудование I/O масса. блокировать устройство I/O Веса используются для существования нескольких cgroup блокировать устройство I/O Распределение ресурсов: чем выше вес, тем выше вес cgroup Чем больше блочного оборудования вы получите I/O ресурс.blkio.time
: Этот файл используется для установки cgroup серединапроцессизблочное оборудование I/O временной интервал кусочек) квота. Может быть ограничено cgroup серединапроцесссуществоватьблокировать оборудование в течение определенного периода времени I/O действоватьblkio.throttle.read_bps_device
: Этот файл используется для установки cgroup серединапроцессизблочное оборудованиескорость чтенияпредел。Может Настроить блокирующее устройство изосновное устройство№ и Второсортныйоборудование Число以及скорость чтенияизпредел,Предотвратите процесс от чрезмерного чтения устройства.blkio.throttle.write_bps_device
: Этот файл используется для установки cgroup серединапроцессизблочное оборудованиескорость записипредел。Может Настроить блокирующее устройство изосновное устройство№ и Второсортныйоборудование Число以及скорость записиизпредел,Запретить процессу перезаписывать устройство.используется дляпределпроцесс Группа(cgroup)серединаизпроцессколичество。pids
детская система предпочитает администратора для каждого cgroup Установите максимальное количество улучшений для управления cgroup середина Можетбегатьпроцессколичество。pids
Детская система ограничивает только количество процессов и не ограничивает другие ресурсы. Ниже приводится net_prio Детская система из общих управляющих файлов:
pids.max
: Этот файл используется для установки cgroup серединапозволятьиз максимального количества процессов. можно установить одно целочисленное значение, обозначающее cgroup середина Можетбегатьмаксимумпроцессколичество。pids.current
: Этот файл показывает текущий cgroup серединаизпроцессколичество。Сначала мы можем перейти в /sys/fs/cgroup Посмотреть систему в разделе Оглавление тихий признанных создателей. Hierarchy Какие деревья:
Тогда мы можем пойти в /домой Оглавление Внизсоздаватьодин Настроитьиз Hierarchy Дерево:
Уведомлениесуществоватьребенок cgroup средний по умолчанию tasks В файле середина не будет никакого процесса ИДЕНТИФИКАТОР. Далее мы пойдем cgroup середина добавляет процесс для достижения контроля над ресурсами.
существовать cgroup-2 папкасередина, выводим текущий процесс id приезжать tasks файл, а затем просмотреть его с помощью proc середина Переписка cgroup Информацию можно найти на странице проживания. В настоящий момент процесс добавлен. cgroup-2 Контрольная группа не работает.
Тем не менее, возможности прибытия в настоящее время ограничены, мы настраиваем из cgroup-1 Hierarch Дерево еще не привязано подсистема, поэтому даже если текущий процесс будет добавлен в cgroup-1 Деревосерединаиз cgroup-2 В контрольной группе также не будет никаких эффектов контроля над ресурсами.
Затем мы будем использовать системную основу по умолчанию subsystem создаватьиз Hierarch дерево для управления ресурсами.
существуют В этой статье середина мы обсуждаем это подробно Linux пространство имен(Namespace)и Группы управления (Cgroups) эти две ключевые технологии. По пространству имен,Мы можем добиться изоляции ресурсов,позволятьпроцесссуществоватьнезависимыйизкосмоссерединабегать,Повысьте безопасность системы. И через контрольную группу,Мы можем эффективно управлять и ограничивать использование ресурсов процесса.,Избегайте пустой траты ресурсов,Улучшена производительность системы.