Чому не варто використовувати Kubernetes

💡 Усі статті, обговорення, новини про DevOps — в одному місці. Приєднуйтесь до DevOps спільноти!

DevOps Engineer з Франції Поль Бріссо, який спеціалізується на роботі з системами логування та моніторингу з використанням контейнерних рішень, у блозі на Medium поділився своїми думками, чому не всім потрібен Kubernetes. Ми переклали статтю українською і цікаво, що ви на це скажете.

За майже 10 років Kubernetes став стандартом у сучасного ІТ. Багато великих компаній, технологічних чи ні, використовують його для хостингу інформаційної системи. І це нормально, оскільки ця технологія має багато переваг над класичними рішеннями, як-от самовиправлення, гнучке горизонтальне та вертикальне масштабування, що гарантує стійкість і еластичність інфраструктури до навантаження. Однак чи це єдине на сьогодні рішення для задоволення цих потреб? Які обмеження Kubernetes і переваги його альтернатив?

Слабкі сторони Kubernetes

Надто складно

Kubernetes має чималий API, який можна нескінченно розширювати для додавання функціональності. Тому після розгортання нового кластеру багато необхідних компонентів відсутні або не дуже придатні для використання. Розробникам часто доводиться починати роботу з Kubernetes із встановлення Ingress-контролера (реверсивний проксі, що слухає вхідний трафік) або сховища даних. Крім того, вам доведеться звернутися до сторонніх розширень, щоб додати моніторинг, безпеку чи інші доповнення.

Усі ці доповнення вимагатимуть від вас відповідних технічних навичок, щоб їх інсталювати, налаштовувати та підтримувати в актуальному стані. Крім того, ці компоненти потребуватимуть ресурсів процесора та оперативної пам’яті, що збільшить використання ресурсів кластеру і, як наслідок, коштів.


Невелика частина екосистеми Kubernetes. Джерело: CNCF Landscape

Надто дорого

Kubernetes, як і будь-яка кластерна система, вимагатиме більше ресурсів для хостингу навіть найпростішого додатка через забезпечення відмовостійкості та масштабування (контролер кластеру, Ingress контролер і т.д. — ред.). Якщо ми додамо до цього майже обов’язковий технологічний надлишок, згаданий у першому пункті, ми отримаємо додаткові витрати. Хмарні рішення для Kubernetes (Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS), Azure Kubernetes Service (AKS)) пропонують трохи більше гнучкості щодо розміру кластера (автоматичне надання вузлів / широкий вибір розмірів віртуальних машин), проте з ними треба дуже уважно контролювати всі витрати на інфраструктуру.

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

Зміна методології розгортання

З Kubernetes ми радикально змінюємо нашу філософію в порівнянні з тим, що ми робили десять років тому. Минули часи, коли реліз на продакшн програмного забезпечення був простим копіюванням файлів з одного сервера на інший. Тепер вам потрібно скомпілювати код, створити образ, додати його в реєстр, змінити версію в маніфестах, а потім розгорнути в кластері.

Чи зробили ми крок назад порівняно з тим, що робили раніше? Ні, якщо цей розрив нівелюється відповідними інструментами, сумісними з новою процедурою. Використання Kubernetes поза гарно налаштованого CI/CD механізмів є величезною помилкою. Побудова належного робочого процесу GitOps необхідна для економії часу, впевненості та спокою під час розгортання. Але це також означає освоєння нових технологій і додаткові витрати.


Приклад робочого процесу GitOps з ArgoCD

Конкуренти

Для початку визначимось, хто «вони»? Для мене основними конкурентами Kubernetes є сервіси PaaS (Platform as a Service), FaaS (Function as a Service) і CaaS (Container as a Service). Я не беру до уваги Kubernetes-подібні (Openshift або Nutanix Karbon), оскільки вони мають ті самі симптоми, що й їхній старший брат.

PaaS і FaaS схожі, оскільки дають можливість розгортати та виконувати скомпільовані програми в розділених середовищах. FaaS — це служба хмарних обчислень, з допомогою якої розробники додатків отримують простий спосіб запуску та управління — з допомогою виконання коду у відповідь на подію, тоді як PaaS призначений для більш сталих додатків (вебсайтів, серверної частини). CaaS дозволяє виконувати образ певного контейнера.

