相對於水平自動擴縮容(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
並在其下生成兩個資源verticalpodautoscalercheckpoint
及verticalpodautoscaler
建立測試應用
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的有效值,如果將該物件的底層位元組序列複製到乙個字元陣列 或者無符號字元陣列 中,再將其複製回物件,那麼該物件的值與原始值...