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