Kubernetes не учитывает общее использование памяти узла при запуске модулей - PullRequest
0 голосов
/ 22 мая 2018

Что я вижу: Kubernetes учитывает только память, используемую его компонентами при планировании новых модулей, и считает оставшуюся память свободной, даже если она используется другими системными процессами за пределами Kubernetes.Таким образом, при создании новых развертываний он пытается запланировать новые модули на удушающем узле.

Что я ожидал увидеть: Kubernetes автоматически учитывает общее использование памяти (компонентами kubernetes +системные процессы) и запланировать его на другом узле.

В качестве обходного пути, есть ли параметр конфигурации, который мне нужно установить, или это ошибка?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Да, есть несколько параметров для распределения ресурсов: Вы можете выделить память и ЦП для ваших модулей и выделить память и ЦП для ваших системных демонов вручную. В документации вы можете узнать, как это работает, с примером:

Пример сценария

Вот пример, иллюстрирующий вычисление, распределяемое по узлу:

  • Узел имеет 32Gi из memory, 16 CPUs и 100Gi из Storage
  • --kube-reserved установлен на cpu=1,memory=2Gi,ephemeral-storage=1Gi
  • --system-reserved установлен на cpu=500m,memory=1Gi,ephemeral-storage=1Gi
  • --eviction-hard установлен на memory.available<500Mi,nodefs.available<10%

В этом случае Allocatable будет 14.5 CPUs, 28.5Gi памяти и 98Gi локальнойместо хранения.Планировщик гарантирует, что общий объем памяти requests во всех модулях на этом узле не превышает 28.5Gi, а объем хранилища не превышает 88Gi.Kubelet высвобождает модули, когда общее использование памяти между модулями превышает 28.5Gi или если общее использование диска превышает 88Gi Если все процессы на узле потребляют столько ЦП, сколько они могут, модули вместе не могут потреблять более 14.5 CPUs.

Если kube-reserved и / или system-reserved не применяется, и системные демоны превышают свое резервирование, kubelet высвобождает модули, когда общее использование памяти узла превышает 31.5Gi или storage превышает 90Gi

Вы можете выделить столько, сколько вам нужно для Kubernetes с флагом --kube-reserved и для системы с флагом -system-reserved.

Кроме того, если вам нужны более строгие правила для нерестовых стручков, вы можете попробовать использовать Pod Affinity.

0 голосов
/ 22 мая 2018

Kubelet имеет параметр --system-reserved, который позволяет резервировать процессор и память для системных процессов.

Он не динамический (вы резервируете ресурсы только при запуске), но это единственный способ узнатьKubelet не должен использовать все ресурсы в узле.

- зарезервированная системой mapStringString

Набор ResourceName = ResourceQuantity (например, cpu = 200 м, память = 500 млн. Миль, эфемерное хранилище =1Gi) пары, которые описывают ресурсы, зарезервированные для некубернетских компонентов.В настоящее время поддерживаются только процессор и память.См. http://kubernetes.io/docs/user-guide/compute-resources для более подробной информации.[по умолчанию = нет]

...