Ріквести і ліміти в кубернетесі це ще одна з простих штук, що насправді складні 🙂 Не всі розуміють до кінця, що вони означають і як працюють. Дехто вважає, що за допомогою ріквестів можна додати ресурсів до своїх сервісів. Типа збільшуємо CPU вдвічі і отримуємо вдвічі більшу швидкодію.
Звісно це не так. Швидкодія залежить насамперед від самого сервіса, як він може використовувати наявні ресурси. Якщо у вас однопоточний код, то зайві CPU використовуватись не будуть. Проте вони будуть займати квоту на нодах, не дозволяючи запустити інші поди, хоча є вільні ресурси. Ефект собаки на сіні.
Виходить, що головна задача з ріквестами (і лімітами) -- це вирівняти їх з актуальним споживанням сервісів. Взяти споживання за якийсь час, і поставити ріквести в якийсь перцентиль (95 чи 99).
Задача нескладна, але нудна. Колись памятаю в одній із моїх попередніх контор це була ініціатива на місяці. Спочатку девопси довго робили дашборд на графані, де можна було порівняти ріквести і актуальне споживання. Потім команди підлаштовували свої сервіси під ріквести, щоб усе співпадало. Десятки (може і сотні) годин було витрачено на це. А чи не можна це якось автоматизувати?
Насправді можна. В кубернетесовському репо kubernetes/autoscaler є проект Vertical Pod Autoscaler, який як вміє рекомендувати правильні налаштування ріквестів і лімітів з огляду на фактичне споживання. Крім того, він може сам їх змінювати, використовуючи різні стратегії.
Це все доволі круто, проте VPA працює за допомогою спеціальних типів ресурсів, які треба створювати окремо. В цих ресурсах можна задавати стратегії, граничні значення (часом VPA може порізати сервіс більше, ніж треба) ну і ресурси, які треба налаштувати (це деплойменти, стейтфул сети і тд). Коли в нас нові сервіси, то просто до маніфестів додається ще маніфест автоскейлера, і потім ми не паримось щодо ріквестів та лімітів. Але що робити, якщо ми лише зараз прочитали цей пост, і хочемо автоматично поскейлити всі наші сервіси, яких в нас багато? Додавати вручну ресурси автоскейлера звісно можна, але це якось неспортивно і нудно.
Для вирішення такої задачи є інструмент goldilocks (хз шо за назва). Це штука, яка автоматично створює маніфести автоскейлера у неймспейсах, і конфігуриться анотаціями (лейблами) неймспейсів.
Вона вміє показувати дашборд з рекомендованими значенями, які можна використовувати для налаштувань ріквекстів і лімітів. І так само за домогою лейблів можна зробити так, щоб ріквести і ліміті налаштовувались автоматично.
Це чудовий варіант порізати всі свої сервіси, потім поспостерігати за їх поведінкою
Звісно це не так. Швидкодія залежить насамперед від самого сервіса, як він може використовувати наявні ресурси. Якщо у вас однопоточний код, то зайві CPU використовуватись не будуть. Проте вони будуть займати квоту на нодах, не дозволяючи запустити інші поди, хоча є вільні ресурси. Ефект собаки на сіні.
Виходить, що головна задача з ріквестами (і лімітами) -- це вирівняти їх з актуальним споживанням сервісів. Взяти споживання за якийсь час, і поставити ріквести в якийсь перцентиль (95 чи 99).
Задача нескладна, але нудна. Колись памятаю в одній із моїх попередніх контор це була ініціатива на місяці. Спочатку девопси довго робили дашборд на графані, де можна було порівняти ріквести і актуальне споживання. Потім команди підлаштовували свої сервіси під ріквести, щоб усе співпадало. Десятки (може і сотні) годин було витрачено на це. А чи не можна це якось автоматизувати?
Насправді можна. В кубернетесовському репо kubernetes/autoscaler є проект Vertical Pod Autoscaler, який як вміє рекомендувати правильні налаштування ріквестів і лімітів з огляду на фактичне споживання. Крім того, він може сам їх змінювати, використовуючи різні стратегії.
Це все доволі круто, проте VPA працює за допомогою спеціальних типів ресурсів, які треба створювати окремо. В цих ресурсах можна задавати стратегії, граничні значення (часом VPA може порізати сервіс більше, ніж треба) ну і ресурси, які треба налаштувати (це деплойменти, стейтфул сети і тд). Коли в нас нові сервіси, то просто до маніфестів додається ще маніфест автоскейлера, і потім ми не паримось щодо ріквестів та лімітів. Але що робити, якщо ми лише зараз прочитали цей пост, і хочемо автоматично поскейлити всі наші сервіси, яких в нас багато? Додавати вручну ресурси автоскейлера звісно можна, але це якось неспортивно і нудно.
Для вирішення такої задачи є інструмент goldilocks (хз шо за назва). Це штука, яка автоматично створює маніфести автоскейлера у неймспейсах, і конфігуриться анотаціями (лейблами) неймспейсів.
Вона вміє показувати дашборд з рекомендованими значенями, які можна використовувати для налаштувань ріквекстів і лімітів. І так само за домогою лейблів можна зробити так, щоб ріквести і ліміті налаштовувались автоматично.
Це чудовий варіант порізати всі свої сервіси, потім поспостерігати за їх поведінкою