Предпочтительное сродство между стручками никогда не соблюдается в кубернетах - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть модуль jenkins, имеющий метку app: jenkins-master

. Он находится в jenkins пространстве имен.

Я хочу модуль nginx развертывания (на другом пространство имен, default) для размещения в вышеуказанном модуле.

Поэтому я добавлю следующее в его спецификацию c:

spec:
  affinity:
    podAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          namespaces:
            - all
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - jenkins-master
          topologyKey: "kubernetes.io/os"

У меня кластер GKE из 8 узлов.

Из 5-6 раз, когда я создавал / удалял развертывание, модуль nginx фактически никогда не приземлялся на том же узле, что и jenkins-master.

I знаю, что это preferred планирование, но это нормальное поведение?

Работа на GKE с "v1.15.9-gke.24"

edit 1 : у меня есть изменил topologyKey: "kubernetes.io/hostname", как предложено в нескольких ответах ниже, но это тоже мало помогло.

edit 2 : Это выделенные ресурсы для узла, который jenkins-master pod запланировано на

  Resource                   Requests      Limits
  cpu                        1691m (43%)   5013m (127%)
  memory                     4456Mi (33%)  8902Mi (66%)

Поскольку планирование основано на запросах, я не понимаю, как при следующем развертывании не удается совместить, запросы, которые я делаю, минимальны

resources:
  limits:
    memory: "1Gi"
    cpu: "100m"
   requests:
    memory: "100Mi"
    cpu: "50m"

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Полагаю, вы знаете, что topology относится к некоторым меткам, которые присваиваются узлам автоматически при инициализации кластера.

Итак, topology группирует узлы как один (через эти метки), поэтому когда вы говорите topologyKey: "kubernetes.io/os", вы говорите, выберите узел, который является частью этой группы, и назначьте для него модуль. Поскольку, вероятно, все ваши узлы имеют одинаковую ОС, для вашего планировщика это допустимый узел для запуска. Так что, да, это предполагаемое поведение.

Обратите внимание, что это все еще предпочтение, но оно все равно будет пытаться планировать на правом узле, если ресурсов достаточно.

Что у вас есть делать то, что предлагает омрикоко; topologyKey: "kubernetes.io/hostname". Вам нужно разрешить группу планировщика по имени хоста, так что у вас будет только 1 узел на группу, и модуль для планирования будет находиться на том же узле.

1 голос
/ 28 апреля 2020

Я думаю, что вы допустили ошибку, используя topologyKey: "kubernetes.io/os", который используется, если вы смешиваете операционные системы в вашем кластере (например: смешиваете Linux и Windows узлов).

Вы должны быть используя: topologyKey: "kubernetes.io/hostname", где Kubelet заполняет эту метку именем хоста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...