Вибір вузла проти Affinity вузла в Kubernetes

pic

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

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

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

2. Node Affinity:

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

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

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

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

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

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

  1. 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

Leave a Reply

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