Как исправить «стручки не сбалансированы» в кластере Kubernetes - PullRequest
0 голосов
/ 27 июня 2019

Стручки не балансируют в пуле узлов. почему не распространяется на каждый узел?

У меня 9 экземпляров в пуле 1 узла. В прошлом я пытался добавить 12 экземпляров. Стручки не балансируют.

описание изображения здесь Хотите знать, есть ли какое-нибудь решение, которое может помочь решить эту проблему и использовать 9 экземпляров в пуле 1 узла?

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Вы должны посмотреть на анти-сродство между стручками .Эта функция позволяет вам ограничить, где ваши модули не должны быть запланированы на основе меток модулей, работающих на узле.В вашем случае, если ваше приложение имеет метку app-label, вы можете использовать его, чтобы гарантировать, что блоки не будут запланированы на узлах, которые имеют блоки с меткой app-label.Например:

apiVersion: apps/v1
kind: Deployment
...
spec:
  selector:
    matchLabels:
      label-key: label-value
  template:
    metadata:
      labels:
        label-key: label-value
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: label-key
                operator: In
                values:
                - label-value
            topologyKey: "kubernetes.io/hostname"
...

PS: если вы используете requiredDuringSchedulingIgnoredDuringExecution, вы можете иметь максимум столько пакетов, сколько у вас есть узлов.Если вы ожидаете иметь больше модулей, чем доступных узлов, вам придется использовать preferredDuringSchedulingIgnoredDuringExecution, что делает антиаффинность предпочтением, а не обязательством.

0 голосов
/ 27 июня 2019

Блоки запускаются на узлах с помощью kube-планировщика.И как только они запланированы, они не перепланированы, если они не будут удалены.

Так что, если вы добавите больше узлов, уже запущенные модули не будут переназначаться.

В инкубаторе есть проект, которыйрешает именно эту проблему.

https://github.com/kubernetes-incubator/descheduler

Планирование в Kubernetes - это процесс привязки ожидающих модулей к узлам, который выполняется компонентом Kubernetes, называемым kube-scheduler.Решения планировщика, независимо от того, может ли модуль быть запланирован или нет, определяются его настраиваемой политикой, которая состоит из набора правил, называемых предикатами и приоритетами.На решения планировщика влияет его вид кластера Kubernetes в тот момент, когда новый модуль появляется впервые для планирования.Поскольку кластеры Kubernetes очень динамичны и их состояние со временем меняется, может потребоваться переместить уже запущенные модули в некоторые другие узлы по разным причинам:

  • Некоторые узлы используются недостаточно или чрезмерно.
  • Первоначальное решение о планировании больше не выполняется, поскольку порты или метки добавляются к узлам или удаляются из них, модуль / узел
    требования сродства больше не выполняются.
  • Некоторые узлы не удалось иих модули перемещены в другие узлы.
  • Новые узлы добавляются в кластеры.
...