Особливості оновлення Karpenter v1

В серпні 2024 року був випущений Karpenter 1.0, що стало важливим етапом у розвитку проєкту.

УВАГА: Ця стаття не є покроковим посібником з оновлення (такий уже існує), але надає додаткові відомості про нюанси цього процесу, які можуть бути не зовсім зрозумілі, з огляду на мій досвід, і думаю, що вони будуть корисні, якщо ви плануєте оновлення.

Drift

Karpenter v1 приносить чимало значних змін, одна з яких: Drift disruption (відхилення від норми), яка раніше була під обмеженням функціональних можливостей, тепер увімкнена за замовчуванням. Це означає, що Karpenter автоматично перепідключатиме ваші вузли при кожному новому випуску AMI. Тепер можна вимкнути це на рівні NodePool, але це слід зробити до оновлення до v1.

Щоб вимкнути drift, необхідно вказати nodes: “0” в v1 визначенні бюджету, наприклад:

disruption:  
 consolidationPolicy: WhenEmptyOrUnderutilized  
 budgets:  
 - nodes: "10%"  
 reasons:   
 - "Empty"  
 - "Underutilized"  
 - nodes: "0" # повністю вимкнути Drift disruption  
 reasons:   
 - "Drifted"

Namespace

Якщо ви використовуєте Karpenter з ранніх версій, можливо, він працює в просторі імен karpenter. Після оновлення до v1 потрібні вебхуки конвертації, і якщо ви встановлюєте тільки karpenter Helm chart, то karpenter-crd буде встановлений як підчарт, що викличе помилки, оскільки Karpenter шукатиме сервіс у просторі імен kube-system, а не в karpenter, проблема.

Для виправлення цієї ситуації є два варіанти:

  • перемістити установку Karpenter в простір імен kube-system. Це зараз рекомендований простір імен і це можна зробити без переривань у роботі навантажень.
  • окремо встановити karpenter-crd Helm chart, як описано в наведеній проблемі.

Порядок оновлення

УВАГА: Оновити можна лише версії 0.33–0.37 до версії 1.0, тобто з v1beta1 -> v1.

  1. Перед оновленням переконайтеся, що ви використовуєте останню версію Karpenter 0.33–0.37, яка надає вебхуки конвертації та підтримує як API v1, так і v1beta1. Я зробив це з останньої версії v0.37.6.

  2. З цим ви зможете отримати конвертовані манифести v1 з кластера, запустивши команду kubectl get nodepool/ -oyaml.

  3. Оновіть модуль terraform-aws-eks (якщо ви його використовуєте) принаймні до версії v20.24.1 до оновлення. Він включає підтримку політики IAM для v1, яка відрізняється від 0.33–0.37.

  4. Сподіваюся, ви використовуєте GitOps, тому наступним кроком підготуйте PR з оновленням версії Karpenter до v1 та оновленими манифестами EC2NodeClass/NodePool до v1.

Щоб вирішити проблему з drift disruption, необхідно переконатися, що бюджет має зазначений розділ:

disruption:  
 budgets:  
 - nodes: "0" # повністю вимкнути Drift disruption  
 reasons:   
 - "Drifted"
  1. Установіть enable_v1_permissions=true в модулі Karpenter та застосуйте його.

  2. Злийте PR з оновленням Karpenter та манифестів, GitOps має все налаштувати, і якщо ви правильно вимкнули drift, то переривань у роботі не буде.

Метрики

Чимало метрик змінили свої назви (деталі), переважно це стосується вузлів, NodePool та переривань, наприклад, karpenter_nodepool_usage → karpenter_nodepool_usage.

Необхідно перевірити дашборд Karpenter та запити сповіщень і оновити їх відповідно.
Інакше ви можете пропустити обмеження NodePool або виникнення проблем з провізією вузлів.

УВАГА: Якщо у вас налаштовано сповіщення по метриці karpenter_cloudprovider_errors_total, потрібно виключити помилку NodeClaimNotFoundError, наприклад, {error!=”NodeClaimNotFoundError”}, деталі.

Ресурси

Як побічна примітка, будь ласка, зверніть увагу, що Karpenter v1, за моїм досвідом, споживає більше ресурсів.

Якщо ви вирішуєте задачу курки і яйця, запустивши Karpenter на Fargate, потрібно забезпечити достатню кількість ресурсів CPU/пам'яті. Перевірте це за допомогою kubectl describe |grep Capacity.

Інакше можуть виникнути проблеми з тим, що Karpenter не зможе провести консолідацію та виникнуть тайм-аутів під час збору метрик (прогалини на графіках).

Перекладено з: Karpenter v1 upgrade nuances

Leave a Reply

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