Ця стаття була опублікована більше року тому. Старіші статті можуть містити застарілу інформацію. Перевірте, чи інформація на цій сторінці не втратила актуальності з моменту її публікації.

Kubernetes v1.34: Mutable CSI Node Allocatable переходить у бета

Можливість драйверів CSI оновлювати інформацію про кількість томів, які можна підключити на вузлах, вперше представлена в альфа-версії Kubernetes v1.33, перейшла в бета-версію у випуску Kubernetes v1.34! Це є важливою віхою у підвищенні точності планування Podʼів зі станом шляхом зменшення кількості збоїв, спричинених застарілою інформацією про кількість томів, які можна підключити.

Background

Традиційно драйвери CSI Kubernetes повідомляють про статичний максимальний ліміт підключення томів під час ініціалізації. Однак фактичні ємності підключення можуть змінюватися протягом життєвого циклу вузла з різних причин, таких як:

  • Ручні або зовнішні операції з підключення/відключення томів поза контролем Kubernetes.
  • Динамічно підключені мережеві інтерфейси або спеціалізоване обладнання (GPU, NIC тощо), що споживає доступні слоти.
  • Сценарії з кількома драйверами, коли операції одного драйвера CSI впливають на доступну ємність, про яку повідомляє інший.

Статичне звітування може призвести до того, що Kubernetes запланує Podʼи на вузли, які, здається, мають ємність, але насправді не мають, що призводить до зависання Podʼів у стані ContainerCreating.

Динамічна адаптація лімітів томів CSI

Завдяки цій новій можливості Kubernetes дозволяє драйверам CSI динамічно налаштовувати та повідомляти про ємності підключення вузлів під час виконання. Це забезпечує наявність у планувальника, а також інших компонентів, які покладаються на цю інформацію, найбільш точної та актуальної інформації про ємність вузлів.

Як це працює

Kubernetes підтримує два механізми для оновлення інформації про ліміти томів вузлів:

  • Періодичні оновлення: Драйвери CSI вказують інтервал для періодичного оновлення доступної для розподілу ємності вузла.
  • Реактивні оновлення: Негайне оновлення, яке викликається, коли операція підключення тому не вдається через вичерпані ресурси (помилка ResourceExhausted).

Увімкнення можливості

Щоб використовувати цю бета-можливість, необхідно увімкнути функціональну можливість MutableCSINodeAllocatableCount у таких компонентах:

  • kube-apiserver
  • kubelet

Приклад конфігурації драйвера CSI

Нижче наведено приклад конфігурації драйвера CSI для увімкнення періодичних оновлень кожні 60 секунд:

apiVersion: storage.k8s.io/v1
kind: CSIDriver
metadata:
  name: example.csi.k8s.io
spec:
  nodeAllocatableUpdatePeriodSeconds: 60

Ця конфігурація вказує kubelet періодично викликати метод NodeGetInfo драйвера CSI кожні 60 секунд, оновлюючи кількість томів, доступних для розподілу на вузлі. Kubernetes забезпечує мінімальний інтервал оновлення в 10 секунд, щоб збалансувати точність і використання ресурсів.

Негайні оновлення у разі збоїв підключення

Коли операція підключення тому не вдається через помилку ResourceExhausted (код gRPC 8), Kubernetes негайно оновлює доступну для розподілу кількість томів замість того, щоб чекати наступного періодичного оновлення. Потім kubelet позначає відповідні Podʼи як Failed, що дає змогу їхнім контролерам створити їх знову. Це запобігає тому, щоб Podʼи назавжди застрягали в стані ContainerCreating.

Як почати використовувати

Щоб увімкнути цю можливість у вашому кластері Kubernetes v1.34:

  1. Увімкніть функціональну можливість MutableCSINodeAllocatableCount в компонентах kube-apiserver та kubelet.
  2. Оновіть конфігурацію вашого драйвера CSI, встановивши nodeAllocatableUpdatePeriodSeconds.
  3. Моніторте та спостерігайте за покращеннями в точності планування та надійності розміщення Podʼів.

Наступні кроки

Ця можливість зараз перебуває на стадії beta, і спільнота Kubernetes вітає ваші відгуки. Тестуйте її, діліться своїм досвідом і допомагайте спрямовувати її еволюцію до стабільності GA.

Приєднуйтесь до обговорень у Kubernetes Storage Special Interest Group (SIG-Storage), щоб сформувати майбутнє можливостей зберігання Kubernetes.