問題
hpa.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: pc-hpa
namespace: dev
spec:
minReplicas: 1 #最小pod數量
maxReplicas: 10 #最大pod數量
targetCPUUtilizationPercentage: 3 # CPU使用率指標,cpu使用達到3%
scaleTargetRef: # 指定要控制的nginx信息
apiVersion: /v1
kind: Deployment
name: nginx
在我創建了hpa之後,pod,server等都是正常啓動,Metrics也正常安裝了 kubectl top
命令也是有效的,但是無法監控hpa控制器對應的cpu使用率
hpa日誌
現象
排查
參考:
https://github.com/kubernetes-sigs/metrics-server/issues/389
看看github的說法
真是一語點醒夢中人,之前我還以爲我哪裏yaml寫的有問題,各種排查,這上面說的是,集權是由Metrics檢測的,那爲啥不看看控制器的管理日誌呢,之前一直看pod,server,hpa的日誌,找到hpa日誌,以爲發現問題所在,但是並沒有找到解決辦法,有的解決辦法試了下也不行,這種就換個思路看看
查看controller-manager的pod的日誌
# 查找pod
kubectl get pod -n kube-system
# 查看日誌
kubectl logs -n kube-system kube-controller-manager-master
Event(v1.ObjectReference{Kind:"HorizontalPodAutoscaler", Namespace:"dev", Name:"pc-hpa", UID:"3b1aa606-c29e-4cf7-9c8a-7d7b3888c988", APIVersion:"autoscaling/v2beta2", ResourceVersion:"884669", FieldPath:""}): type: 'Warning' reason: 'FailedGetScale' no matches for kind "Deployment" in group ""
仔細看這個日誌,我明明指定的是apiVersion: autoscaling/v1
,爲什麼這日誌上顯示APIVersion:"autoscaling/v2beta2"
,看來這纔是問題所在
查看是否是版本問題
關於這些版本的區別可以參考
https://www.cnblogs.com/alisystemsoftware/p/11236151.html
難道就是算是舊版底層使用的是最新版的?
把版本升一下試試
# 複製配置
cp pc-hpa.yaml pc-hpa2.yaml
# 修改配置 autoscaling/v1 ===》 autoscaling/v2beta2 , metadata.name 改爲 pc-hpa2
vi pc-hpa2.yaml
# 創建一個
kubectl apply -f pc-hpa2.yaml
提示創建失敗,這也不行呀,難道是因爲缺失這個版本?
最終原因
在我反覆排查無果後,我左看看右看看出去點上了一根“快樂助手”,回來一看我好看犯了一個低級錯誤scaleTargetRef
選項裏好像漏了點啥,沒錯就是漏了apps
,啊哈哈哈,修正後的yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: pc-hpa
namespace: dev
spec:
minReplicas: 1 #最小pod數量
maxReplicas: 10 #最大pod數量
targetCPUUtilizationPercentage: 3 # CPU使用率指標,cpu使用達到3%
scaleTargetRef: # 指定要控制的nginx信息
apiVersion: apps/v1
kind: Deployment
name: nginx
查看最後結果
kubectl get hpa -n dev
這次排查提醒我,要注意細節,還有就是如果你指定的版本不對,k8s會默認按照最新版本創建