Развертывание Deployment с вертикальным масштабированием подов
В сценарии развернем Deployment с тремя подами, каждый из которых запускает контейнер с nginx. В Deployment укажем:
запросы на лимиты — 500m CPU и 1 ГиБ памяти;
запросы на ресурсы — 150m CPU и 100 МиБ памяти.
Далее создадим объект VerticalPodAutoscaler с режимом Auto.
Перед началом работы
Шаг 1. Создайте Deployment
Создайте файл cloudru-nginx.yaml и скопируйте следующую спецификацию:
apiVersion: apps/v1kind: Deploymentmetadata:name: cloudru-nginxspec:replicas: 3selector:matchLabels:app: cloudru-nginxtemplate:metadata:labels:app: cloudru-nginxspec:containers:- name: cloudru-nginximage: mk8s.registry.smk.sbercloud.dev/nginx:latestresources:limits:cpu: 500mmemory: 1Girequests:cpu: 150mmemory: 100Micommand: ["/bin/sh"]args: ["-c", "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"]Выполните команду:
kubectl create -f cloudru-nginx.yamlЕсли команда выполнена успешно, появится сообщение:
deployment.apps/cloudru-nginx createdПодождите несколько минут, а затем посмотрите информацию о запущенных подах:
kubectl get pods -l app=cloudru-nginxРезультат должен выглядеть примерно так:
NAME READY STATUS RESTARTS AGEcloudru-nginx-435634s132-jwr37 1/1 Running 0 6m21scloudru-nginx-435634s132-frn21 1/1 Running 0 5m09scloudru-nginx-435634s132-qsj79 1/1 Running 0 3m44sПолучите подробную информацию об одном из подов:
kubectl describe pod <pod_name>Вместо <pod_name> укажите название любого пода из результата предыдущей команды.
Результат должен выглядеть примерно так:
...cloudru-nginx:Container ID: containerd://...Image: mk8s.registry.smk.sbercloud.dev/nginx:latestImage ID: sha256:Port: <none>Host Port: <none>Command:/bin/shArgs:-cwhile true; do timeout 0.5s yes >/dev/null; sleep 0.5s; doneState: RunningStarted: Wed, 14 Aug 2024 10:19:12 -0400Ready: TrueRestart Count: 0Limits:cpu: 500mmemory: 1GiRequests:cpu: 150mmemory: 100MiEnvironment: <none>...Установлены лимиты: CPU — 500m и RAM — 1 ГиБ и запросы на ресурсы: CPU — 150m и RAM — 100 МиБ.
Шаг 2. Создайте Vertical Pod Autoscaler
Создайте файл cloudru-vpa.yaml и сохраните следующую спецификацию:
apiVersion: autoscaling.k8s.io/v1kind: VerticalPodAutoscalermetadata:name: cloudru-vpaspec:targetRef:apiVersion: "apps/v1"kind: Deploymentname: cloudru-nginxupdatePolicy:updateMode: "Auto"Где:
spec.targetRef.name — название Deployment, для которого будет выполняться вертикальное автомасштабирование.
spec.updatePolicy.updateMode — режим обновления запросов на ресурсы.
Выполните команду:
kubectl create -f cloudru-vpa.yamlВ результате будет создан объект Vertical Pod Autoscaler для Deployment cloudru-nginx.
Подождите несколько минут, пока cloudru-vpa пересоздаст поды.
Вы можете отслеживать создание новых подов. Для этого в терминале, отличном от терминала, на котором вы выполняли предыдущий шаг, выполните команду:
kubectl get --watch Pods -l app=cloudru-nginxВыполните команду:
kubectl describe pod <pod_name>Где <pod_name> — название нового пода.
Результат должен выглядеть примерно так:
...State: RunningStarted: Wed, 14 Aug 2024 10:21:22 -0400Ready: TrueRestart Count: 0Limits:cpu: 1166mmemory: 2560MiRequests:cpu: 350mmemory: 262144kEnvironment: <none>...Мы видим, что VPA изменил:
лимиты: CPU — 1166m и RAM — 2560 МиБ;
запросы на ресурсы: CPU — 350m и RAM — 262144 КиБ.
Шаг 3. Удалите ресурсы
Если вы закончили работать с VPA, удалите созданные ресурсы.
Удалите cloudru-vpa:
kubectl delete vpa cloudru-vpaПри удалении VPA Deployment остается c существующими запросами.
Удалите Deployment:
kubectl delete deployment cloudru-nginxРезультат:
deployment.apps "cloudru-nginx" deletedПоды удалятся вместе с Deployment.
Если необходимо, удалите кластер.