JavaRush /Курси /Модуль 2: Fullstack /Управління ресурсами контейнерів

Управління ресурсами контейнерів

Модуль 2: Fullstack
Рівень 12 , Лекція 5
Відкрита

6.1 Причини обмежувати ресурси контейнерів

Docker круто справляється з керуванням ресурсами контейнерів, що дозволяє ефективно розподіляти потужність системи і уникати зайвих конфліктів між контейнерами. Це особливо важливо, щоб додаток на одному контейнері не "з'їдав" всі ресурси і не гальмував роботу інших сервісів. Обмеження таких ресурсів, як процесор (CPU) і пам'ять, допомагає уникнути перевантажень, підтримувати стабільність системи і гарантувати, що всі додатки працюють передбачувано. У цій лекції ми розберемо, як встановити ліміти на використання CPU і пам'яті, щоб система залишалася продуктивною навіть при високому навантаженні.

Чому важливо обмежувати ресурси контейнерів:

  1. стабільність: запобігання ситуаціям, коли один контейнер забирає всі ресурси, через що інші контейнери або сама система починають гальмувати.
  2. ефективність: краще розподілення ресурсів між контейнерами, щоб використовувати потужність системи максимально продуктивно.
  3. захист: обмеження ресурсів допомагає уникнути проблем з контейнерами, які можуть випадково або спеціально перевантажити систему.

6.2 Ліміти на використання CPU

Docker пропонує декілька способів обмеження використання CPU контейнерами.

Важливо! Під CPU тут мається на увазі одне ядро процесора, а не весь процесор. Чотириядерний процесор матиме 4 од. CPU.

1. Обмеження частки CPU (--cpu-shares)

Параметр --cpu-shares задає відносне значення пріоритетності використання CPU контейнером. Значення за замовчуванням — 1024. Це відносне значення, що означає, що контейнер з --cpu-shares=512 матиме половину пріоритету контейнера з --cpu-shares=1024.

Приклад використання:

У цьому прикладі контейнер high_priority_container матиме вищий пріоритет при розподілі CPU у порівнянні з low_priority_container.

Terminal

docker run -d --name low_priority_container --cpu-shares=512 nginx

docker run -d --name high_priority_container --cpu-shares=2048 nginx

2. Обмеження кількості CPU (--cpus)

Параметр --cpus задає точну кількість CPU, доступну для контейнера. Наприклад, значення 1.5 означає, що контейнер може використовувати 1.5 CPU.

Приклад використання:

Цей приклад обмежує контейнер limited_cpu_container використанням не більше ніж 1.5 CPU.

Terminal


        docker run -d --name limited_cpu_container --cpus="1.5" nginx
    

3. Обмеження використання CPU часу (--cpu-quota і --cpu-period)

Параметри --cpu-quota та --cpu-period дозволяють більш детально налаштувати використання CPU. --cpu-period задає інтервал часу в мікросекундах (за замовчуванням 100000), а --cpu-quota задає максимально допустимий час використання CPU за цей період.

Приклад використання:

У цьому прикладі контейнер custom_cpu_quota_container використовуватиме не більше 50% CPU (25000/50000).

Terminal


        docker run -d --name custom_cpu_quota_container --cpu-period=50000 --cpu-quota=25000 nginx

6.3 Ліміти на використання пам'яті

Обмеження пам'яті дозволяє контролювати, скільки оперативної пам'яті може використовувати контейнер. Це допомагає уникнути ситуації, коли один контейнер починає "з'їдати" всю пам'ять, впливаючи на інші процеси і контейнери.

1. Обмеження максимальної кількості пам'яті (--memory)

Параметр --memory задає верхню межу пам'яті, яку може використовувати контейнер. Якщо контейнер перевищить цей ліміт, система його завершить.

Приклад використання:

Цей приклад обмежує контейнер limited_memory_container використанням не більше 512 MB оперативної пам'яті.

Terminal

docker run -d --name limited_memory_container --memory="512m" nginx

2. Обмеження обсягу підкачки пам'яті (--memory-swap)

Параметр --memory-swap задає загальний ліміт для оперативної пам'яті та підкачки. Наприклад, якщо --memory встановлено на 512 MB, а --memory-swap на 1 GB, контейнер зможе використовувати до 512 MB оперативної пам'яті та ще 512 MB підкачки.

Приклад використання:

Цей приклад обмежує контейнер swap_limited_container використанням 512 MB оперативної пам'яті та 512 MB підкачки.

Terminal

docker run -d --name swap_limited_container --memory="512m" --memory-swap="1g" nginx

3. Обмеження використання пам'яті без підкачки (--memory-swap=-1)

Щоб заборонити використання підкачки, встановіть параметр --memory-swap в значення -1.

Приклад використання:

Цей приклад обмежує контейнер no_swap_container 512 MB оперативної пам'яті без можливості використовувати підкачку.

Terminal

docker run -d --name no_swap_container --memory="512m" --memory-swap="-1" nginx

6.4 Практичні сценарії

1. Запуск високопріоритетних і низькопріоритетних задач

Якщо на одному сервері виконуються як важливі, так і другорядні задачі, параметр --cpu-shares допомагає розподілити ресурси так, щоб критично важливі задачі отримали більше CPU.

Terminal

docker run -d --name high_priority_task --cpu-shares=2048 my_high_priority_image
docker run -d --name low_priority_task --cpu-shares=512 my_low_priority_image

2. Обмеження ресурсів для тестування

Для тестування додатків в умовах обмежених ресурсів можна задати жорсткі ліміти на CPU і пам'ять. Це допомагає зрозуміти, як додаток буде працювати за таких обмежень.

Terminal

docker run -d --name test_container --cpus="1" --memory="256m" my_test_image

3. Захист від виснаження ресурсів

Щоб уникнути ситуації, коли один контейнер використовує всі доступні ресурси системи, можна встановити ліміти на пам'ять і CPU для всіх контейнерів.

Terminal

docker run -d --name isolated_container --cpus="2" --memory="1g" my_app_image
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