Как посмотреть рекомендации Vertical Pod Autoscaler?
После создания custom resource VerticalPodAutoscaler посмотреть рекомендации VPA можно следующим образом:
kubectl describe vpa my-app-vpa
В секции status
будут такие параметры:
Target
— количество ресурсов, которое будет оптимальным для пода (в пределах resourcePolicy);Lower Bound
— минимальное рекомендуемое количество ресурсов для более или менее (но не гарантированно) хорошей работы приложения;Upper Bound
— максимальное рекомендуемое количество ресурсов. Скорее всего, ресурсы, выделенные сверх этого значения, идут в мусорку и совсем никогда не нужны приложению;Uncapped Target
— рекомендуемое количество ресурсов в самый последний момент, то есть данное значение считается на основе самых крайних метрик, не смотря на историю ресурсов за весь период.
Как Vertical Pod Autoscaler работает с лимитами?
Пример 1
У нас есть VPA-объект:
---
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: test2
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: test2
updatePolicy:
updateMode: "Initial"
И есть под с такими ресурсами:
resources:
limits:
cpu: 2
requests:
cpu: 1
В данном случае, если контейнер будет потреблять, к примеру, 1 CPU целиком и VPA порекомендует данному контейнеру 1,168 CPU, вычисляется ratio между реквестами и лимитами. В данном случае он будет равен 100%. В этом случае при пересоздании пода VPA модифицирует его и проставит такие ресурсы:
resources:
limits:
cpu: 2336m
requests:
cpu: 1168m
Пример 2
У нас есть VPA-объект:
---
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: test2
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: test2
updatePolicy:
updateMode: "Initial"
И есть под с такими ресурсами:
resources:
limits:
cpu: 1
requests:
cpu: 750m
В данном случае соотношение реквестов и лимитов будет равным 25%, и если VPA порекомендует для контейнера 1,168 CPU, то VPA изменит ресурсы контейнера таким образом:
resources:
limits:
cpu: 1557m
requests:
cpu: 1168m
Если вам необходимо ограничить максимальное количество ресурсов, которое может быть заданно для лимитов контейнера, необходимо использовать в спецификации VPA-объекта maxAllowed
или использовать Limit Range объект Kubernetes.