Фото від Growtika на Unsplash
Механізми вибору вузлів, такі як NodeSelector, та NodeAffinity, є інструментами в Kubernetes, що дозволяють планувати pods на певні вузли, базуючись на критерії. Хоча обидва досягають схожих цілей, вони мають різні механізми, випадки використання та гнучкість.
NodeSelector
Опис: NodeSelector — це найпростіший спосіб обмежити pod для виконання на певному наборі вузлів.
Як це працює: Він використовує відповідність між ключами та значеннями міток. Pod з NodeSelector
виконується лише на вузлах з відповідними мітками.
Синтаксис:
apiVersion: v1
kind: Pod
metadata:
name: pod-with-nodeselector
spec:
nodeSelector:
disktype: ssd
- У цьому прикладі pod буде заплановано на вузлах з міткою
disktype=ssd
.
Обмеження:
- Лише точне співпадіння (немає операторів, як-от
In
абоNotIn
). - Немає розширеної логіки чи гнучкості.
- Жорстке обмеження; якщо немає вузлів, що відповідають критеріям, pod не буде заплановано.
Node Affinity
Опис: Node Affinity — це більш виразний спосіб визначити правила для вибору вузлів.
Як це працює: Він використовує правила affinity, засновані на мітках, і підтримує оператори для гнучких умов.
Типи:
- RequiredDuringSchedulingIgnoredDuringExecution: Pods будуть плануватися лише на вузлах, що відповідають умовам (як NodeSelector, але більш потужний).
- PreferredDuringSchedulingIgnoredDuringExecution: Pods надають перевагу вузлам, які відповідають умовам, але можуть працювати на інших, якщо це необхідно.
Синтаксис:
apiVersion: v1
kind: Pod
metadata:
name: pod-with-nodeaffinity
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
- hdd
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: region
operator: In
values:
- us-west
Тут:
- Pod буде плануватися лише на вузлах з мітками
disktype=ssd
абоdisktype=hdd
. - Pod надає перевагу вузлам у
region=us-west
, але це не обов'язково.
Переваги:
- Підтримка розширених операторів (
In
,NotIn
,Exists
тощо). - Опції пріоритетів та переваг для більшої гнучкості.
- Схожість з NodeSelector в обов'язковій частині.
Порівняння
| Параметр | NodeSelector | NodeAffinity |
|------------------|--------------|--------------|
| Виразність | Проста відповідність ключ-значення | Складні вирази з операторами |
| Тип | Лише "жорсткі" обмеження | Як "жорсткі", так і "м'які" обмеження |
| Оператори | Відсутні | In
, NotIn
, Exists
тощо |
| Використання | Простий, базовий випадок | Розширене, гнучке планування |
| Гнучкість | Низька | Висока |
Приклад сценарію
- NodeSelector:
- Pod має виконуватися на вузлах з міткою
disktype=ssd
.
2. Node Affinity:
- Pod має виконуватися на вузлах з міткою
disktype=ssd
абоdisktype=hdd
(жорстке обмеження). - Pod надає перевагу вузлам у
region=us-west
(м'яке обмеження).
Основні висновки
Використовуйте NodeSelector для простих випадків, де достатньо простоти.
Використовуйте Node Affinity для ситуацій, що вимагають більшої гнучкості, таких як варіанти fallback або пріоритети вузлів.
Фото від Growtika на Unsplash
Механізми вибору вузлів, такі як NodeSelector та NodeAffinity, є інструментами в Kubernetes, що дозволяють планувати pods на конкретні вузли, базуючись на заданих критеріях. Хоча обидва механізми досягають схожих цілей, вони мають різні підходи, випадки використання та гнучкість.
NodeSelector
Опис: NodeSelector — це найпростіший спосіб обмежити pod для виконання на певному наборі вузлів.
Як це працює: Він використовує відповідність між ключами та значеннями міток. Pod з NodeSelector
буде працювати лише на вузлах, які мають відповідні мітки.
Синтаксис:
apiVersion: v1
kind: Pod
metadata:
name: pod-with-nodeselector
spec:
nodeSelector:
disktype: ssd
- У цьому прикладі pod буде заплановано на вузлах з міткою
disktype=ssd
.
Обмеження:
- Лише точне співпадіння (немає операторів, як-от
In
абоNotIn
). - Відсутність складної логіки чи гнучкості.
- Жорстке обмеження; якщо немає вузлів, що відповідають критеріям, pod не буде заплановано.
Node Affinity
Опис: Node Affinity — це більш виразний спосіб визначити правила для вибору вузлів.
Як це працює: Він використовує правила affinity, засновані на мітках, і підтримує оператори для більш гнучких умов.
Типи:
- RequiredDuringSchedulingIgnoredDuringExecution: Pods будуть плануватися лише на вузлах, що відповідають умовам (як NodeSelector, але більш потужний).
- PreferredDuringSchedulingIgnoredDuringExecution: Pods надають перевагу вузлам, які відповідають умовам, але можуть працювати на інших, якщо це необхідно.
Синтаксис:
apiVersion: v1
kind: Pod
metadata:
name: pod-with-nodeaffinity
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
- hdd
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: region
operator: In
values:
- us-west
Тут:
- Pod буде заплановано лише на вузлах з міткою
disktype=ssd
абоdisktype=hdd
. - Pod надає перевагу вузлам у
region=us-west
, але це не обов'язково.
Переваги:
- Підтримка розширених операторів (
In
,NotIn
,Exists
тощо). - Можливість пріоритетів та переваг для більшої гнучкості.
- Схожість з NodeSelector у частині обов'язкових умов.
Порівняння
| Параметр | NodeSelector | NodeAffinity |
|------------------|--------------|--------------|
| Виразність | Проста відповідність ключ-значення | Складні вирази з операторами |
| Тип | Лише "жорсткі" обмеження | Як "жорсткі", так і "м'які" обмеження |
| Оператори | Відсутні | In
, NotIn
, Exists
тощо |
| Використання | Простий, базовий випадок | Розширене, гнучке планування |
| Гнучкість | Низька | Висока |
Приклад сценарію
- NodeSelector:
- Pod має виконуватися на вузлах з міткою
disktype=ssd
.
2. Node Affinity:
- Pod має виконуватися на вузлах з міткою
disktype=ssd
абоdisktype=hdd
(жорстке обмеження). - Pod надає перевагу вузлам у
region=us-west
(м'яке обмеження).
Основні висновки
Використовуйте NodeSelector для простих випадків, де достатньо простоти.
Використовуйте Node Affinity для ситуацій, що вимагають більшої гнучкості, таких як варіанти fallback або пріоритети вузлів.
Перекладено з: Node Selector vs Node Affinity in Kubernetes