Фото від Growtika на Unsplash
Механізми вибору вузлів, такі як NodeSelector та NodeAffinity, є інструментами в Kubernetes, які дозволяють планувати поди на конкретні вузли на основі певних критеріїв. Хоча обидва досягають схожих цілей, у них є різні механізми, варіанти використання та гнучкість.
NodeSelector
Опис: NodeSelector — це найпростіший спосіб обмежити запуск пода на певному наборі вузлів.
Як це працює: Використовує відповідність пар ключ-значення міток. Под з NodeSelector
запускається лише на вузлах з відповідними мітками.
Синтаксис:
apiVersion: v1
kind: Pod
metadata:
name: pod-with-nodeselector
spec:
nodeSelector:
disktype: ssd
- У цьому прикладі под буде сплановано на вузлах, позначених міткою
disktype=ssd
.
Обмеження:
- Тільки точна відповідність (немає операторів типу
In
абоNotIn
). - Відсутність складної логіки чи гнучкості.
- Жорстке обмеження; якщо немає вузлів, що відповідають умовам, под не буде сплановано.
Node Affinity
Опис: Node Affinity — це більш виразний спосіб визначення правил для вибору вузлів.
Як це працює: Використовує правила афінності на основі міток і підтримує оператори для гнучких умов.
Типи:
- RequiredDuringSchedulingIgnoredDuringExecution: Поди будуть сплановані тільки на вузлах, що відповідають (як NodeSelector, але більш потужний).
- PreferredDuringSchedulingIgnoredDuringExecution: Поди надають перевагу вузлам, що відповідають умовам, але можуть працювати й на інших, якщо це необхідно.
Синтаксис:
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
Тут:
- Под буде сплановано тільки на вузлах з міткою
disktype=ssd
абоdisktype=hdd
. - Под надає перевагу вузлам у регіоні
region=us-west
, але це не є обов'язковим.
Переваги:
- Підтримка розширених операторів (
In
,NotIn
,Exists
тощо). - Параметри пріоритету та переваги для гнучкості.
- Схожість на NodeSelector у частині обов'язкових умов.
Порівняння
| Характеристика | NodeSelector | NodeAffinity |
|----------------|--------------|--------------|
| Виразність | Просте співвідношення ключ-значення | Складні вирази з операторами |
| Тип | Тільки «жорсткі» обмеження | Як «жорсткі», так і «м'які» обмеження |
| Оператори | Немає | In
, NotIn
, Exists
тощо |
| Використання | Основні, прості потреби | Розширене, гнучке планування |
| Гнучкість | Низька | Висока |
Приклад сценарію
- NodeSelector:
- Под повинен запускатися на вузлах з міткою
disktype=ssd
.
2. Node Affinity:
- Под має запускатися на вузлах з мітками
disktype=ssd
абоdisktype=hdd
(жорстке обмеження). - Под надає перевагу вузлам у регіоні
region=us-west
(м'яке обмеження).
Основні висновки
Використовуйте NodeSelector для основних потреб, коли достатньо простоти.
Використовуйте Node Affinity для сценаріїв, які потребують більшої гнучкості, таких як варіанти на випадок непередбачених ситуацій або пріоритезація вузлів.
Перекладено з: Node Selector vs Node Affinity in Kubernetes