Совместное использование ограничений ЦП для контейнеров в модуле - PullRequest
0 голосов
/ 04 февраля 2019

В Openshift / Kubernetes я хочу проверить, как мое приложение (модуль), состоящее из 2-х контейнеров, работает на машинах с разным количеством ядер.Машина у меня под рукой имеет 32 ядра, но я бы хотел ограничить их 4, 8, 16 ...

. Один из способов - использовать ограничения ресурсов для контейнеров , ноэто заставило бы меня установить соотношение для каждого контейнера;вместо этого я хочу установить ограничения ресурсов для всего модуля и позволить контейнерам конкурировать на процессоре.Я чувствую, что это должно быть возможно, так как контейнеры могут принадлежать к одной и той же группе и, следовательно, иметь ограничения от планировщика POV.

Будет ли LimitRange на модуле делать то, что я ищу?LimitRange ограничен проектом / пространством имен, есть ли способ добиться того же с более высокой степенью детализации (только для определенных модулей)?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Как насчет управления использованием ресурсов внутри вашего кластера K8S с помощью квоты ресурсов.Это должно позволить вам измерять использование процессора / памяти вашим модулем в выделенном пространстве имен с помощью метрик мониторинга kube_resourcequota, при различных условиях, установленных с помощью LimitRange, или непосредственно с помощью ограничений и запросов ресурсов контейнера.

Что я имею в виду именнодолжен установить квоту ресурса аналогично этому одному:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-demo
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi
    pods: "1"

запустить модуль с ограничениями ресурсов и запросами :

 ...
 containers:
    - image: gcr.io/google-samples/hello-app:1.0
      imagePullPolicy: IfNotPresent
      name: hello-app
      ports:
      - containerPort: 8080
        protocol: TCP
      resources:
        limits:
          cpu: "1"
          memory: 800Mi
        requests:
          cpu: 900m
          memory: 600Mi 
  ...

и просто наблюдайте в консоли мониторинга за тем, как модуль работает *, например, с помощью Prometheus:

enter image description here

* Зеленый - представляет общее использование памяти модулем Pod, Красный - фиксированные / жесткие ограничения ресурсов, установленные с помощью ResourceQuota

Я полагаю, вы решили сократить разрыв между строками, чтобы избежать неполадок в системе, и в то же время избежать сбоев Pod, таких как этот:

  status:
    message: 'Pod Node didn''t have enough resource: cpu, requested: 400, used: 893,
      capacity: 940'
    phase: Failed
    reason: OutOfcpu

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

0 голосов
/ 04 февраля 2019

Согласно документации : ограничения по ресурсам применимы только на уровне контейнера.Однако вы можете определить различные requests и limits, чтобы разрешить разрыв контейнера сверх количества, определенного в запросах.Но это имеет и другие последствия, см. Качество обслуживания .

Причиной этого является то, что некоторые ресурсы, такие как память, не могут конкурировать, поскольку они работают на CPU.Памяти либо достаточно, либо слишком мало.В Куберне нет такой вещи, как общая оперативная память.(Если вы явно не вызываете соответствующие системные вызовы)

Могу я спросить, каков вариант использования для внутреннего соревнования процессора Pod?

...