Комментарии 2
Доброго дня,
а можете кратко описать, почему tolerations и taints не подошли,
Ведь в связке вы как раз можете жёстко ограничить расположение подов на конкретных нодах и по результату оно будет схоже с вашим?
P.S. сами taints и toleration мне не доводилось использовать в своей работе, только на тестовых стендах.
Добрый день!
если мы говорим не про kind: Pod
, оператор Strimzi использует StatefulSet,
то tolerations и taints работают на уровне узлов и подов в целом, без возможности указать, что именно pod-0 должен быть размещён на node-0, а pod-1 на node-1 из-за того, что в kind: StatefulSet
используется template
и все реплики подов будут иметь одинаковую конфигурацию по tolerations
.
Наиболее близкое стандартное решение, хотя и не гарантирующее повторяемости размещения:
nodeAffinity + weight
...
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
...
topologyKey: "kubernetes.io/hostname"
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- minikube-m02
- weight: 60
preference:
matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- minikube-m03
- weight: 20
preference:
matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- minikube-m04
Можно попробовать нестандартный подход (uglyhack solution), зная, что StatefulSet создает и запускает поды последовательно: пометить все ноды как unschedulable, кроме первой нужной, дождаться запуска pod-0 на ней (надеясь на дальнейшую привязку по local storage, например), затем по одной делать ноды schedulable, пока не запустятся все реплики.
Но все это не production-ready решения и в итоге поды могут быть размещены по предоставленным узлам в хаотичном порядке.
Создание кастомного Kubernetes Scheduler для StatefulSet