Введение
HorizontalPodAutoscaler (автоматический масштабировщик горизонтальных подов) — это функция Kubernetes, которая позволяет автоматически масштабировать количество подов в развертывании на основе использования ресурсов. В этом лабораторном занятии мы научимся использовать HorizontalPodAutoscaler для автоматического масштабирования нашего развертывания.
Запустите кластер Minikube
Перед созданием ресурсов вам нужен работающий кластер Kubernetes. Minikube — это легковесная среда Kubernetes, которая запускается на вашем локальном компьютере.
Перейдите в рабочую директорию:
Откройте терминал и перейдите в папку проекта по умолчанию:
cd /home/labex/projectЗапустите Minikube:
Запустите Minikube для инициализации кластера Kubernetes:
minikube start- Эта команда настраивает однодневный кластер Kubernetes на вашем локальном компьютере.
- В зависимости от производительности вашей системы запуск Minikube может занять несколько минут.
Проверьте, что Minikube запущен:
Проверьте статус кластера Minikube:
minikube status- Проверьте, чтобы компоненты, такие как
kubeletиapiserver, были перечислены какRunning(работающие). - Если кластер не запущен, запустите команду
minikube startснова.
- Проверьте, чтобы компоненты, такие как
Если у вас возникли проблемы при запуске Minikube, используйте команду minikube delete для сброса среды при необходимости.
Создание развертывания
Сначала нам нужно создать развертывание, к которому мы применим HorizontalPodAutoscaler (автоматический масштабировщик горизонтальных подов).
- Создайте файл развертывания с именем
deployment.yamlсо следующим содержимым:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hpa-demo
spec:
replicas: 1
selector:
matchLabels:
app: hpa-demo
template:
metadata:
labels:
app: hpa-demo
spec:
containers:
- name: hpa-demo
image: nginx
resources:
limits:
cpu: "1"
memory: 512Mi
requests:
cpu: "0.5"
memory: 256Mi
---
apiVersion: v1
kind: Service
metadata:
name: hpa-demo
spec:
selector:
app: hpa-demo
ports:
- name: http
port: 80
targetPort: 80
В этом развертывании указан один репликат контейнера Nginx с ограничениями и запросами на использование ресурсов CPU и памяти.
- Создайте развертывание:
kubectl apply -f deployment.yaml
Создание HorizontalPodAutoscaler
Теперь, когда у нас есть развертывание, мы можем создать HorizontalPodAutoscaler для автоматического масштабирования этого развертывания.
- Создайте файл HorizontalPodAutoscaler с именем
hpa.yamlсо следующим содержимым:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-demo
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: hpa-demo
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 1
type: Utilization
В этом HorizontalPodAutoscaler указано, что мы хотим масштабировать развертывание hpa - demo так, чтобы количество реплик было от 1 до 10, и чтобы среднее использование CPU составляло 50%.
- Создайте HorizontalPodAutoscaler:
kubectl apply -f hpa.yaml
Тестирование HorizontalPodAutoscaler
Теперь, когда у нас есть HorizontalPodAutoscaler, мы можем протестировать его, создав нагрузку на развертывание.
- Включите metrics-server (сервер метрик)
minikube addons enable metrics-server
- Создайте под для генерации нагрузки:
kubectl run -i --tty load-generator --image=busybox /bin/sh
- В поде для генерации нагрузки выполните следующую команду, чтобы создать нагрузку на развертывание:
while true; do wget -q -O- http://hpa-demo; done
- Откройте другой терминал и проверьте статус HorizontalPodAutoscaler:
kubectl get hpa
Вы увидите, что количество копий hpa-demo было увеличено до 10. Вы можете проверить количество реплик с помощью следующей команды.
kubectl get pods -l app=hpa-demo
- Остановите генерацию нагрузки, нажав
ctrl+cв поде для генерации нагрузки.
Резюме
В этом практическом занятии мы научились использовать HorizontalPodAutoscaler (автоматический масштабировщик горизонтальных подов) для автоматического масштабирования развертывания на основе использования ресурсов. Мы создали развертывание, создали HorizontalPodAutoscaler и протестировали его, создав нагрузку на развертывание. Мы также увидели, как HorizontalPodAutoscaler масштабировал развертывание в ответ на увеличение нагрузки.


