На цій сторінці показано, як вручну масштабувати 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 за допомогою strategic merge patch:
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