Перевищення ємності вузла для кластера
Ця сторінка допоможе вам налаштувати перевищення ємності вузла у вашому кластері Kubernetes. Перевищення ємності вузла — це стратегія, яка проактивно резервує частину обчислювальних ресурсів вашого кластера. Це резервування допомагає зменшити час, необхідний для планування нових podʼів під час подій масштабування, підвищуючи чутливість вашого кластера до раптових сплесків трафіку або навантаження.
Підтримуючи деяку невикористану ємність, ви забезпечуєте негайну доступність ресурсів при створенні нових podʼів, запобігаючи їх переходу в стан очікування під час масштабування кластера.
Перш ніж ви розпочнете
- Вам потрібен кластер Kubernetes, і інструмент командного рядка kubectl має бути налаштований для звʼязку з вашим кластером.
- Ви повинні мати базове розуміння про Deployments, пріоритет podʼів, та PriorityClasses.
- У вашому кластері має бути налаштований з автомасштабувальник, який керує вузлами на основі попиту.
Створіть PriorityClass
Почніть з визначення PriorityClass для podʼів-заповнювачів. Спочатку створіть PriorityClass з негативним значенням пріоритету, який ви незабаром призначите podʼам-заповнювачам. Пізніше ви налаштуєте Deployment, яке використовує цей PriorityClass.
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: placeholder # ці Podʼи передставляють ємність заповнювача
value: -1000
globalDefault: false
description: "Відʼємний пріоритет для pod-заповнювачів, щоб увімкнути надлишкове розміщення."
Потім створіть PriorityClass:
kubectl apply -f https://k8s.io/examples/priorityclass/low-priority-class.yaml
Далі ви визначите Deployment, який використовує PriorityClass з негативним пріоритетом і запускає мінімальний контейнер. Коли ви додасте його до свого кластера, Kubernetes запустить ці podʼи-заповнювачі для резервування ємності. У разі нестачі ємності, панель управління вибере один з цих podʼів-заповнювачів як першого кандидата для випередження.
Запустіть Podʼи, що запитують ємність вузла
Перегляньте зразок маніфесту:
apiVersion: apps/v1
kind: Deployment
metadata:
name: capacity-reservation
# Ви маєте вирішити, в якому просторі імен розгортати
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: capacity-placeholder
template:
metadata:
labels:
app.kubernetes.io/name: capacity-placeholder
annotations:
kubernetes.io/description: "Capacity reservation"
spec:
priorityClassName: placeholder
affinity: # Спробуйте розмістити ці додаткові Podʼи на різних вузлах
# якщо це можливо
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
app: placeholder
topologyKey: "kubernetes.io/hostname"
containers:
- name: pause
image: registry.k8s.io/pause:3.6
resources:
requests:
cpu: "50m"
memory: "512Mi"
limits:
memory: "512Mi"
Оберіть простір імен для podʼів-заповнювачів
Виберіть, або створіть, {{ < glossary_tooltip text="простір імен" term_id="namespace" >}}, в якому ви будете запускати podʼи-заповнювачі.
Створіть Deployment-заповнювач
Створіть Deployment на основі цього маніфесту:
# Змініть `example` на простір імен, який ви вибрали
kubectl --namespace example apply -f https://k8s.io/examples/deployments/deployment-with-capacity-reservation.yaml
Налаштуйте запити ресурсів для заповнювачів
Налаштуйте запити та обмеження ресурсів для podʼів-заповнювачів, щоб визначити кількість зарезервованих ресурсів, які ви хочете підтримувати. Це резервування забезпечує наявність певної кількості CPU та памʼяті для нових podʼів.
Щоб редагувати Deployment, змініть розділ resources
у файлі маніфесту Deployment, щоб встановити відповідні запити та обмеження. Ви можете завантажити цей файл локально та відредагувати його за допомогою будь-якого текстового редактора.
Ви можете редагувати маніфест Deployment використовуючи kubectl:
kubectl edit deployment capacity-reservation
Наприклад, щоб зарезервувати 0.5 CPU та 1GiB памʼяті для 5 podʼів-заповнювачів, визначте запити та обмеження ресурсів для одного podʼа-заповнювача наступним чином:
resources:
requests:
cpu: "100m"
memory: "200Mi"
limits:
cpu: "100m"
Встановіть бажану кількість реплік
Розрахуйте загальні зарезервовані ресурси
Наприклад, з 5 репліками, кожна з яких резервує 0.1 CPU та 200MiB памʼяті:
Загальна зарезервована емність CPU: 5 × 0.1 = 0.5 (у специфікації podʼа ви напишете кількість 500m
)
Загальна зарезервована памʼять: 5 × 200MiB = 1GiB (у специфікації podʼа ви напишете 1 Gi
)
Щоб масштабувати Deployment, налаштуйте кількість реплік відповідно до розміру вашого кластера та очікуваного навантаження:
kubectl scale deployment capacity-reservation --replicas=5
Перевірте масштабування:
kubectl get deployment capacity-reservation
Вихідні дані повинні відображати оновлену кількість реплік:
NAME READY UP-TO-DATE AVAILABLE AGE
capacity-reservation 5/5 5 5 2m
Примітка:
Деякі автомасштабувальники, зокрема Karpenter, розглядають правила переважної спорідненості як жорсткі правила при розгляді масштабування вузлів. Якщо ви використовуєте Karpenter або інший автомасштабувальник вузлів, який використовує той самий евристичний підхід, кількість реплік, яку ви встановлюєте тут, також встановлює мінімальну кількість вузлів для вашого кластера.Що далі
- Дізнайтеся більше про PriorityClasses та як вони впливають на планування podʼів.
- Дізнайтеся більше про автомасштабування вузлів, щоб динамічно налаштовувати розмір вашого кластера на основі навантаження.
- Зрозумійте Випередження podʼів, ключовий механізм Kubernetes для обробки конфліктів ресурсів. Та ж сторінка охоплює поняття виселення, що менш актуально для підходу з podʼами-заповнювачами, але також є механізмом для Kubernetes для реагування на конфлікти ресурсів.