Kubernetes — це справжнє зло. Погоджуєтеся?

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

Знайшов на просторах інтернету статтю про те, чому Kubernetes — це зло. Хочу обговорити її, тому далі — переклад цієї статті. Якщо що, то зроблений від через ChatGPT, тому, якщо знайдете деякі неточності — не бийте 👀

Почну з визнання: я вважаю Kubernetes однією з найбільших перепон на шляху до справжніх інновацій у хмарних обчисленнях сьогодні.

От, я сказав це. Перш ніж ви візьметеся за вила і почнете твітити гнівні коментарі на кшталт «K8s масштабує!» чи «демократизує розгортання контейнерів» — дайте пояснити.

Бо під усією цією YAML-магією та гучними конференціями, на мою думку, ховається фундаментальна архітектурна помилка, яка гальмує всю індустрію.

У чому справжня проблема, яку варто було б вирішувати

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

Це не нова проблема. Ми вже бачили її в минулому — згадайте CORBA? Так, той стандарт з 90-х, який намагався забезпечити сумісність між різними системами. Схожа концепція, інша епоха, інші умови.

Якщо подумати, ідеальне хмарне розгортання виглядає просто: ти пишеш код і відправляєш його «вгору» в хмару. Мінімум проміжних кроків. Ідеально — миттєво. Написав — розгорнув. Готово.

(Я зараз не про тестування чи безпеку — це окремі етапи. Миттєве розгортання не заважає їм, а, навпаки, полегшує: система буде чистішою, передбачуванішою.)

Яким би мав бути ідеальний світ

В ідеалі ми мали б щось на кшталт Erlang чи Unison — мови, створені з думкою про розподілені обчислення. Але доступні для будь-якої мови програмування.

І знаєте що? Такі універсальні компоненти вже існують. Подивіться на WASI (WebAssembly System Interface) — це компоненти на основі WebAssembly, які можна скомпілювати з будь-якої мови у швидкий, кросплатформовий формат.

Це була б моя мрія: пишеш у чому хочеш, компілюєш мікросервіси в семантично значущі компоненти на WASI — і розгортаєш їх будь-де.

Подібний підхід вже реалізовано в Apache OpenServerless. Там фокус — на логіці компонентів, а не на мікроменеджменті інфраструктури.

Docker-катастрофа

А тепер — чим насправді стало стандартом у хмарі? Docker.

Що таке Docker, якщо по-простому: це бутерброд з образів дисків, куди можна запхати все, що завгодно, і потім запускати все це без будь-якого контролю поведінки — хоч воно старе, нестабільне чи повне лайна.

Вдумайтесь: ми будуємо хмарну інфраструктуру навколо концепції «компонента», яка взагалі не має визначення. Docker-компонент — це просто «образ з випадковим вмістом». Уся його «революція» — в економії місця у порівнянні з повними віртуалками. Все.

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

Чому Kubernetes такий важкий

Kubernetes важкий не тому, що розподілені системи складні (хоча це теж правда). Він важкий тому, що він — це збирач сміття.

Кожен компонент у кластері K8s може порушувати будь-які правила, жерти пам’ять без обмежень, крашитись, зациклитись — і це твоя проблема.
Немає жодних гарантій поведінки, немає угод, немає абстракцій. Тільки ти й хаос.

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

Симптоми?

  • Нескінченні YAML-файли, які ніхто до кінця не розуміє;
  • «Експерти Kubernetes», які вивчають магічні заклинання замість вирішення реальних проблем;
  • Конференції, де обговорюють складні рішення для проблем, які не мали б існувати.

Це справжній карго-культ: ми виконуємо ритуали (писання Helm-чартів, налаштування service mesh, тюнінг ресурсів), не ставлячи питання «навіщо» і «чи справді це розв’язує проблему».

У чому ж тут вузьке місце для інновацій?

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

Стартапи, які мали б «рухатися швидко і ламати речі», витрачають тижні на налаштування CI/CD.
У корпораціях створюють окремі департаменти «платформної інженерії», щоб приручити звіра Kubernetes.
Когнітивне навантаження величезне. Втрати часу — колосальні.

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

Ефект замикання

Kubernetes також створив сильний ефект lock-in, який душить конкуренцію. Коли компанія вже вклалася у фахівців, інфру та тули, змінити підхід дуже важко.

Цей lock-in не лише технічний — він ще й культурний та організаційний. Якщо ти критикуєш Kubernetes — ти ніби ставиш під сумнів компетентність усієї команди.

І поки ми відловлюємо «впавші поди» й вчимося Helm’у, світ розподілених обчислень просувається в інших напрямах — без нас.

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

А що ж робити?

  1. Визнати, що король голий. Kubernetes — це не неминучий наслідок складності. Це наслідок помилкової абстракції.
  2. Інвестувати в кращі абстракції. WASI, WebAssembly, Erlang, Unison — це напрямки, де розподіленість працює по-іншому.
  3. Не нашаровувати ще більше на Kubernetes. Кожен новий тул — ще одна латка. Система не стає від цього здоровішою.

Незручна правда

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

Вендори продають «Kubernetes management»-інструменти. Консультанти гребуть гроші. Конференції мають про що говорити.

Але ціна — інноваційна стагнація. Ми витрачаємо час не на створення нового, а на боротьбу зі створеним нами ж хаосом.

Час вирватись

Цей текст не сподобається багатьом. Kubernetes — це релігія, навичка, статус.

Але іноді треба визнати: ми пішли не туди.

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

Майбутнє хмар не повинно бути про менеджмент хаосу. Воно має бути про передбачувану поведінку за замовчуванням, вбудовані гарантії, і справжню роботу, а не танці з Helm-чартами.

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

Отож, чи погоджуєтеся ви з думками автора? Чи справді кубернетес — це така шляпа чи все таки автор помиляється?

👍ПодобаєтьсяСподобалось8
До обраногоВ обраному2
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

Заголовок в стилі «ООП мертве» / «кінець ПХП» і тд

Один *облик згенерував через ШІ дуже срачливу статтю, другий «вельмешановноповажний пан » через ШІ її переклав а от «шановне панство» у коментах намагається переконати ШІ що його стаття гівно.. Цікаво читати тільки коментарі

— Передати все хмарі (AWS Fargate, Cloud Run чи Heroku) — зручно, але дорого.
— Docker Swarm — непогано для невеликих проєктів, але немає розвитку та підтримки.
— Kubernetes — складний, але менше зло: контроль, гнучкість, екосистема.

Ще не встиг вивчити Docker і Kubernetes а його вже критикують

О, хоч одна людина з мізками ))

Як казав архітек на попередній роботі — усі топ технології абсолютне дерьміще, але що робити?

Вы понимаете НОЛЬ в контейнеризации и НОЛЬ в оркестрации и беретесь рассуждать.

просто пример перлов автора:

і потім запускати все це без будь-якого контролю поведінки

прежде чем нести такую чушь — шагом марш читать каким образом каким образом можно ограничить и описать ВСЕ — от расхода ресурсов до сети и прочего.

Розробникам якось пофіг, то нехай девопси думають що з тим робити😂

Але розробники відчуватимуть наслідки на собі.
Це не просто «не пофіг», а «не пофіг» з яким ти ще й зробити нічого не можеш

І що, ти часто ганяєш кубер на локалі? А на енвах різних за останні 10 років у мене якось не було потреби знати кубер більше ніж базові команди які гугляться за хвилину.

Нагадує типовий накид для збору переглядів. У задачі оркестрації є кілька рівнів рішень — від статичного розподілу до serverless в хмарі, і k8s це один з них, зі своїми плюсами і мінусами. Але сама по собі вона нікуди не дінеться, хоч у Erlang, хоч з WebAssembly.

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

Якщо що, то зроблений від через ChatGPT

Переклад еще куда не шло через AI.

I asked an AI to write a brutally honest

Зачем мне читать статью написанную AI, если могу сам его спросить.

А чого стаття, написана АІ, якщо вона не написана АІ? Стаття написана реальною людиною (посилання на оригінал є в тексті), а от переклад самої статті вже зроблений через ШІ 🤔

Так я открыл оригинал, и он черными буквами английским текстом пишет, что

Those aren’t technically my opinions.

They’re the unfiltered thoughts of an artificial intelligence that doesn’t have to worry about getting uninvited from KubeCon or losing consulting gigs with companies heavily invested in the K8s ecosystem.

В теорії було Inferno — благо, а на практиці виявилось, що конетейнери та Kubernetes, калуди, Open Shit і т.п., SOA, мікросервісна архітектура Amazon 6 і т.д. більш гнучкі і добре працють коли інженери будють реальні системи массовго обслуговування. А от Inferno залишились в розряді експерементальних систем.
В теорії С — жахлива мова програмування, на практиці через гнучкість і близкість до заліза, навпаки дуже широко викорисутовуються і надає можливості, які «синтаксично чисті» мови навпаки не надають. А синтаксис викорастаний в мовах надмножинах як то Objective C та С++, та мовах наслідниках : Java, C#, JavaScript, PHP, Perl, Go, D та інші.

Kubernetes — це вимушене зло. Чудовий інструмент який не завжди використовують там де він дійсно потрібен. Якщо у вас деплої на сотні-тисячі контейнерів тоді гратись з Docker Compose чи навіть чимось типу Nomad може бути не зовсім зручно, але досить часто його тягнуть туди де контейнерів десятки і в таком випадку ви більше граєтесь з Кубом ніж вирішуєте реальні задачі бізнесу

Ще раз перечитав...

В ідеалі ми мали б щось на кшталт Erlang чи Unison — мови, створені з думкою про розподілені обчислення. Але доступні для будь-якої мови програмування.

... Мови програмування, доступні для будь якої мови програмування ???

... вот за фак ???

я поставив собі ще якусь з перших версій k8 локально, тому що по роботі треба було різні os/libs та інше (віртуалки повільно, docker/docker composer не зручно)
а потім воно якось виявилось по зарплаті ефективно — на теперішній роботі 150+ кластерів

по досвіду
— bare metal k8 мабудь велике зло (ніколи не ставив), повага людям які спробували і у них працює
— якщо хтось-щось підняло (minikube, gke) то більш менш норм (іноді багує, але хто без гріха)
— yaml мале зло (зайвий пробіл привіт) , у мене є мрія, щоб в k8 додали натівну підтримку hcl (формат як в terraform/nginx conif)
— helm — адміни вигадали свій пшп через який генерують yaml, з усіма проблемами пшп. більш менш норм запускати helm через terraform/tofu
— відносна легкість встановлення різного стороннього софту (і відносна складність конфігурування-пітримування в актуальному стані) призводить до того, що кластер легко засрати до непрацюючого стану , три рази треба подумати чи щось треба чи ні
— дефолтні налаштування (подів, деплоїв, sts) доволі непрактичні, воно запускається але потім не стабільно працює (а один кривий под може покласти всю ноду)
— деякі штуки зроблені трохи криво (хто збільшував розмір диску у sts, зрозуміє) , але жити можна
— по грошам дорожче голих vm, але дешевше усяких functions/run

хто збільшував розмір диску у sts, зрозуміє

Ну PRу всего полтора года и 200 сообщений xD Ну то если старые не смотреть
github.com/...​es/enhancements/pull/4651

— bare metal k8 мабудь велике зло

тут жирний +, дай боже здоровля і терпіння тим трудягам які то встановлюють і підтримують

Ох.. ну порівнюати оркестратор з мовами програмування — ну, таке.

Docker як такий мені теж не дуже подобається архітектурно, Але k8s — це ж оркестрація. не подобається докер — оркеструйте щось інше, хоч віртуалки

kubevirt.io/user-guide/architecture

yaml може не подобатись, але знов таки, немає жодного сенсу його порівнювати з мовами програмування: бо суть мови — опис того, ЩО ПОВИННО БУТИ ЗРОБЛЕНО І ЯК. Суть маніфестів на yaml — ЯКИЙ ПОВИНЕН БУТИ СТАН СИСТЕМИ. Це ж геть інше.

І складні вони не тому, що там сміття, а тому що сам стан системи — складний. Ви не зможете описати літак в 3 реченнях.

Десь чув: “For every complex problem there is an answer that is clear, simple, and wrong.” Неможливо вирішувати складні проблеми простими рішеннями.

and so then this one-liner itself

For every complex problem there is an answer that is clear, simple, and wrong

is clear, simple, and wrong
:)

“this problem” контекстно-перпендикулярно до

every complex problem

:)

На сьогодні немає альтернатив куберу для мульті контейнерів бо лише кубер має купу плагинів(операторів і тд ). Наприклад AWS ECS теж може запускати контейнери але немає плагинів. Також немає курсів нормальних по куберу , все треба вивчати с практики і помилок. Якщо говорити про величезні проекти (щось міжрегіональне з мультиконтейнерами) то немає альтернативи навіть звичайному куберу. Лише звичайний кубер можна кастумізувати під потреби на щось велике , всі інші типу AWS EKS нажаль урізані і обмежені. Еко система кубера лише примножується. Тулзи якими користувалися 5 років тому в кубері і зараз вже різні. Все залежить від потреб і грошей. Але кубер мабуть на сьогодні едина платформа для мульті контейнерів з максимальними можливостями.

Якщо що, то зроблений від через ChatGPT

А ChatGPT зроблений на kubernetes

Kubernetes може і зло, але краще, ніж самопальні рішення, якими ми користувались до нього.
Скрипт чи Ansible Playbook деплоя сам напиши.
В crontab команди додай.
Перед аппкою якийсь supervisord постав, чи в конфігі systemd сервіс опиши, щоб перезапускалась.
А health check-и? А rolling/canary/blue-green deployment? А service discovery?
Це все runtime не вирішує сам по собі, що docker, що wasi.
Потрібен якийсь оркестратор.

Подивіться на WASI

Подивіться на топ-мови программування по вакансіям на DOU. Скільки з них збирається в WASM, який би ви самі ризикнули затягнути на прод?
Java? Python? PHP? С#? Чи пропонуєте писати на Rust / Erlang / Unison, щоб позбавитись «проблем зі складністю контейнерів»?

Згадалось років 5-6 тому читав десь новини та статті про nomad від hasicorp, і я його юзав на проді тоді, там писалось щось типу якщо ви обрали кубернетіс то ви вже програли і теж якийсь булшіт як тези, тут десь так само.

Згоден, і на шкідливому виробництві день рахується за два

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

В Google є власний Borg, від якого власне і пішов K8S, нахоробу їм здався всередині сторонній OSS

«Є два види мов: ті на які люді скаржаться і ті, якими ніхто не користується»

Бйорн Страутструп.

Із тулзами так само.

Але якщо відверто, подібні статті десь кожні півроку виходять, але не видно щоби індустрія сильно велася на подібні unpopular opinions.

Майбутнє хмар не повинно бути про менеджмент хаосу.

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

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

кубер це інструмент, а завалюють сміттям ті хто не вміють або не хочуть нормально цей інструмент використовувати!

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

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

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

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

Хтось просто не зміг здолати поріг входження в k8s і написав пост з демагогією.

Що за діч. )
Kubernetes прекрасєн. ©

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