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

Kubernetes — золотий стандарт оркестрування. За даними дослідження CNCF у 2021 році, його вже використовують 96% компаній. Завдяки Kubernetes бізнеси можуть легко розгортати численні контейнери інстансів. Проте, як і будь-який інструмент, він має свої недоліки. Один із них — високі витрати. 

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

Найпершим кроком до оптимізації витрат на Kubernetes є моніторинг. З ним ви дізнаєтесь, на що саме ви витрачаєте свій бюджет та побачите, як можна заощадити. 

Зазвичай хмарні провайдери надають простий огляд витрат без повної картинки. Тож для цього є окремі інструменти, наприклад, Prometheus та Kubecost.

Що ще потрібно, щоб зменшити витрати на Kubernetes та зберегти продуктивність вашого бізнесу — розберімося далі.

Обмеження ресурсів

Воно дасть вам гарантію, що жодна програма чи оператор системи Kubernetes не використовує занадто багато процесорної потужності. Так ви не здивуєтесь, коли побачите рахунки.

Це працює так само як зі звичайними контейнерами: вони мають певний обсяг, залежно від чого ви можете скласти у них обмежену кількість речей. Встановіть обмеження на ресурси для контейнера K8s, і він не зможе використати більше.

Це можна реалізувати за допомогою Kubelet та середовища виконання контейнера. Ви можете встановити обмеження пам’яті, наприклад, 4 Гб, і контейнер не зможе перевищити цей ліміт. А якщо процес у контейнері намагається це зробити, ядро системи перериває його та видає помилку браку пам’яті — out-of-memory.

Обмеження ресурсів дуже важливе, особливо якщо до Kubernetes мають доступ багато розробників. Якби обмежень не було, один розробник міг би використати весь ресурс, через що інші потребували б додаткових ресурсів. А з визначеним лімітом вони розподілятимуться рівномірно, а загальний розмір кластера при цьому зменшиться. 

В усьому головне — баланс, тож спробуйте визначити оптимальний ліміт для своїх програм. Марне використання ресурсу збільшує лише ваші витрати, проте не покращує продуктивність. Так само важливо й не загратися у своєму бажанні зекономити, адже це може навпаки нашкодити бізнесу.

Визначити баланс ресурсів вам допоможуть Prometheus та Kubecost.

Автомасштабування

Ідея в тому, щоб платити лише за те, що вам потрібно. У цьому випадку інфраструктура може самостійно масштабуватися в залежності від навантаження. Це зручно, проте ви маєте контролювати цей процес. Інфраструктура може масштабуватися так, що в результаті ваші витрати суттєво зростуть. 

Amazon визначає автомасштабування основою оптимізації витрат на Kubernetes. Воно виконує дві функції: 

  • шукає у кластері модулі, яким не вистачає ресурсів та надає їм додаткові вузли,
  • видаляє вузли, які мало використовуються та переплановує поди на інші ноди.  

Якщо трафік ваших сервісів відносно стабільний та його можна передбачити, є сенс відстежувати потреби в ресурсах та налаштувати обмеження. Проте якщо у вас дуже коливається трафік, наприклад, через сезонні розпродажі, встановити такі обмеження досить складно. В такому випадку допоможуть: 

  1. Horizontal Pod Autoscaler для горизонтального масштабування подів. Він спостерігає за використанням ЦП та пам’яті, на базі чого збільшує або зменшує кількість подів. Так він масштабує робоче навантаження відповідно до потреб.
  2. Cluster Autoscaler для масштабування кластера. Автоматично додає або забирає вузли відповідно до показників використання модулів та вузлів.

Вибір правильної хмарної послуги

Постачальники хмарних послуг мають різні варіанти співпраці. Визначте той, що допоможе зекономити ваш бюджет. При цьому враховуйте потреби та специфіку свого бізнесу:

  • Інстанси на вимогу (On-demand Instances): в цьому випадку ви платите лише за час використання сервісу, тобто за роботу запущених інстансів.
  • Зарезервовані інстанси (Reserved Instances): підходить, якщо ви знаєте свої вимоги, тож можете оплатити їх наперед. Якщо сплачувати за послуги на 3 роки вперед, ви заощаджуєте кошти. Це як з абонементом у зал: з річним абонементом ціна за місяць менша, проте ви маєте бути певними, що ви проходите туди довше, ніж 2 тижні.
  • Точкові інстанси (Spot Instances): це невикористані інстанси в дата-центрі хмарного провайдера. Це дешевше, ніж попередні варіанти, проте вони непостійні. Провайдери називають їх по-різному, проте суть та сама. Ви можете використати їх за меншу ціну, але їх можуть забрати, якщо вони будуть потрібні замовникам зарезервованих або інстансів на вимогу.

Правильний розмір нодів та подів

Якщо розподіл пам’яті та ресурсів неоптимальний, це не тільки впливає на витрати, а й погіршує загальну продуктивність програми. Тож необхідно грамотно виділяти ресурси під потреби нодів та подів: скоротити зайве, але не урізати необхідні ресурси.

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

Надлишок ресурсів можна дізнатися за допомогою інструмента Kubernetes Resource Report. Він також покаже конкретні місця, де варто знизити запити на ресурси. 

Графік сну

Інстанси, які ви мало використовуєте, коштують вам більше, якщо їх роботу не припиняти. Тому все просто: не працюєте з кластером зараз — переведіть його у режим сну. 

Наприклад, ваша команда розробників працює з хмарним середовищем Kubernetes у стандартний робочий час з 9 до 18. Тоді логічно вимикати середовище з 6 вечора до 9 ранку, оскільки у цей період ви марно витрачаєте кошти.  

Ви можете встановити та автоматизувати розклад сну та вмикати середовища лише за потреби. Так система автоматично зменшить невикористані ресурси, а робочий процес не перериватиметься, адже середовище увімкнеться самостійно. 

Висновок

Контейнери змінили та заполонили сферу ІТ, а Kubernetes став найпопулярнішим інструментом для керування ними. Він має багато корисних функцій та задає планку іншим гравцям ринку.

Одним з недоліків Kubernetes є те, що з ним доволі складно розібратися. Проте, якщо ви це зробили, перед вами відкривається світ необмежених можливостей для роботи з контейнерами. Щоб отримувати від цього світу максимум, треба вміти правильно розподіляти ресурси та витрачати бюджети компанії.
Як зменшити витрати на K8s ви вже знаєте. Навчіться працювати з ним на нашому курсі «Адміністрування Kubernetes», щоб стати DevOps інженером, про якого мріють найкращі роботодавці.

Залишити відповідь

Дякуємо, що поділились