Вибір вузла проти афінності вузлів у Kubernetes

pic

Фото від 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 тощо |
| Використання | Основні, прості потреби | Розширене, гнучке планування |
| Гнучкість | Низька | Висока |

Приклад сценарію

  1. NodeSelector:
  • Под повинен запускатися на вузлах з міткою disktype=ssd.

2. Node Affinity:

  • Под має запускатися на вузлах з мітками disktype=ssd або disktype=hdd (жорстке обмеження).
  • Под надає перевагу вузлам у регіоні region=us-west (м'яке обмеження).

Основні висновки

Використовуйте NodeSelector для основних потреб, коли достатньо простоти.

Використовуйте Node Affinity для сценаріїв, які потребують більшої гнучкості, таких як варіанти на випадок непередбачених ситуацій або пріоритезація вузлів.

Перекладено з: Node Selector vs Node Affinity in Kubernetes

Leave a Reply

Your email address will not be published. Required fields are marked *