This page shows how to install the Vertical Pod Autoscaler (VPA) using the Helm chart published by the Kubernetes Autoscaler project.
The VPA chart installs the three VPA components:
The chart version shown in the examples on this page can change over time as the Kubernetes Autoscaler project publishes new releases.
After you install the chart, you can create VerticalPodAutoscaler resources for workloads that you
want VPA to manage.
You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. It is recommended to run this tutorial on a cluster with at least two nodes that are not acting as control plane hosts. If you do not already have a cluster, you can create one by using minikube or you can use one of these Kubernetes playgrounds:
Your Kubernetes server must be at or later than version 1.28.To check the version, enter kubectl version.
Before you begin:
metrics.k8s.io API to make recommendations.Add the Helm repository that publishes the VPA chart:
helm repo add autoscalers https://kubernetes.github.io/autoscaler
helm repo update
Install the VPA chart in the kube-system namespace:
helm upgrade --install vpa autoscalers/vertical-pod-autoscaler \
--namespace kube-system \
--create-namespace
By default, the chart configures Helm to manage the VPA admission webhook and to generate the required TLS certificates for that webhook.
If you want to review the chart values before installing, run:
helm show values autoscalers/vertical-pod-autoscaler
Check that the Helm release is deployed:
helm list --namespace kube-system
The output is similar to:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
vpa kube-system 1 2026-04-07 12:00:00.000000 +0000 UTC deployed vertical-pod-autoscaler-0.8.1 1.6.0
Check that the VPA Pods are running:
kubectl get pods -n kube-system
The output is similar to:
NAME READY STATUS RESTARTS AGE
vpa-vertical-pod-autoscaler-admission-controller-xxxxx 1/1 Running 0 1m
vpa-vertical-pod-autoscaler-recommender-xxxxx 1/1 Running 0 1m
vpa-vertical-pod-autoscaler-updater-xxxxx 1/1 Running 0 1m
If your release name is different from vpa, adjust the Pod names accordingly.
Confirm that the VerticalPodAutoscaler custom resource definition exists:
kubectl get customresourcedefinitions verticalpodautoscalers.autoscaling.k8s.io
After you install VPA, create a VerticalPodAutoscaler resource that targets a workload.
The following manifest configures VPA for a Deployment named my-app. The example uses the explicit Recreate update mode because the Auto mode is deprecated:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: my-app-vpa
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
updatePolicy:
updateMode: Recreate
Apply the manifest:
kubectl apply -f my-app-vpa.yaml
To inspect the recommendation that VPA produces, run:
kubectl describe vpa my-app-vpa
To customize the chart, provide your own values file when you install or upgrade the release:
helm upgrade --install vpa autoscalers/vertical-pod-autoscaler \
--namespace kube-system \
--create-namespace \
--values vpa-values.yaml
For example, you can use chart values to:
For the full set of chart values, see the VPA Helm chart README.
To remove the Helm release:
helm uninstall vpa --namespace kube-system
If you no longer need the VPA custom resource definitions, you can remove them separately:
kubectl delete customresourcedefinition verticalpodautoscalers.autoscaling.k8s.io