
上文Kubernetes之Pod自动垂直伸缩VPA介绍和使用场景我们介绍了VPA的主要功能和使用的场景,本文主要来介绍如何部署VPA。参考官方安装部署文档:https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler
1. 部署对应版本的VPA需要的k8s版本如下:
| VPA version | Kubernetes version |
|---|---|
| 1.1.1 | 1.25+ |
| 1.0 | 1.25+ |
| 0.14 | 1.25+ |
| 0.13 | 1.25+ |
| 0.12 | 1.25+ |
| 0.11 | 1.22 - 1.24 |
| 0.10 | 1.22+ |
| 0.9 | 1.16+ |
| 0.8 | 1.13+ |
| 0.4 to 0.7 | 1.11+ |
| 0.3.X and lower | 1.7+ |
2. 假如需要部署的版本大于1.0.0,需要先执行下CRD和RBAC更新。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/vpa-release-1.0/vertical-pod-autoscaler/deploy/vpa-v1-crd-gen.yamlkubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/vpa-release-1.0/vertical-pod-autoscaler/deploy/vpa-rbac.yaml
3.需要安装了metrics server ,安装的服务器kubectl能够连接到k8s集群。
4.安装最新的master版本,具体分支可以参考运行的k8s版本。
git clone https://github.com/kubernetes/autoscaler.gitcd autoscaler/vertical-pod-autoscaler/# 然后执行./hack/vpa-up.sh# 镜像需要想个办法中转下
5. 创建一个典型的VPA yaml示例。
apiVersion: autoscaling.k8s.io/v1kind: VerticalPodAutoscalermetadata:name: my-app-vpaspec:targetRef:apiVersion: "apps/v1"kind: Deploymentname: my-appupdatePolicy:updateMode: "Auto"
以下是VPA的几种主要模式:
1. 自动(Auto):VPA 在 Pod 创建时分配资源请求,并且会根据需要更新现有Pod的资源请求。当前,该模式等同于“重建”,意味着可能会导致Pod重启以应用资源调整。未来,若支持无重启(即原地更新)的资源请求调整时,此模式将会优先采用这种更新方式。先阶段Auto也是玩了一个寂寞啊


2. 重建(Recreate):在 Pod 创建时分配资源请求,并且仅当发现现有的Pod资源请求与新推荐值有较大差异时,通过驱逐并重新创建Pod来更新资源请求。这一过程会尊重Pod中断预算(Pod Disruption Budget, PDB),以尽量减少服务中断。该模式适用于需要确保资源调整时Pod总是重启的场景,但一般情况下推荐使用“自动”模式,除非有特殊需求。
3. 初始(Initial):VPA 仅在 Pod 创建时分配资源请求,之后即使有新的资源推荐,也不会对已存在的Pod进行任何资源请求的调整。这种方式适用于希望首次设置后就固定Pod资源需求的场景。
4. 关闭(Off):VPA 不会自动更改Pod的资源需求。它仍会计算资源推荐值,但这些推荐值仅供查看,不会自动应用到Pod上。适用于需要手动管理资源调整或仅利用VPA进行资源需求分析的情况。还是查看这个手动来调整request和limit吧




