Как посмотреть рекомендации Vertical Pod Autoscaler?
После создания кастомного ресурса 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"
В VPA-объекте представлен под с ресурсами:
resources:
limits:
cpu: 2
requests:
cpu: 1
Если контейнер использует весь CPU, и VPA рекомендует этому контейнеру 1.168 CPU, то отношение между запросами и ограничениями будет равно 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"
В VPA-объекте представлен под с ресурсами:
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.