Развертывание 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. Удалите ресурсы