- tocdepth
2
Развертывание Deployment с вертикальным масштабированием подов
В сценарии развернем Deployment с тремя подами, каждый из которых запускает контейнер с nginx. В Deployment укажем:
запросы на лимиты — 500m CPU и 1 ГиБ памяти;
запросы на ресурсы — 150m CPU и 100 МиБ памяти.
Далее создадим объект VerticalPodAutoscaler с режимом Auto
.
Перед началом работы
Создайте кластер с публичным IP и хотя бы одной группой узлов.
Шаг 1. Создайте Deployment
Создайте файл
cloudru-nginx.yaml
и скопируйте следующую спецификацию:apiVersion: apps/v1 kind: Deployment metadata: name: cloudru-nginx spec: replicas: 3 selector: matchLabels: app: cloudru-nginx template: metadata: labels: app: cloudru-nginx spec: containers: - name: cloudru-nginx image: mk8s.registry.smk.sbercloud.dev/nginx:latest resources: limits: cpu: 500m memory: 1Gi requests: cpu: 150m memory: 100Mi command: ["/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 AGE cloudru-nginx-435634s132-jwr37 1/1 Running 0 6m21s cloudru-nginx-435634s132-frn21 1/1 Running 0 5m09s cloudru-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:latest Image ID: sha256: Port: <none> Host Port: <none> Command: /bin/sh Args: -c while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done State: Running Started: Wed, 14 Aug 2024 10:19:12 -0400 Ready: True Restart Count: 0 Limits: cpu: 500m memory: 1Gi Requests: cpu: 150m memory: 100Mi Environment: <none> ...
Установлены лимиты: CPU — 500m и RAM — 1 ГиБ и запросы на ресурсы: CPU — 150m и RAM — 100 МиБ.
Шаг 2. Создайте Vertical Pod Autoscaler
Создайте файл
cloudru-vpa.yaml
и сохраните следующую спецификацию:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: cloudru-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: cloudru-nginx updatePolicy: 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: Running Started: Wed, 14 Aug 2024 10:21:22 -0400 Ready: True Restart Count: 0 Limits: cpu: 1166m memory: 2560Mi Requests: cpu: 350m memory: 262144k Environment: <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.
Если необходимо, удалите кластер.
См.также
для Dev & Test