Ось неповний перелік таких послуг:

Приклади послуг PaaS / FaaS / CaaS

Першою перевагою цих сервісів є простота використання. Ви підключаєтеся, налаштовуєте, і через 10 хвилин готово! Нема потреби знати технологію, яка стоїть за цим (навіть якщо з 99% ймовірності це контейнер у кластері Kubernetes); це просто працює. Більше ніяких нічних оновлень і жодних міграцій до іншого центру обробки даних у вихідні. Крім того, для PaaS і FaaS вам не потрібно створювати образ Docker для вашої програми; платформи працюють на вас! Хіба життя не величне?

Звичайно, за всі ці переваги доведеться заплатити вашою свободою дій.

Порівняння Kubernetes з іншими платформами

Найсуттєвішою перевагою цих платформ є ціна. Ви можете розмістити свою програму всього за кілька доларів на місяць і скористатися перевагами автоматичного масштабування або сертифіката TLS. Проте остерігайтеся прихованих витрат; деякі платформи стягують плату за моніторинг або обмежують кількість розгортань на місяць.

Випадки, коли Kubernetes перемагає

І хоч конкуренти достойні, проте їм далеко до Kubernetes.

Саморозміщена (Self-hosted) / гібридна інфраструктура

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

Завдяки своїй універсальності та низькій обчислювальній потужності Kubernetes можна запустити на будь-якому залізі від RaspeberryPi до надпотужного сервера або хмарних середовищах.


Гібридна архітектура з Banzai Cloud

Програми з підтримкою збереження стану

Описані в попередньому розділі сервіси в основному використовуються для розміщення програм в форматі «без збереження стану» (stateless). Ваш додаток має мати можливість горизонтального та вертикального масштабування, через це неможливо зберегти дані, створені конкретною реплікою вашої програми, наприклад, кеш. Тож забудьте про ідею розміщення баз даних у таких сервісах напряму, це не працює! Замість цього вам доведеться звернутися до спеціалізованих хмарних служб, таких як MongoAtlas або CloudSQL.

Kubernetes також заточений на підтримку програм в форматі «без збереження стану» (stateless), ба керування такими програмами там набагато легше! Але за допомогою розширення StatefulSets і підтримкою сховищ даних запуск бази даних у Kubernetes не тільки можливий, але й працює у продакшені.

Бізнес-логіка в Kubernetes

Ми підійшли до основного, але не найочевиднішої переваги використання Kubernetes — він має розширюваний API, що підтримує реалізацію кастомної бізнес-логіки для ваших конкретних задач. Ви можете створити, наприклад, новий спеціальний ресурс під назвою «Клієнт», який, опинившись у кластері, дозволить вам керувати спеціальною таблицею стилів або новим записом DNS.

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

Висновок

Незважаючи на те, що Kubernetes не дуже простий, він є повним та прозорим рішенням для підтримки глобальної інфраструктури. Однак на початкових етапах розробки додатків сервіси PaaS / FaaS дозволять вам більш ефективно розміщувати свої послуги, заощаджуючи гроші.

А яка ваша думка, спільното?

👍ПодобаєтьсяСподобалось5
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Тож забудьте про ідею розміщення баз даних у таких сервісах напряму, це не працює! Замість цього вам доведеться звернутися до спеціалізованих хмарних служб, таких як MongoAtlas або CloudSQL.

Треба нашим девопсам сказати, що ELK на 50 гб/день — то не працює

ДОУ перетворився на Хабр

Швидкий потік непотрібу.
Too much information is no information

Too much information...

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

Для свого невеличкого проєкту використовуємо Gitlab AutoDevOps та Kubernetes на DigitalOcean.

Завдяки безкоштовній Control Plane, кости такі ж самі, що були би при ручному розгоратнні зоопарку на звичайних VPS. Але часу незрівнянно менше витрачено на налаштування всього добра.

А взагалі це починає нагадувати як пішов хайп на монгу і її почали пхату куди потрібно та не потрібно, а потім почався хайп з жалобами.
Айті не меняється взагалі :-)

