Предпочитать рассылку реплик между узлами

Я использую кластер Kubernetes из 3 узлов с GKE. Я прошу Kubernetes предоставить 3 реплики backend pod'ов. 3 модуля плохо распределяются между узлами для обеспечения службы высокой доступности, обычно все они находятся на 2 узлах. Я бы хотел, чтобы Kubernetes отправлял модули как можно чаще, чтобы на каждом узле имелся модуль, но не допускал сбоев при развертывании / масштабировании, если их больше backend модулей, чем узлов.

Возможно ли это сделать с preferredDuringSchedulingIgnoredDuringExecution?




Ответы (1)


Попробуйте настроить предпочтительное правило antiAffinity следующим образом:

affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchExpressions:
              - key: "app"
                operator: In
                values: 
                - "my_app_name"
          topologyKey: "kubernetes.io/hostname"

Это попытается запланировать модули на узлах, на которых еще не запущен модуль с той же меткой. После этого он будет бесплатным для всех (так что он не будет равномерно распределять их после того, как убедится, что хотя бы 1 работает на каждом узле). Это означает, что после масштабирования вы можете получить узел с 5 модулями и другие узлы с 1 модулем в каждом.

person vascop    schedule 31.10.2017
comment
Спасибо. Пришлось добавить - weight: 100 podAffinityTerm: labelSelector: - person Sony; 01.11.2017