С помощью этого руководства вы научитесь настраивать и использовать Vertical Pod Autoscaler (VPA) в Managed Kubernetes для автоматического масштабирования ресурсов подов. В процессе вы создадите кластер Managed Kubernetes, развернете Deployment с тремя подами, в каждом из которых будет работать контейнер с nginx, и зададите ограничения и запросы на ресурсы:
запросы на лимиты — 500m CPU и 1 ГиБ памяти;
запросы на ресурсы — 150m CPU и 100 МиБ памяти.
Вы будете использовать следующие сервисы:
Managed Kubernetes — сервис управления кластерами Kubernetes на вычислительных ресурсах облака.
Metrics Server — плагин Managed Kubernetes, который собирает и агрегирует показатели ресурсов узлов и подов (CPU и RAM) от kubelet и предоставляет их в Kubernetes API Server через Metrics API.
Шаги:
Создайте кластер Managed Kubernetes и хотя бы одну группу узлов.
Создайте файл 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: emk8s.cr.cloud.ru/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: emk8s.cr.cloud.ru/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 МиБ.
Создайте файл 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 КиБ.
Если вы закончили работать с VPA, удалите созданные ресурсы.
Удалите cloudru-vpa:
kubectl delete vpa cloudru-vpa
При удалении VPA Deployment остается c существующими запросами.
Удалите Deployment:
kubectl delete deployment cloudru-nginx
Результат:
deployment.apps "cloudru-nginx" deleted
Поды удалятся вместе с Deployment.
Если необходимо, удалите кластер.
Вы научились настраивать и использовать Vertical Pod Autoscaler в Managed Kubernetes для автоматического масштабирования ресурсов подов.