Усім треба хайпові скіли у CV.

Для кого хайп, а для кого один із основних інструментів... ;))

Якщо у вас задача для молотка и ви берет мікросокоп, то це ваша проблема.
Коли у вас купа єнвів, сервісів та пайплайнів, а іще потрібно це скейлити динамічно, то я манав це робити без кубера.
Стосовно ціни, ажурівський кубер сервів буде дешевше за апп сервіси, от просто тому що віртуалки найдешевші в клаудах.
Налагодити одну більш складну ситстему один раз, та потім мати інфраструктуру що скейлиться вниз і вгору, само перезапускає впавший сервіс, та в пару кліків заливає код на прод\дев це офігенно. Звісно що без сіньорного девопса зробити таке важно.

Мене запрошували на проект де з віртуалок мігрували в кубер, бо з ростом проекта виявилось що хочеться оцих всіх фіч а для цього треба писати свій кубернетіс=)

Після тривалої підтримки та впровадження нових фіч у макаронно-легасні проекти які лежали на VPS, міграція на K8s та їх подальша підтримка — це просто a breath of fresh air.

Скажем так, гомогенність ресурсів і єдиний підхід до CRD чи навіть одноманітність чартів чи кастомайз багато вирішує

Все в айті перетворилось в yaml-болото так чи інак

Але одна справа стрибати між 100500 типів імперативнодекларативного yaml (типу ансібл там, ансібл сям, папет етам, костиль туди костиль сюди)

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

Інша справа стрибати між 100500 більшменш структурно однакових yaml, що від версії до версії працюють без особливих проблем. Глюки й зміни в к8с теж є, але не настільки непідйомні й депресивні

В кінці кінців, з к8с набагато менше треба все менеджити, хоч здавалося б так, складніше, сон от теж покращився

В порівнянні з усякими nomad, то там простота оманлива — те що в кубері з коробки, доводиться робити окремо (той же консул чи csi). Чартів взагалі там нема, все от сам пиши з нуля. Лоадбалансер та ip-failover коли нода падає — нє не чув, сам роби солюшен. Короч для архіпростих кейсів без стореджа і серйозного HA — може й гут, але це настільки лабораторна ніша, що всерйоз не варто навіть розглядати

Все що називається продакшен на простому номад — обросте десятком додаткових костилів зовнішніх , і результат зовсім далекий від простоти

Не знаю як це гарно називається, я для себе називаю це ментальна складність.

Так от ментальна складність інфраструктури на к8с в рази нижча

А розкажу но я про складність кубера

Довго плювався я на той складний кубер, користувався «простішим» nomad

Півроку мучився з кольоровим докєр сворм, півтора роки мучився з кольоровим nomad, але гриз простіший кактус

Потім плюнув і за два дні переніс абсолютно все в цей складний кубер, і почалося сіре складне життя, а не кольорове просте.
Запушив у гіт — і все заводиться з півоберта, навіть не падає нічо місяцями, де тут щастя, де тут challenge??

Нікому не раджу кубер

Навіть для копійчаного вебсайта чи лендін пейджа реально краще не ставити цей якийсь складний k0s, краще щось просте

Повністю погоджуюся. Особливо вражає коли використовують Кубернетес на продуктах на яких зарання відомо що ніколи не буде великого навантаження з мільйонами запитаів по всьому світу.

Kubernetes це не про кількість запитів, а про уніфікацію управління додтками.

який сенс з цієї уніфікації, якщо на всьому продукті використовується лише амазон, чому не використати ECSorLambda?

Ну якщо треба якнайдешевше, то кубер не варто, бо він, якщо ціни не змінилися, коштує $47/місяць за кластер (за control plane) + віртуалки (або фаргейт).

Якщо ж щось більш-менш велике, щоб ціна кластера не впливала, або не хочеться мати vendor lock-in, то кубер вже варто.

Серйозно? 47 баксів коштуватиме для клієнта приблизно одна година роботи одного сенйор-інженера, тому двозначні цифри в monthly bill за хостінг це взагалі останній аргумент для кастомера.

