Развертывание Deployment с горизонтальным масштабированием подов
В сценарии развернем Deployment с Apache и PHP, а затем зададим условия изменения количества подов в зависимости от нагрузки на виртуальный процессор:
Пороговая нагрузка на виртуальный процессор — 60% от запрошенного на запуск контейнера.
Минимальное количество реплик — 2.
Максимальное количество реплик — 7.
Перед началом работы
Шаг 1. Создайте Deployment
Сохраните следующую спецификацию в файл cloudru-php-apache.yaml:
apiVersion : apps/v1kind : Deploymentmetadata :name : cloudru-php-apachenamespace : defaultspec :replicas : 3selector :matchLabels :run : cloudru-php-apachetemplate :metadata :labels :run : cloudru-php-apachespec :containers :- name : hpa-exampleimage : mk8s.registry.smk.sbercloud.dev/hpa-exampleports :- containerPort : 80resources :requests :cpu : "250m"---apiVersion : v1kind : Servicemetadata :name : cloudru-php-apachelabels :run : cloudru-php-apachespec :ports :- port : 80selector :run : cloudru-php-apache
Обязательно укажите параметр resources.requests.cpu — запрос CPU для запуска контейнера, чтобы выполнять автоматическое масштабирование на основе использования ресурса в процентах.
Выполните команду:
kubectl create -f cloudru-php-apache.yaml
Если команда выполнена успешно, появится сообщение:
deployment.apps/cloudru-php-apache created
Шаг 2. Создайте Horizontal Pod Autoscaler одним из способов
- Способ 1
- Способ 2
Сохраните следующую спецификацию в файл cloudru-hpa.yaml:
apiVersion : autoscaling/v1kind : HorizontalPodAutoscalermetadata :name : cloudru-hpaspec :scaleTargetRef :apiVersion : apps/v1kind : Deploymentname : cloudru-php-apacheminReplicas : 2maxReplicas : 7targetCPUUtilizationPercentage : 60
Затем выполните команду:
kubectl create -f cloudru-hpa.yaml
Выполните команду:
kubectl autoscale deployment cloudru-php-apache --cpu-percent = 60 --min = 2 --max = 7
В результате будет создан Horizontal Pod Autoscaler для Deployment cloudru-php-apache.
При нагрузке на виртуальный процессор:
выше 60% от запрошенной нагрузки на каждый контейнер — количество подов будет постепенно увеличиваться, пока не достигнет семи;
ниже 60% от запрошенной нагрузки на каждый контейнер — количество подов будет постепенно уменьшаться, пока не достигнет двух.
Для горизонтального масштабирования подов можно использовать не только метрики CPU, но и RAM. В этом случае для создания HPA используйте следующую спецификацию:
apiVersion : autoscaling/v2kind : HorizontalPodAutoscalermetadata :name : cloudru-php-apachespec :scaleTargetRef :apiVersion : apps/v1kind : Deploymentname : cloudru-php-apacheminReplicas : 2maxReplicas : 7metrics :- type : Resourceresource :name : cputarget :type : UtilizationaverageUtilization : 60- type : Resourceresource :name : memorytarget :type : AverageValueaverageValue : 500Mi
При увеличении нагрузки на виртуальный процессор выше 60% от запрошенной нагрузки на каждый контейнер и занятой оперативной памяти более 500 МиБ, количество подов будет увеличиваться, пока не достигнет семи подов.
При уменьшении нагрузки на виртуальный процессор ниже 60% от запрошенной нагрузки на каждый контейнер и занятой оперативной памяти менее 500 МиБ, количество подов будет уменьшаться, пока не достигнет двух подов.
Шаг 3. Получите список HPA в кластере
Выполните команду:
kubectl get hpa
Ответ будет содержать следующее:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGEcloudru-php-apache Deployment/cloudru-php-apache 0 %/60% 2 7 3 121s
Шаг 4. Создайте нагрузку для веб-сервера
Выполните команду:
kubectl run -i --tty load-generator --rm --image = busybox --restart = Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://cloudru-php-apache; done"
Чтобы наблюдать за масштабированием, периодически запускайте следующую команду в терминале, отличном от терминала, на котором вы выполняли предыдущий шаг:
kubectl get hpa cloudru-php-apache --watch
Ответ будет содержать следующее:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGEcloudru-php-apache Deployment/cloudru-php-apache 200 %/60% 2 7 3 5m34s
Так как потребление процессора возросло до 200% от запрошенного, количество реплик было увеличено до 5:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGEcloudru-php-apache Deployment/cloudru-php-apache 200 %/60% 2 7 5 7m
Увеличение количества подов может занять несколько минут.
Шаг 5. Остановите нагрузку для веб-сервера
Чтобы завершить генерацию нагрузки, в терминале, где вы создали под, запускающий образ busybox, нажмите Ctrl + C.
Затем через несколько минут выполните команду:
kubectl get hpa cloudru-php-apache --watch
Результат:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGEcloudru-php-apache Deployment/cloudru-php-apache 0 %/60% 2 7 1 10m
Шаг 6. Удалите ресурсы
Если вы закончили работать с HPA, удалите созданные ресурсы.
Удалите cloudru-hpa:
kubectl delete cloudru-hpa cloudru-php-apacheПри удалении HPA Deployment остается в существующем масштабе и не возвращается к количеству реплик, указанному в исходной спецификации Deployment.
Если необходимо, измените количество реплик, например, до трех:
kubectl scale deployment cloudru-php-apache --replicas = 3Удалите Deployment:
kubectl delete deployment cloudru-php-apacheРезультат:
deployment.apps "cloudru-php-apache" deletedПоды удалятся вместе с Deployment.
Если необходимо, удалите кластер.
- Перед началом работы
- Шаг 1. Создайте Deployment
- Шаг 2. Создайте Horizontal Pod Autoscaler одним из способов
- Шаг 3. Получите список HPA в кластере
- Шаг 4. Создайте нагрузку для веб-сервера
- Шаг 5. Остановите нагрузку для веб-сервера
- Шаг 6. Удалите ресурсы