Ця сторінка показує, як вручну масштабувати Deployment горизонтально, змінюючи кількість його реплік. Ручне масштабування дозволяє безпосередньо контролювати кількість працюючих Podʼів для передбачуваних змін навантаження або управління витратами.
Це відрізняється від вертикального масштабування: залишаючи кількість реплік незмінною, але змінюючи кількість ресурсів, доступних для кожного Pod.
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Вам потрібен наявний Deployment. Якщо у вас його немає, і ви просто хочете попрактикуватися, ви можете створити Deployment nginx з Запуск застосунку без збереження стану за допомогою Deployment:
kubectl apply -f https://k8s.io/examples/application/deployment.yaml
Перевірте, що Deployment запускає два Podʼи:
kubectl get deployment nginx-deployment
Вивід схожий на:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 2/2 2 2 10s
Існує кілька способів змінити кількість реплік для існуючого Deployment.
kubectl scaleВикористовуйте kubectl scale, щоб встановити кількість реплік:
kubectl scale deployment/nginx-deployment --replicas=4
Вивід схожий на:
deployment.apps/nginx-deployment scaled
Перевірте, що Deployment має чотири Podʼи:
kubectl get deployment nginx-deployment
Вивід схожий на:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 4/4 4 4 1m
kubectl applyЗамість виконання імперативної команди, ви можете оновити файл маніфесту та застосувати його. Цей підхід добре підходить для робочих процесів з версіонованою конфігурацією.
Збережіть поточну конфігурацію Deployment у локальний файл:
kubectl get deployment nginx-deployment -o yaml > /tmp/nginx-deployment.yaml
Відредагуйте /tmp/nginx-deployment.yaml і змініть .spec.replicas на 4.
Перед застосуванням порівняйте ваші локальні зміни зі станом кластера:
kubectl diff -f /tmp/nginx-deployment.yaml
Застосуйте відредагований маніфест:
kubectl apply -f /tmp/nginx-deployment.yaml
Щоб зменшити кількість Podʼів, встановіть --replicas на менше значення:
kubectl scale deployment/nginx-deployment --replicas=2
Kubernetes належним чином завершує зайві Podʼи, дотримуючись налаштувань terminationGracePeriodSeconds для кожного Pod.
Перевірте, що Deployment має два Podʼи:
kubectl get pods -l app=nginx
Вивід схожий на:
NAME READY STATUS RESTARTS AGE
nginx-deployment-66b6c48dd5-7gl6h 1/1 Running 0 2m
nginx-deployment-66b6c48dd5-v8mkd 1/1 Running 0 2m
Ви можете масштабувати Deployment до нуля, щоб тимчасово призупинити навантаження, не видаляючи сам Deployment:
kubectl scale deployment/nginx-deployment --replicas=0
Перевірте, що жоден Pod не працює:
kubectl get deployment nginx-deployment
Вивід схожий на:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 0/0 0 0 5m
--replicas на позитивне число.Звичайні випадки використання масштабування до нуля включають:
Окрім kubectl scale, ви можете змінити .spec.replicas за допомогою kubectl edit або kubectl patch.
kubectl editkubectl edit deployment nginx-deployment
Змініть поле .spec.replicas в редакторі, потім збережіть і вийдіть.
kubectl patchВи можете оновити .spec.replicas за допомогою стратегічного злиття патчу:
kubectl patch deployment nginx-deployment -p '{"spec":{"replicas":4}}'
Для створення скриптів використовуйте патч JSON із тестом на наявність необхідних умов. Наведена нижче команда встановлює кількість реплік на 4, але лише в тому випадку, якщо поточна кількість становить 2:
kubectl patch deployment nginx-deployment --type=json -p='[
{"op": "test", "path": "/spec/replicas", "value": 2},
{"op": "replace", "path": "/spec/replicas", "value": 4}
]'
Операція test призводить до відмови патчу, якщо поточне значення не збігається, що запобігає небажаним змінам, коли кілька людей або скриптів змінюють один і той же Deployment.
| Аспект | Ручне масштабування | Автоматичне масштабування (HPA) |
|---|---|---|
| Найкраще для | Передбачуваних, запланованих або одноразових змін навантаження | Змінного або непередбачуваного попиту |
| Як це працює | Ви встановлюєте .spec.replicas безпосередньо | HPA регулює кількість реплік на основі спостережуваних метрик |
| Час реакції | Негайно після виконання команди | Реагує на метрики з невеликою затримкою |
| Усвідомлення метрик | Відсутнє — ви вирішуєте кількість реплік | Моніторинг CPU, памʼяті або користувацьких метрик |
| Обслуговування | Потребує ручного втручання для налаштування | Працює автономно після конфігурації |
Видаліть Deployment:
kubectl delete deployment nginx-deployment