Установить ограничение CPU в Docker Compose - PullRequest
0 голосов
/ 09 января 2020

Я получил предварительный сервер, на котором я хотел бы развернуть множество микро-сервисов. Я использую docker -композитный файл для объявления всех сервисов и хотел бы установить ограничение ЦП. Я ссылаюсь на документы ниже: https://docs.docker.com/compose/compose-file/ Мой docker файл составления выглядит так:

version: "3.7"
services:
  redis:
    image: redis:alpine
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 256M
        reservations:
          cpus: '0.25'
          memory: 64M
  service1:
    image: service1 image
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 64M

...

Я запутался в расчете пределов ЦП. Например, процессор состоит из 8 ядер. Есть 20 микросервисов. Есть ли способ, которым я могу рассчитать предел процессора для каждой услуги? Или какие-нибудь формулы для этого?

----- ОБНОВЛЕНИЕ ------ Чтобы было понятнее, мой главный момент здесь - ограничение ЦП. Это потому, что я хотел бы отправить предупреждение, если ЦП одного микросервиса использует 80% ЦП для этого микросервиса. Если я не установлю лимит процессора, правда ли, что загрузка ЦП микросервиса будет такой же, как и загрузка ЦП хоста? Я не использую Swarn Docker, а только Docker.

Любые идеи действительно ценятся.

Спасибо,

1 Ответ

0 голосов
/ 09 января 2020

Перегрузка процессора не является проблемой. Если у вас 16 процессов, и все они пытаются выполнить работу, требующую 100% ЦП в 8-ядерной системе, ядро ​​будет распределять время между процессами; на практике вы должны ожидать, что эти процессы получат по 50% ЦП каждый, а задача будет занимать в два раза больше времени. Один совет, который я услышал (в пространстве Kubernetes), состоит в том, чтобы устанавливать запросы к ЦП на основе требования постоянной нагрузки службы и не устанавливать пределы ЦП.

Там нет волхвов c формула для установки любого из этих чисел. Лучший способ - настроить систему метрик, такую ​​как Prometheus, запустить комбинированную систему и посмотреть фактическое использование ресурсов. В некоторых случаях можно знать, что процесс является однопоточным и никогда не будет использовать более 1 ядра, или что вы ожидаете, что процесс будет связан с вводом / выводом, и если это не так, он должен быть ограничен, но эти параметры основаны на фактических данных. использование, вероятно, лучше.

(Память отличается тем, что вы можете фактически исчерпать физическую память, но также и процессы могут удерживать гораздо больше памяти, чем им действительно нужно. Опять же, инструмент метрики будет быть полезным здесь.)

Ваш вопрос предлагает один хост. Раздел deploy: работает только с менеджером кластеров Swarm Docker. Если вы не используете Swarm, вам нужно использовать файл version: '2' docker-compose.yml, который имеет другой набор объявлений ограничения ресурсов (и в большинстве случаев не имеет понятия "резервирование") , Например,

version: '2'
services:
  redis:
    image: redis:alpine
    # cpus: 2.0
    mem_limit: 256m
    mem_reservation: 64m
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...