Автомасштабування робочих навантажень
У Kubernetes ви можете масштабувати робоче навантаження залежно від поточного попиту на ресурси. Це дозволяє вашому кластеру більш еластично та ефективно реагувати на зміни витрат ресурсів.
При масштабуванні робочого навантаження ви можете збільшувати або зменшувати кількість реплік, які керуються робочим навантаженням, або налаштовувати ресурси, доступні для реплік на місці.
Перший підхід називається горизонтальним масштабуванням, тоді як другий — вертикальним масштабуванням.
Є ручні та автоматичні способи масштабування робочих навантажень, залежно від вашого випадку використання.
Ручне масштабування робочих навантажень
Kubernetes підтримує ручне масштабування робочих навантажень. Горизонтальне масштабування можна виконати за допомогою інтерфейсу командного рядка kubectl
. Для вертикального масштабування вам потрібно змінити визначення ресурсів вашого робочого навантаження.
Дивіться нижче приклади обох стратегій.
- Горизонтальне масштабування: Запуск кількох екземплярів вашого застосунку
- Вертикальне масштабування: Зміна обсягів ресурсів CPU та памʼяті, призначених для контейнерів
Автоматичне масштабування робочих навантажень
Kubernetes також підтримує автоматичне масштабування робочих навантажень, що є основною темою цієї сторінки.
Концепція Автомасштабування в Kubernetes стосується можливості автоматичного оновлення обʼєкта, який керує набором Podʼів (наприклад, Deployment).
Горизонтальне масштабування робочих навантажень
У Kubernetes ви можете автоматично масштабувати робоче навантаження горизонтально за допомогою HorizontalPodAutoscaler (HPA).
Він реалізований як ресурс Kubernetes API та controller і періодично налаштовує кількість реплік в робочому навантаженні, щоб відповідати спостереженню за використанням ресурсів, такими як використання CPU чи памʼяті.
Є посібник з інструкціями з налаштування HorizontalPodAutoscaler для Deployment.
Вертикальне масштабування робочих навантажень
Kubernetes v1.25 [stable]
Ви можете автоматично масштабувати робоче навантаження вертикально за допомогою VerticalPodAutoscaler (VPA). На відміну від HPA, VPA не поставляється стандартно в Kubernetes, але є окремим проєктом, який можна знайти на GitHub.
Після встановлення він дозволяє створювати CustomResourceDefinitions (CRDs) для ваших робочих навантажень, які визначають як і коли масштабувати ресурси керованих реплік.
Примітка:
Вам потрібно мати встановлений Metrics Server в вашому кластері для роботи HPA.На цей час VPA може працювати в чотирьох різних режимах:
Режим | Опис |
---|---|
Auto | Наразі Recreate , може змінитися на оновлення на місці у майбутньому |
Recreate | VPA встановлює ресурсні запити при створенні підпорядкованих контейнерів і оновлює їх на наявних контейнерах, витісняючи їх, коли запитані ресурси відрізняються від нової рекомендації |
Initial | VPA встановлює ресурсні запити лише при створенні підпорядкованих контейнерів і ніколи не змінює їх пізніше. |
Off | VPA автоматично не змінює вимоги до ресурсів підпорядкованих контейнерів. Рекомендації обчислюються і можуть бути перевірені в обʼєкті VPA. |
Вимоги для масштабування на місці
Kubernetes v1.27 [alpha]
Масштабування робочого навантаження на місці без перезапуску підпорядкованих контейнерів чи їх контейнерів вимагає версії Kubernetes 1.27 чи пізніше. Додатково потрібно ввімкнути властивість InPlaceVerticalScaling
.
InPlacePodVerticalScaling
: Дозволяє вертикальне масштабування Podʼів на місці.
Автомасштабування на основі розміру кластера
Для робочих навантажень, які потрібно масштабувати залежно від розміру кластера (наприклад, cluster-dns
чи інші системні компоненти), ви можете використовувати Cluster Proportional Autoscaler. Так само як і VPA, він не є частиною основного функціонала Kubernetes, але розміщений як окремий проєкт на GitHub.
Cluster Proportional Autoscaler відстежує кількість вузлів які готові приймати Podʼи та ядра та масштабує кількість реплік цільового робочого навантаження відповідно.
Якщо кількість реплік має залишитися незмінною, ви можете масштабувати свої робочі навантаження вертикально залежно від розміру кластера, використовуючи Cluster Proportional Vertical Autoscaler. Проєкт знаходиться наразі у бета-версії та доступний на GitHub.
В той час як Cluster Proportional Autoscaler масштабує кількість реплік робочого навантаження, Cluster Proportional Vertical Autoscaler налаштовує вимоги до ресурсів для робочого навантаження (наприклад, Deployment або DaemonSet) залежно від кількості вузлів та/або ядер у кластері.
Автомасштабування, на підставі подій
Також існує можливість масштабування робочих навантажень на основі подій, наприклад, використовуючи Kubernetes Event Driven Autoscaler (KEDA).
KEDA є проєктом створеним під егідою CNCF, що дозволяє масштабувати ваші робочі навантаження залежно від кількості подій для обробки, наприклад, кількість повідомлень в черзі. Існує широкий спектр адаптерів для різних джерел подій, які можна вибрати.
Автомасштабування на основі розкладу
Ще одна стратегія для масштабування вашого робочого навантаження — це запланувати операції масштабування, наприклад, для зменшення використання ресурсів під час годин неактивності.
Схоже на автомасштабування, спровоковане подіями, таку поведінку можна досягти за допомогою KEDA спільно з його Cron
scaler. Scaler Cron
дозволяє вам визначати розклади (і часові пояси) для масштабування ваших робочих навантажень вгору чи вниз.
Масштабування інфраструктури кластера
Якщо масштабування робочих навантажень не вистачає для задоволення ваших потреб, ви також можете масштабувати інфраструктуру вашого кластера.
Масштабування інфраструктури кластера, зазвичай, передбачає додавання або видалення вузлів. Дивіться автомасштабування кластера для отримання додаткової інформації.
Що далі
- Дізнайтеся більше про горизонтальне масштабування
- Зміна розміру ресурсів контейнера на місці
- Автомасштабування служби DNS в кластері
- Автомасштабування кластера