diff --git a/dev/fundamental/Процесс ОС.md b/dev/fundamental/Процесс ОС.md index 758333dd..2d64a004 100644 --- a/dev/fundamental/Процесс ОС.md +++ b/dev/fundamental/Процесс ОС.md @@ -20,7 +20,7 @@ parents: Процесс содержит в себе [потоки](Поток%20процесса%20ОС.md). -Под любой процесс создаются свои [Namespace](Namespace.md), которые позволяют изолировать процессы, запущенные на одном ядре друг от друга. +Под любой процесс создаются свои [Namespace](../linux/Namespace.md), которые позволяют изолировать процессы, запущенные на одном ядре друг от друга. *** ## Мета информация **Область**:: [[../../meta/zero/00 Архитектура ЭВМ|00 Архитектура ЭВМ]]] diff --git a/dev/linux/Control group.md b/dev/linux/Control group.md new file mode 100644 index 00000000..5c3dc7a1 --- /dev/null +++ b/dev/linux/Control group.md @@ -0,0 +1,43 @@ +--- +aliases: + - cgroup +tags: + - maturity/🌱 +date: + - - 2024-03-19 +zero-link: + - "[[../../meta/zero/00 Linux|00 Linux]]" +parents: + - "[[Контейнерная виртуализация]]" +linked: +--- +Control group — это механизм в ядре Linux, предоставляющий функциональность управления и ограничения ресурсами, используемыми [процессами](../fundamental/Процесс%20ОС.md), запущенными в системе. Это позволяет системному администратору распределять ресурсы, такие как CPU, память, [пропускная способность](../architecture/Throughput.md) сети и доступ к устройствам, между наборами процессов. + +С помощью cgroup можно: +- Управлять лимитом cpu. Как процент времени, который выделяется, так и CPU-sets, то есть какие ядра мы можем задействовать. Есть как общее ограничение, так и индивидуальные для подпроцессов +- Управлять ограничением по памяти. Имеется возможность настроить как максимальный так и минимальный порог. +- Доступ к устройствам +- Ограничения сети +- Ограничения дисковых операций + +С помощью cgroup можно: +- Ограничивать количество ресурсов, которые могут использовать процессы в группе. Например, можно задать максимальное количество CPU или объем оперативной памяти, которые доступны определенной группе процессов. +- Отслеживать использование ресурсов процессами или группами процессов. Это позволяет вести мониторинг загрузки системы и определять, какие процессы или группы процессов используют больше всего ресурсов. +- Управлять приоритетами доступа к ресурсам для различных групп процессов. Это может быть полезно для обеспечения того, чтобы критически важные задачи имели доступ к необходимым ресурсам в первую очередь. + +Утилита `cgroup` позволяет организовывать процессы в иерархические группы, что упрощает управление и делает систему более гибкой и масштабируемой. `cgroup` широко используется в технологиях виртуализации и контейнеризации, таких как [[../../meta/zero/00 Docker|Docker]] и Kubernetes, поскольку они предоставляют эффективные средства для изоляции и управления ресурсами виртуальных и контейнеризированных сред. +*** +## Мета информация +**Область**:: [[../../meta/zero/00 Linux|00 Linux]] +**Родитель**:: [[Контейнерная виртуализация]] +**Источник**:: +**Автор**:: +**Создана**:: [[2024-03-19]] +### Дополнительные материалы +- +### Дочерние заметки +```dataview +LIST +FROM [[]] +WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) +``` \ No newline at end of file diff --git a/dev/linux/Namespace.md b/dev/linux/Namespace.md new file mode 100644 index 00000000..c7a32844 --- /dev/null +++ b/dev/linux/Namespace.md @@ -0,0 +1,40 @@ +--- +aliases: +tags: + - maturity/🌱 +date: + - - 2024-03-20 +zero-link: + - "[[../../meta/zero/00 Linux|00 Linux]]" +parents: + - "[[Контейнерная виртуализация]]" +linked: +--- +Namespaces в Linux – это функция ядра, которая ограничивает видимость и доступность ресурсов процессам. Каждый namespace инкапсулирует определенный аспект системы, позволяя процессам работать в изолированной среде, как если бы они были единственными процессами в системе. + +Это ключевая технология для реализации контейнеров, таких как [[../../meta/zero/00 Docker|Docker]] и LXC, поскольку она позволяет каждому контейнеру иметь собственные сетевые интерфейсы, файловые системы, идентификаторы пользователей и процессов, не влияя на остальную часть системы. + +Linux поддерживает несколько типов namespaces: +1. **PID (Process ID) namespaces**: Изолируют пространство идентификаторов процессов. Это означает, что процессы в разных PID namespaces могут иметь одинаковые PID, но будут рассматриваться как разные процессы внутри их namespaces. +2. **Network namespaces**: Изолируют сетевые интерфейсы, таблицы маршрутизации, firewall правила, и прочие сетевые ресурсы. Это позволяет каждому namespace иметь собственный набор виртуальных сетевых интерфейсов и свою собственную сетевую конфигурацию. +3. **Mount namespaces**: Изолируют точки монтирования файловых систем. Это позволяет процессам в разных mount namespaces видеть разные файловые системы, что обеспечивает дополнительный уровень изоляции файлов и директорий. +4. **IPC (Inter-Process Communication) namespaces**: Изолируют IPC ресурсы, такие как очереди сообщений, разделяемые память и семафоры, позволяя процессам в разных IPC namespaces иметь раздельные IPC ресурсы. +5. **UTS (UNIX Time-sharing System) namespaces**: Позволяют иметь изолированные имена узлов и доменные имена. Это означает, что каждый UTS namespace может иметь свое собственное имя хоста и NIS доменное имя. +6. **User namespaces**: Изолируют идентификаторы пользователей и групп. В таком namespace, процесс может иметь привилегии root внутри namespace, не имея их за его пределами. + +Чтобы увидеть namespaces нужно в папке `/proc/*/ns` вызвать команду `sudo ls -la` +*** +## Мета информация +**Область**:: [[../../meta/zero/00 Linux|00 Linux]] +**Родитель**:: [[Контейнерная виртуализация]] +**Источник**:: +**Автор**:: +**Создана**:: [[2024-03-20]] +### Дополнительные материалы +- [Разделяй и властвуй. Изоляция процессов в Linux / Хабр](https://habr.com/ru/companies/otus/articles/673960/) +### Дочерние заметки +```dataview +LIST +FROM [[]] +WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) +``` \ No newline at end of file diff --git a/dev/linux/Виртуализация серверов.md b/dev/linux/Виртуализация серверов.md new file mode 100644 index 00000000..0b677d98 --- /dev/null +++ b/dev/linux/Виртуализация серверов.md @@ -0,0 +1,36 @@ +--- +aliases: + - виртуализации серверов +tags: + - maturity/🌱 +date: + - - 2024-03-20 +zero-link: + - "[[../../meta/zero/00 Linux|00 Linux]]" +parents: +linked: +--- +Виртуализация — это технология создания виртуальных (а не физических) версий серверов. Она позволяет разделять физические ресурсы компьютера на несколько виртуальных сред, каждая из которых может использовать и управлять ресурсами как независимый компьютер. + +Типы виртуализаций: +- [Контейнерная виртуализация](Контейнерная%20виртуализация.md) +- [Гипервизор](../../../../_inbox/Гипервизор.md) + +Виртуализация помогает увеличить эффективность использования ресурсов, упрощает управление ИТ-инфраструктурой, повышает гибкость и масштабируемость систем, а также улучшает безопасность и изоляцию приложений. + +![](../../meta/files/images/Pasted%20image%2020240320133203.png) +*** +## Мета информация +**Область**:: [[../../meta/zero/00 Linux|00 Linux]] +**Родитель**:: +**Источник**:: +**Автор**:: +**Создана**:: [[2024-03-20]] +### Дополнительные материалы +- +### Дочерние заметки +```dataview +LIST +FROM [[]] +WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) +``` \ No newline at end of file diff --git a/dev/linux/Контейнерная виртуализация.md b/dev/linux/Контейнерная виртуализация.md new file mode 100644 index 00000000..fc092557 --- /dev/null +++ b/dev/linux/Контейнерная виртуализация.md @@ -0,0 +1,39 @@ +--- +aliases: +tags: + - maturity/🌱 +date: + - - 2024-03-20 +zero-link: + - "[[../../meta/zero/00 Linux|00 Linux]]" +parents: + - "[[Виртуализация серверов]]" +linked: + - "[[../../../../_inbox/Гипервизор|Гипервизор]]" +--- +Контейнеризация — это метод [виртуализации серверов](Виртуализация%20серверов.md) на уровне операционной системы, позволяющий запускать и управлять множеством изолированных приложений (контейнеров) на одном хосте без необходимости виртуализировать каждую операционную систему. + +В отличие от традиционной виртуализации ([Гипервизор](../../../../_inbox/Гипервизор.md)), где каждая виртуальная машина работает со своей собственной операционной системой, контейнеры делят одну и ту же операционную систему хоста, но остаются изолированными друг от друга. Это достигается благодаря использованию [Namespace](Namespace.md) и [Control group](Control%20group.md) в Linux, которые обеспечивают изоляцию и управление ресурсами на уровне процессов. + +**Плюсы:** +- **Легковесность**: Контейнеры требуют меньше ресурсов, чем традиционные виртуальные машины, поскольку они делят ядро хост-системы и не нуждаются в своей собственной операционной системе. Это делает их идеальными для [микросервисной архитектуры](Микросервисная%20архитектура.md) и облачных приложений. +- **Портативность**: Приложения в контейнерах инкапсулируют все свои зависимости, что обеспечивает их безопасное и последовательное выполнение в любой среде, будь то локальный компьютер разработчика, тестовая среда или облачная инфраструктура. +- **Быстрое развертывание и масштабирование**: Контейнеры можно создавать, запускать и останавливать за секунды, что делает процесс развертывания и масштабирования приложений быстрым и эффективным. +- **Эффективность использования ресурсов**: Контейнеры позволяют более эффективно использовать системные ресурсы, повышая общую утилизацию инфраструктуры. + +[Docker](../../meta/zero/00%20Docker.md) является одной из самых популярных платформ для контейнеризации, предоставляя простые в использовании инструменты для создания, развертывания и управления контейнерами. Однако существует и другие технологии контейнеризации, такие как Kubernetes, который представляет собой систему оркестрации контейнеров, позволяющую автоматизировать развертывание, масштабирование и управление контейнеризированными приложениями. +*** +## Мета информация +**Область**:: [[../../meta/zero/00 Linux|00 Linux]] +**Родитель**:: [[Виртуализация серверов]] +**Источник**:: +**Автор**:: +**Создана**:: [[2024-03-20]] +### Дополнительные материалы +- +### Дочерние заметки +```dataview +LIST +FROM [[]] +WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) +``` \ No newline at end of file diff --git a/meta/files/images/Pasted image 20240320133203.png b/meta/files/images/Pasted image 20240320133203.png new file mode 100644 index 00000000..a94b3a43 Binary files /dev/null and b/meta/files/images/Pasted image 20240320133203.png differ diff --git a/meta/zero/00 Docker.md b/meta/zero/00 Docker.md index 68f17657..4224af3a 100644 --- a/meta/zero/00 Docker.md +++ b/meta/zero/00 Docker.md @@ -3,8 +3,11 @@ tags: - type/zero-link zero-link: - "[[00 DevOps|00 DevOps]]" +aliases: + - Docker +title: Docker --- -Для изоляции и управления ресурсами контейнеров активно используется [cgroup](Control%20group.md). Так же для изоляции активно используется [Namespace](Namespace.md). Все это функционал ядра Linux, поэтому не оказывает сильного влияния на производительность. Однако, нужно быть осторожным при работе с диском и сетью. С сутью больше всего проблем, например при запуске nginx можно получить просадку в 5%. +Для изоляции и управления ресурсами контейнеров активно используется [cgroup](../../dev/linux/Control%20group.md). Так же для изоляции активно используется [Namespace](../../dev/linux/Namespace.md). Все это функционал ядра Linux, поэтому не оказывает сильного влияния на производительность. Однако, нужно быть осторожным при работе с диском и сетью. С сутью больше всего проблем, например при запуске nginx можно получить просадку в 5%. Обычно docker запускается от root пользователя.