У стандартній моделі Kubernetes придатність вузла для робочих навантажень залежить від єдиного бінарного стану «Ready» («Готовий»). Однак у сучасних середовищах Kubernetes вузли потребують складних інфраструктурних залежностей, таких як мережеві агенти, драйвери сховищ, прошивка GPU або спеціальні перевірки працездатності, щоб бути повністю готовими до роботи, перш ніж вони зможуть надійно обслуговувати поди.
Сьогодні від імені проєкту Kubernetes я оголошую про запуск Node Readiness Controller. Цей проєкт впроваджує декларативну систему для управління позначками вузлів, розширюючи захисні барʼєри готовності під час завантаження вузлів за межі стандартних станів. Динамічно керуючи taints на основі спеціальних сигналів стану, контролер гарантує, що робочі навантаження розміщуються тільки на вузлах, які відповідають усім вимогам інфраструктури.
Основний статус «Ready» вузлів Kubernetes часто є недостатнім для кластерів із складними вимогами до ініціалізації. Оператори часто стикаються з труднощами, намагаючись переконатися, що певні DaemonSets або локальні сервіси працюють належним чином, перш ніж вузол потрапить до пулу планування.
Контролер готовності вузлів заповнює цю прогалину, дозволяючи операторам визначати власні правила планування, адаптовані до конкретних груп вузлів. Це дозволяє застосовувати різні вимоги до готовності в гетерогенних кластерах, гарантуючи, наприклад, що вузли, оснащені GPU, приймають поди тільки після перевірки спеціалізованих драйверів, тоді як вузли загального призначення дотримуються стандартного шляху.
Він надає три основні переваги:
Контролер базується на API NodeReadinessRule (NRR), який дозволяє визначати декларативні gate для ваших вузлів.
Контролер підтримує два різних режими роботи:
Контролер реагує на стан вузлів, а не виконує перевірки працездатності самостійно. Така роздільна конструкція дозволяє йому безперешкодно інтегруватися з іншими інструментами, що існують в екосистемі, а також з індивідуальними рішеннями:
Впровадження нових правил готовності у всьому парку обладнання несе в собі певний ризик. Щоб його зменшити, режим тестового запуску (dry run) дозволяє операторам спочатку змоделювати вплив на кластер. У цьому режимі контролер реєструє заплановані дії та оновлює статус правила, щоб показати вузли, на які це вплине, без застосування фактичних позначок taint, що дозволяє безпечно перевірити правило перед його впровадженням.
Наступне правило NodeReadinessRule гарантує, що вузол залишатиметься таким, що не підлягає плануванню, доки його агент CNI не почне функціонувати. Контролер відстежує спеціальну умову cniplugin.example.net/NetworkReady і видаляє позначку readiness.k8s.io/acme.com/network-unavailable лише тоді, коли статус стає True.
apiVersion: readiness.node.x-k8s.io/v1alpha1
kind: NodeReadinessRule
metadata:
name: network-readiness-rule
spec:
conditions:
- type: "cniplugin.example.net/NetworkReady"
requiredStatus: "True"
taint:
key: "readiness.k8s.io/acme.com/network-unavailable"
effect: "NoSchedule"
value: "pending"
enforcementMode: "bootstrap-only"
nodeSelector:
matchLabels:
node-role.kubernetes.io/worker: ""
Демо:
Node Readiness Controller тільки починає свою роботу, і ми випустили перші версії [https://github.com/kubernetes-sigs/node-readiness-controller/releases/tag/v0.1.1). Зараз ми чекаємо на відгуки від спільноти, щоб вдосконалити план розвитку. Після плідних дискусій на Unconference під час KubeCon NA 2025 ми з радістю продовжимо розмову віч-на-віч.
Приєднуйтесь до нас на KubeCon + CloudNativeCon Europe 2026 на сесії для розробників: Вирішення проблеми недетермінованого планування: представлення Node Readiness Controller.
Тим часом ви можете долучитися до нашої роботи або стежити за нашими досягненнями тут: