> ## Content Index
> Fetch the complete content index at: https://www.rozhkov.me/llms.txt
> Use this file to discover other available public pages before exploring further.

# Власні хмари: Kubernetes
- URL: https://www.rozhkov.me/private-clouds-kubernetes/
- Published: 2023-01-09T08:00:00.000Z
- Updated: 2023-01-09T09:27:56.000Z
- Author: Vova Rozhkov
- Tags: інструменти, робота

*Цей пост мав бути опублікованим 24-го лютого, але так і провисів у чернетках аж до сьогодні. Подальшу роботу я не проводив, бо [перевіз все на fly.io](https://www.rozhkov.me/friendship-ended-with-heroku-now-fly-io-is-my-best-friend/).*

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

Раніше я [прикидував ціни](https://www.rozhkov.me/kubernetes-pet-projects-cost-estimation/) на менеджед кубери й вибрав [Scaleway](https://www.scaleway.com/en/). Мій рахунок за Heroku зараз складає $53.02\. Потрібно було підняти ще один сервіс, а це значить +$16 за базу та інстанс. В таких умовах подумав що можна буде перевезти все що крутиться на хероку в кубер, зекономити грошей та отримати кращу швидкодію. Стандартні хероківські інстанси слабкі, а збільшення потужності коштує дорого. Scaleway за ті самі гроші був би краще.

![](https://images.unsplash.com/photo-1667372459607-2cfe842fdc4b?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDExfHxrdWJlcm5ldGVzfGVufDB8fHx8MTY3Mjc0ODM0OQ&ixlib=rb-4.0.3&q=80&w=2000)

Photo by [Growtika Developer Marketing Agency](https://unsplash.com/@growtika?utm%5Fsource=ghost&utm%5Fmedium=referral&utm%5Fcampaign=api-credit) / [Unsplash](https://unsplash.com/?utm%5Fsource=ghost&utm%5Fmedium=referral&utm%5Fcampaign=api-credit)

### [Kubernetes](https://kubernetes.io/)

Кубер на коні. Google вкинув величезну кількість грошей в маркетинг, тому зараз це стандарт контейнерної оркестрації. Висока складність та поріг входу призвели до появи професії Senior Yaml Developer, які займаються виключно тим що бавлять кубер фултайм.

Є плюс — багато вендорів надають managed рішення, тобто беруть на себе всю роботу по налаштуванню, оновленню та підтримці control plane куберу. Вам залишається під'єднатися до кластера та працювати з ним, на відміну від Nomad, де все потрібно робити самотужки.

Scaleway не бере грошей за кубер. Ви платите тільки за ресурси, які використовує кластер. Щоб дізнатися, скільки пам'яті залишається на апки, я розгорнув кластер, та був приємно вражений: вся кухня+інгрес+cert-manager з'їли приблизно 22% RAM однієї 4GiB ноди, тобто для моїх задач залишалось приблизно 3.5GiB, достатньо щоб повністю мігрувати з Heroku.

План був такий як і для Nomad: Terraform для всіх ресурсів та CI/CD.

З тераформом розібрався досить швидко: кластер та база [піднімаються](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs) без проблем.

А ось з кубером конкретно пововтузився.

Спільну для всіх частину інфраструктури (ingress та cert-manager) я теж запхав у тераформ, а для апок зробив Helm chart. Кожен сервіс і в Nomad і в K8S розгортається згідно дефінішену. Для Nomad він пишеться на [HCL](https://github.com/hashicorp/hcl), а для кубера в YAML. HCL досить читаємий; крім того, сама структура Nomad джоб дуже проста. Куберівський ямль — це величезне та складне нагромадження купи об'єктів, які для непідготовленої людини виглядають незрозуміло.

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

Для того, щоб оновлювати сервіс та деплоїти нові версії, вам потрібно якимось чином шаблонізувати цю гору ямлів. На допомогу приходить [Helm](https://helm.sh/). Проблема в тому, що дефолтний шаблон, який вам пропонують, переускладнений та рясніє купою незрозумілих речей.

В Nomad конфігурації в мене був 1 (один!) файлик на 80 рядків з двома джобами: перша для міграцій, інша розгортає вебсервіс. Ну добре, ще один файлик для траєфіку, але він один на всіх.

В кубері для тієї ж задачі я маю 8 (вісім!) файлів, три з яких на 80 рядків, і це тільки вебсервіси.

З декількох туторіалів по кейворду «rails helm» мені вдалося зібрати робочу конфігурацію та все заколосилось.

Невирішеними залишилися ті ж питання: Vault та CI/CD. Секрети я склав в куберівські, а для CI/CD встановив на кластер GitLab агента, який дозволяє сек'юрно без прямого з'єднання з кластером запускати куберівські команди з гітлаб пайплайну. Приведу до ладу Helm чарти, а там вже буде діло техніки

Для цієї конфігурації я теж підготую мануал. *upd: мануал я так і не зробив, бо було не до того, а потім переїхав на Fly і вже не було мотивації щось робити.* В інтернеті ви знайдете мільйон туторіалів по куберу, але одиниці розжовують покроково що відбувається, натомість ви просто копіпастите ямлі та сподіваєтеся що все запрацює.

Одне тішить — всю цю роботу потрібно зробити один раз, а далі пожинати плоди автоматизації.