Exactly.

Якщо бути точним, то ~73 USD.

You pay $0.10 per hour for each Amazon EKS cluster that you create.

Але суті то не міняє.

Компанії, яким 73 USD за кластер це дорого, бізнесом можна називати умовно.
Більше проблем, ніж користі від співпраці з ними.

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

Некомерційним проектам — некомерційні рішення.
— VPS
— системний блок на балконі
— ваш варіант

Та кубернетіс простіше, ніж VPC (якщо кластер вже є).
Ну є також варіант підняти самому кубер в VPC, але то таке

Ну він же не працює десь в повітрі. )
Для цього куб треба буде запустити на VPS або на системному блоці на балконі.

Якщо вимоги до reliability близькі до нуля, тоді і клауд-рішень не треба, за ціною нормальної шавухи можна на місяць взяти віртуалку на хейнері.

Сорян але якщо 47баксів на інфраструктурні витрати то дорого то я навтіь хз що запропонувати. Взагалі то кластер для невеликих рішень (сотні мікросервісів наприклад це велике рішення) достатньо одного кластера на всі потреби дев\куа та окремий для продакшену, тобто 94 доллари. Це ціна не швидкої віртуалки в клауді на місяць.

Ну якщо це твій некомерційний або пет-проект, то, мабуть, простіше не платити ці 70 баксів, ніж платити.

Це ціна лише control plane, тобто до кластера за окрему ціну треба ще додавати власне віртуалки

Ну якщо це твій некомерційний або пет-проект

Ну це ж зовсім інше, там звісно і 5 баксів може бути багато )))) Лоу-кост хостінг то інше.
Кубернетів сам по собі в принципі не для таких рішень.

Декілька років підтримую, розгортаю та покращую кубернет кластера. Нічого складного в цьому не побачив. Залежить від того, ще саме ви це робите. Якщо АВС, то це не проблема, в Гугл трішки складніше. Є багато готових рішень в терафоом, запустив, і воно працює. Так, треба налагоджувати інгрес, моніторинг, але ж ви робите все під себе. Що подобається, те і використовуєте.
Як на мене, складнощі виникають, коли розробники не знають, як це все загорнути в образ, а у мене замало знань в розробці, щоб зрозуміти як це зібрати до купи. Із останнього, було весело з Nidejs + nx. Ще та задача.

Це хибне судження від спеціаліста, що давно подолав поріг входження в кубер (за собою таке ж помітив, що хочеться кубер зі всіма його плюшками там, де його точно не треба), обєктивно для простих проектів на 3-5 мікросервісів managed-рантайм контейнеризації (типу ECS + Fargate) більш придатне і дешевше в плані operations рішення, чи навіть VM-ки + аутоскейлінг.

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

Також, якщо треба, наприклад, з тераформа кластер підіймати — то теж може бути складно, бо у АВС купу ресурсів треба буде створити, яка до кластера не має прямого відношення.

Не погоджусь. Якщо порівнювати з ECS, Kubernetes (у вигляді EKS) сам по собі мало придатний для прод-вокрклоаду, і потребує як мінімум:
1. Моніторинг ресурсів кластера і система алертінгу
2. Log-агрегатор типу ELK/EFK
3. Ingress (по-дефолту ніби і є ALB Ingress, але потребує доопрацювання напилком)
4. Маппінг IAM to k8s RBAC.
5. Вже згаданий cert-manager

Саме тому кілька сусідніх команд проекту хостяь сервіси в ECS, який ready to go (де все це або уже реалізовано cloud-native штуками типу CloudWatch, або реалізовується в кілька рядків терраформу через додаткові нативні сервіси), так і кажуть, що нема експертизи в k8s.

В одному з проєктів видалили k8s бо його підтримка потребувала часу, мігрували все на Google Cloud Run, Google Cloud Functions та Google Cloud Scheduler й тепер команда зосереджена переважно на бізнес-задачах

звісно, бо це залежить від потреб. Комусь і GKE дає недостатньо простору для налаштувань і люди йдуть до GCE, а хтось і з Cloud Functions щасливий.

Підписатись на коментарі