初試Pod垂直擴縮容VPA

2022-06-30 02:48:11 字數 2565 閱讀 3105

相對於水平自動擴縮容(hpa)在pod資源緊張時擴充pod個數來平衡負載。pod的垂直擴容會自動調整pod資源申請的requests值及limits值,它會依據pod當前執行狀況動態地為pod資源申請cpu及記憶體使用量。解放了手動設定request值及limits值的難點,使pod執行更加智慧型。目前為beta階段

垂直擴縮容專案位址位於:

與hpa一樣,vpa在執行時的指標同樣是由metrics server提供,所以安裝vpa控制器前首先先執行好metrics server

目前最新版本為0.9,考慮到部署0.9版本需要公升級openssl。本次實驗採用0.8版本的部署包。

$ wget
解壓後進入vertical-pod-autoscaler目錄

$ cd vertical-pod-autoscaler
批量修改映象位址為registry.cn-shanghai.aliyuncs.com/ltzhang

$ sed -i '[email protected]/@registry.cn-shanghai.aliyuncs.com/ltzhang/@g' `egrep -r "\" deploy/ | awk -f: ''`
安裝vpa控制器
$ ./hack/vpa-up.sh  

customresourcedefinition.apiextensions.k8s.io/verticalpodautoscalers.autoscaling.k8s.io created

customresourcedefinition.apiextensions.k8s.io/verticalpodautoscalercheckpoints.autoscaling.k8s.io created

clusterrole.rbac.authorization.k8s.io/system:metrics-reader created

clusterrole.rbac.authorization.k8s.io/system:vpa-actor created

...service/vpa-webhook created

安裝完成後會生成自定義api資源autoscaling.k8s.io並在其下生成兩個資源verticalpodautoscalercheckpointverticalpodautoscaler

建立測試應用

verticalpodautoscaler.autoscaling.k8s.io/hamster-vpa created

測試pod會申請100m的cpu及50m記憶體並且其中會執行shell命令不斷來消耗cpu及記憶體:

resources:

requests:

cpu: 100m

memory: 50mi

command: ["/bin/sh"]

args:

- "-c"

- "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"

在pod執行中,vpa控制器會發現應用所需要的cpu及記憶體不斷增加。根據當前的updatepolicy會不斷重建pod給予pod更多的cpu及記憶體申請值

pod中的資源申請已經上調為587m個cpu及256mib記憶體了,這都是vpa控制器自動幫我們完成的。在應用負載降低時,同樣會刪除pod並給予相對資源申請值。

配置檔案解析

回到測試pod配置檔案檢視有關vpa的定義

---

apiversion: "autoscaling.k8s.io/v1beta2"

kind: verticalpodautoscaler

metadata:

name: hamster-vpa

spec:

targetref:

kind: deployment

name: hamster

resourcepolicy:

containerpolicies:

- containername: '*'

minallowed:

cpu: 100m

memory: 50mi

maxallowed:

cpu: 1

memory: 500mi

controlledresources: ["cpu", "memory"]

已知問題

#known-limitations

垂懸指標問題

垂懸指標問題,這個問題的定義我是知道的。通常是說當指向某塊記憶體的指標被釋放之後,需要及時置空。否則,如果不置空,當下次不小心訪問到時,會導致錯誤。當然,這個問題說起來很簡單。覺得也沒什麼太大的問題,但是指標這一塊確實得非常小心,從下面我范的這個問題說起。下面這段 是我刷leetcode的時候的一段...

建立私有Pod

將公司私有pod庫新增到本地 本地有的不需要新增 新增成功後 cocoapods repos 中會存在ibupodspec 資料夾。裡面就是私有cocoapods管理的各模組版本資訊 podspec.git 建立pod libirary pod lib create podtestlibrary 官...

何為POD物件?

在c 中,我們把傳統的c風格的struct叫做pod plain old data 物件。一般來說,pod物件應該滿足如下特性。對於pod型別t的物件,不管這個物件是否擁有型別t的有效值,如果將該物件的底層位元組序列複製到乙個字元陣列 或者無符號字元陣列 中,再將其複製回物件,那麼該物件的值與原始值...