Развертывание 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.
Если необходимо, удалите кластер.
- Перед началом работы
- Шаг 1. Создайте Deployment
- Шаг 2. Создайте Vertical Pod Autoscaler
- Шаг 3. Удалите ресурсы