У вас есть два варианта:
- Node Affinity : свойство модулей, которые привлекают их к множеству узлов.
- Taints & Toleration : Taints противоположны Node Affinity, они позволяют узлу отталкивать множество модулей.
Использование Node Affinity
Вам нужно пометить ваши узлы:
kubectl label nodes node1 mylabel=specialpods
Затем при запуске Pod задайте affinity
:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: mylabel
operator: In
values:
- specialpods
containers:
- name: nginx-container
image: nginx
Использование Taint & Toleration
Taint & Toleration работают вместе: вы портите узел, а затем указываете допуск для pod, только те Pod будут запланированы на узле, допуск которого "соответствует" taint:
Taint: kubectl taint nodes node1 mytaint=specialpods:NoSchedule
Добавить допуск в Pod Spec:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
tolerations:
- key: "mytaint"
operator: "Equal"
value: "specialpods"
effect: "NoSchedule"
containers:
- name: nginx-container
image: nginx