- tocdepth
2
Развертывание Deployment с горизонтальным масштабированием подов
В сценарии развернем Deployment с Apache и PHP, а затем зададим условия изменения количества подов в зависимости от нагрузки на виртуальный процессор:
Пороговая нагрузка на виртуальный процессор — 60% от запрошенного на запуск контейнера.
Минимальное количество реплик — 2.
Максимальное количество реплик — 7.
Перед началом работы
Шаг 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, удалите созданные ресурсы.
Удалите 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.
Если необходимо, удалите кластер.
См.также
для Dev & Test