Вступ
В епоху хмарних технологій ефективне управління кластерами Kubernetes є критично важливим для бізнесів, що використовують контейнеризовані додатки. Adidas, світовий лідер у виробництві спортивного одягу, зіткнувся з поширеною проблемою: різким зростанням витрат на інфраструктуру Kubernetes, яка працює в AWS. Завдяки використанню інноваційних інструментів і підходів Adidas вдалося знизити витрати на Kubernetes на вражаючі 50%. У цій статті ми детально розглянемо стратегії, які вони впровадили, а також те, як їм вдалося збалансувати продуктивність, масштабованість і економічну ефективність, зберігаючи операційну досконалість.
Виклик: Зростаючі витрати на Kubernetes
З ростом використання Kubernetes в Adidas, відповідно, зросли й витрати. Основними факторами цих витрат були: надмірне надання ресурсів, неефективні політики масштабування, недовикористовувані інстанси та відсутність автоматизації оптимізації ресурсів. Оскільки Adidas використовував EC2 інстанси AWS для запуску кластерів Kubernetes, вирішення цих проблем стало важливим для підтримки прибутковості при масштабуванні їхніх операцій.
Рішення: Багатокроковий підхід
Adidas впровадив структурований підхід для оптимізації витрат на Kubernetes, використовуючи комбінацію інструментів з відкритим кодом, нативних функцій AWS та кастомних політик. Ось кроки, які вони зробили:
1. Правильний розмір EC2 інстансів з Karpenter
Що таке Karpenter?
Karpenter — це інструмент з відкритим кодом для автоматичного масштабування кластерів Kubernetes, який призначений для автоматичного надання правильних типів обчислювальних ресурсів залежно від навантаження в кластері. На відміну від традиційних автоскейлерів, Karpenter оптимізує ресурси з точки зору вартості та продуктивності, консолідує навантаження та вибирає найбільш підходящі типи інстансів.
Як Adidas використовував Karpenter
- Консолідація вузлів: Adidas використовував Karpenter для консолідації навантажень у меншу кількість більших EC2 інстансів, коли це було можливо. Такий підхід зменшив загальну кількість необхідних вузлів, що дозволило заощадити на витратах на управління вузлами.
- Динамічне надання: Karpenter дозволив Adidas вибирати найбільш підходящий тип інстансу для їхніх навантажень динамічно, що запобігло надмірному наданню ресурсів і забезпечило ефективне використання ресурсів.
Результат
Завдяки використанню Karpenter Adidas досяг значного зниження витрат на EC2, забезпечивши при цьому ефективне використання інстансів.
2. Використання Spot інстансів
Чому Spot інстанси?
AWS Spot інстанси пропонують невикористану потужність EC2 зі знижками до 90%. Однак вони можуть бути перервані без попередження, що робить їх непридатними для всіх навантажень.
Стратегія Adidas
- Класифікація навантажень: Adidas розділив навантаження на два типи: стійкі до збоїв (наприклад, пакетна обробка, фонові завдання) та нестійкі (наприклад, сервіси з низькою затримкою).
- Інтеграція Spot інстансів: Навантаження, стійкі до збоїв, були перенесені на Spot інстанси, що дозволило значно знизити витрати на обчислення.
- Механізм аварійного відновлення: Вони впровадили автоматичні механізми для переходу з Spot інстансів на On-Demand інстанси під час переривань.
Результат
Adidas зменшив витрати на обчислення для відповідних навантажень до 70%, не вплинувши на продуктивність додатків.
3. Автоматичні VPAs з Kyverno
Vertical Pod Autoscaler (VPA)
VPAs динамічно регулюють запити на CPU та пам'ять для контейнерів у реальному часі на основі історичних і поточних патернів використання.
Використання Kyverno для автоматизації
- Огляд Kyverno: Kyverno — це Kubernetes policy engine, який дозволяє декларативно керувати налаштуваннями.
- Автоматизація: Adidas використовував Kyverno для автоматичного створення VPAs для нових розгортань. Політики забезпечили динамічну оптимізацію запитів і лімітів ресурсів без необхідності ручного втручання.
Переваги
Ця автоматизація знизила надмірне надання ресурсів, гарантуючи, що поди отримують лише необхідну кількість ресурсів для ефективної роботи.
4. ...
Мінімальні запити ресурсів для обробки пікових навантажень
Стратегія
- Adidas встановив мінімальні запити ресурсів для своїх навантажень, щоб справлятися з періодичними піковими навантаженнями.
- Це запобігло надмірному наданню ресурсів, забезпечуючи при цьому можливість швидко масштабувати додатки під час підвищеного попиту.
Результат
Цей підхід дозволив збалансувати економічну ефективність і надійність додатків, запобігаючи надмірному виділенню ресурсів під час періодів простою.
5. Масштабування під час неробочих годин за допомогою kube-downscaler
Що таке kube-downscaler?
kube-downscaler — це інструмент з відкритим кодом, який призначений для масштабування Kubernetes розгортань та statefulsets під час непікових годин.
Впровадження Adidas
- Заплановане масштабування: Adidas використовував kube-downscaler для зменшення кількості реплік для некритичних навантажень під час непікових годин, наприклад, вночі та на вихідних.
- Динамічні коригування: Кількість реплік автоматично відновлювалася під час пікових годин.
Заощадження
Цей підхід значно знизив витрати на виконання неактивних навантажень, зокрема для середовищ розробки та тестування.
6. Масштабування на основі кастомних метрик з KEDA
Введення KEDA
KEDA (Kubernetes Event-Driven Autoscaling) дозволяє масштабування на основі кастомних метрик та зовнішніх подій.
Використання Adidas
- Інтеграція HPA та VPA: KEDA дозволив Adidas поєднати Horizontal Pod Autoscaler (HPA) та VPA, що дозволяє масштабувати як кількість подів, так і виділення ресурсів.
- Кастомні метрики: Вони масштабували навантаження на основі кастомних метрик, таких як довжина черги та навантаження на базу даних, що забезпечило реактивність на реальні патерни попиту.
Результати
Гнучкість KEDA забезпечила оптимальне масштабування для складних навантажень, покращивши продуктивність і економічну ефективність.
7. Політики Kyverno для Pod Disruption Budgets (PDB)
Проблема
Недовикористовувані вузли часто залишалися активними через надмірно строгі Pod Disruption Budgets (PDB), що призводило до непотрібних витрат.
Рішення
- Виконання політик: Adidas використовував Kyverno для впровадження політик, які динамічно коригували PDB, дозволяючи завершувати роботу недовикористовуваних вузлів без впливу на доступність навантажень.
- Дренаж вузлів: Вузли акуратно виводились із системи і видалялися, коли використання знижувалося нижче заданого порогу.
Вплив на витрати
Цей підхід усунув витрати, пов'язані з неактивними ресурсами, гарантуючи, що кластери працюють ефективно.
Результати та основні висновки
Впровадивши ці стратегії, Adidas успішно знизив свої витрати на Kubernetes на 50%, зберігаючи високу продуктивність та надійність додатків. Основні результати включають:
- Економія витрат: Значне зниження витрат на обчислювальні ресурси завдяки оптимізації інстансів, використанню Spot інстансів та масштабуванню в неробочі години.
- Операційна ефективність: Автоматизоване масштабування та оптимізація ресурсів зменшили ручні витрати.
- Масштабованість: Покращена здатність справлятися з різноманітними навантаженнями завдяки динамічним рішенням для масштабування.
Висновок
Подорож Adidas до оптимізації витрат на Kubernetes демонструє силу поєднання інструментів з відкритим кодом, можливостей AWS та інтелектуальних політик. Завдяки стратегічному використанню таких інструментів, як Karpenter, kube-downscaler, KEDA та Kyverno, Adidas досягнув ідеального балансу між економічною ефективністю, масштабованістю та продуктивністю. Бізнеси, які прагнуть оптимізувати витрати на Kubernetes, можуть вчитися на прикладі Adidas, застосовуючи подібні стратегії, адаптовані до їхніх унікальних навантажень і середовищ.
Перекладено з: Kubernetes Cost Optimization: The Adidas Approach to Cutting Kubernetes Costs in Halfs