Как посмотреть рекомендации 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.