通過在容器集群上部署安裝ccse-vertical-pod-autoscaler組件,云容器引擎可以提供垂直的容器伸縮的功能。VPA會基于Pod的資源使用情況自動調整集群中容器的資源請求和限制,從而可以讓Pod調度到有充足資源的最佳節點上。
前提條件
請確保您已完成以下操作:
已創建一個Kubernetes集群,且Kubernetes版本高于1.23。
已使用命令行工具連接集群。
已卸載集群中已經部署的VPA,以避免新安裝的VPA與舊版VPA沖突而導致VPA不可用。
背景信息
注意
容器垂直伸縮功能目前處于試驗階段,請謹慎使用。
更新正在運行的Pod資源配置是VPA的一項試驗性功能,會導致Pod的重建和重啟,而且有可能被調度到其他的節點上。
VPA不會驅逐沒有在副本控制器管理下的Pod。目前對于這類Pod,Auto模式等同于Initial模式。
目前VPA不能和監控CPU和內存度量的Horizontal Pod Autoscaler (HPA)同時運行,除非HPA只監控其他定制化的或者外部的資源度量。
VPA使用admission webhook作為其準入控制器。如果集群中有其他的admission webhook,需要確保它們不會與VPA發生沖突。準入控制器的執行順序定義在API Server的配置參數中。
VPA會處理出現的絕大多數OOM(Out Of Memory)的事件,但不保證所有的場景下都有效。
VPA的性能還沒有在大型集群中測試過。
VPA對Pod資源requests的修改值可能超過實際的資源上限,例如節點資源上限、空閑資源或資源配額,從而造成Pod處于Pending狀態無法被調度。同時使用集群自動伸縮(ClusterAutoscaler)可以一定程度上解決這個問題。
多個VPA同時匹配同一個Pod會造成未定義的行為。
操作步驟
1、在插件市場選擇cube-vertical-pod-autoscaler并安裝,安裝插件步驟請參考安裝插件。
各參數含義如下,您也可以根據實際使用情況修改自定義參數:
storage: prometheus //使用的存儲,可根據歷史記錄(默認為8天)計算推薦值。前提是安裝了ccse-monitor插件
prometheusAddress: //prometheus.kube-system.svc.cluster.local:9090 //prometheus在集群中service的域名及端口
minReplicas: 2 //允許驅逐pod的最小副本數,避免單副本pod被驅逐導致的服務不可用2、Yaml創建VPA自定義資源對象,并綁定負載。

配置文件示例:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: hamster-vpa
spec:
targetRef: //目標控制器
apiVersion:"apps/v1"
kind: Deployment
name: hamster //按需選擇對應的deployment
updatePolicy: //更新策略
updateMode:"Off"
resourcePolicy: //設置計算推薦值的約束,可約束資源的上下限,非必填
containerPolicies:
-containerName: '*' //設置約束的容器
minAllowed: //設置約束的允許最小值
cpu: 100m
memory: 50Mi
maxAllowed: 設置約束的允許最大值
cpu:1
memory: 500Mi
controlledResources:["cpu","memory"] //設置約束的資源其中updateMode參數有以下四種模式可供選擇:
"Auto":VPA 在創建Pod和存量Pod設置資源請求。目前這是 等效于Recreate(見下文)。一旦pod請求的就地更新是可用的,它將會被自動使用。注意:VPA 的此功能是實驗性的,可能會導致應用程序停機。
"Recreate":當所請求的資源與新建議顯著不同時(如果定義了pod中斷預算,則尊重),VPA會在創建pod時分配建議的資源請求,也會通過驅逐存量pod更新建議的資源請求。這種模式應該很少使用,當您需要確保在資源請求發生變化時重建pod時才使用。否則,最好選擇“自動”模式,一旦就地更新可用,就可以利用就地更新重新啟動。注意:VPA的這個特性是實驗性的,可能會導致應用程序停機。
"Initial":VPA 僅在新建 Pod 時修改分配資源請求,對于存量Pod 不驅逐更改它們。
"Off":VPA 不會自動更改 Pod 的資源要求。 會計算出建議值,并且可在 VPA 對象中查看。
3、執行以下命令可以查詢VPA為Deployment推薦的CPU和內存資源的requests值。
kubectl describe vpa hamster-vpa