Развертывание Deployment с горизонтальным масштабированием подов

В сценарии развернем Deployment с Apache и PHP, а затем зададим условия изменения количества подов в зависимости от нагрузки на виртуальный процессор:

  • Пороговая нагрузка на виртуальный процессор — 60% от запрошенного на запуск контейнера.

  • Минимальное количество реплик — 2.

  • Максимальное количество реплик — 7.

Перед началом работы

  1. Создайте кластер Managed Kubernetes и хотя бы одну группу узлов.

  2. Установите плагин Metrics Server.

  3. Подключитесь к кластеру Managed Kubernetes.

Шаг 1. Создайте Deployment

Сохраните следующую спецификацию в файл cloudru-php-apache.yaml:

apiVersion : apps/v1
kind : Deployment
metadata :
name : cloudru-php-apache
namespace : default
spec :
replicas : 3
selector :
matchLabels :
run : cloudru-php-apache
template :
metadata :
labels :
run : cloudru-php-apache
spec :
containers :
- name : hpa-example
image : mk8s.registry.smk.sbercloud.dev/hpa-example
ports :
- containerPort : 80
resources :
requests :
cpu : "250m"
---
apiVersion : v1
kind : Service
metadata :
name : cloudru-php-apache
labels :
run : cloudru-php-apache
spec :
ports :
- port : 80
selector :
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

Сохраните следующую спецификацию в файл cloudru-hpa.yaml:

apiVersion : autoscaling/v1
kind : HorizontalPodAutoscaler
metadata :
name : cloudru-hpa
spec :
scaleTargetRef :
apiVersion : apps/v1
kind : Deployment
name : cloudru-php-apache
minReplicas : 2
maxReplicas : 7
targetCPUUtilizationPercentage : 60

Затем выполните команду:

kubectl create -f cloudru-hpa.yaml
Способ 2

Выполните команду:

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/v2
kind : HorizontalPodAutoscaler
metadata :
name : cloudru-php-apache
spec :
scaleTargetRef :
apiVersion : apps/v1
kind : Deployment
name : cloudru-php-apache
minReplicas : 2
maxReplicas : 7
metrics :
- type : Resource
resource :
name : cpu
target :
type : Utilization
averageUtilization : 60
- type : Resource
resource :
name : memory
target :
type : AverageValue
averageValue : 500Mi

При увеличении нагрузки на виртуальный процессор выше 60% от запрошенной нагрузки на каждый контейнер и занятой оперативной памяти более 500 МиБ, количество подов будет увеличиваться, пока не достигнет семи подов.

При уменьшении нагрузки на виртуальный процессор ниже 60% от запрошенной нагрузки на каждый контейнер и занятой оперативной памяти менее 500 МиБ, количество подов будет уменьшаться, пока не достигнет двух подов.

Шаг 3. Получите список HPA в кластере

Выполните команду:

kubectl get hpa

Ответ будет содержать следующее:

NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
cloudru-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 AGE
cloudru-php-apache Deployment/cloudru-php-apache 200 %/60% 2 7 3 5m34s

Так как потребление процессора возросло до 200% от запрошенного, количество реплик было увеличено до 5:

NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
cloudru-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 AGE
cloudru-php-apache Deployment/cloudru-php-apache 0 %/60% 2 7 1 10m

Шаг 6. Удалите ресурсы

Если вы закончили работать с HPA, удалите созданные ресурсы.

  1. Удалите cloudru-hpa:

    kubectl delete cloudru-hpa cloudru-php-apache

    При удалении HPA Deployment остается в существующем масштабе и не возвращается к количеству реплик, указанному в исходной спецификации Deployment.

    Если необходимо, измените количество реплик, например, до трех:

    kubectl scale deployment cloudru-php-apache --replicas = 3
  2. Удалите Deployment:

    kubectl delete deployment cloudru-php-apache

    Результат:

    deployment.apps "cloudru-php-apache" deleted

    Поды удалятся вместе с Deployment.

  3. Если необходимо, удалите кластер.

Evolution