Как равномерно развернуть поды на всех узлах в Kubernetes?
У меня есть несколько кластеров Kubernetes с разными #of узлов в каждом. И в моем развертывании конфигурации есть "реплики: # узлы". Не существует определенной конфигурации для планирования этого модуля, но после развертывания я вижу странное поведение с точки зрения распределения модулей по узлам.
Пример:
Для кластера из 30 узлов (30 реплик) все 30 реплик подов распределены только по 25 узлам, а остальные 5 узлов идеально подходят для кластера. Подобные случаи для многих других различных кластеров, и это количество меняется при каждом новом / повторном развертывании.
Вопрос:
Я хочу распределить реплики своих модулей по всем узлам. Если я установил "replicas: #nodes", то у меня должна быть одна реплика пода в каждом узле. Если я увеличиваю / удваиваю количество реплик, оно должно распределяться равномерно. есть ли какая-то конкретная конфигурация в развертывании yaml для Kubernetes?
Конфигурация с узлом AntiAffinity, но он все равно ведет себя как указано выше. Пробовал с "requiredDuringSchedulingIgnoredDuringExecution", и тот действительно развернул по одному модулю в каждом узле, но если я увеличиваю количество реплик или какой-либо узел выходит из строя во время развертывания, тогда все развертывание завершается неудачей.
metadata:
labels:
app: test1
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- test1
topologyKey: kubernetes.io/hostname
1 ответ
Если вам нужно развертывание по 1 модулю на узел, вы должны использовать daemonSet вместо replicaSet. В качестве альтернативы, если вам нужно более 1 модуля на узел и вы все еще хотите, чтобы распределение модулей было в основном равномерным, вы можете использовать антиаффинность модуля, как я обсуждал в этой статье.
См . Ограничения распространения топологии подов https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/, эта функция дает вам разрешение точно определить, как ваши поды будут распределяться по вашему кластеру на основе регионов, зоны, узлы и другие определяемые пользователем домены топологии.
Таким образом, вы можете определить свои собственные правила распределения стручков.