Kubernetes有一個HPA(Horizontal Pod Autoscaler)的資源倒慧,可以實現(xiàn)基于CPU使用率的Pod自動伸縮的功能
注意從kubernetes1.11開始Heapster被廢棄不在使用,metrics-server 替代了heapster
實現(xiàn)HPA首先需要部署metrics-server葫录,一個集群級別的資源利用率數(shù)據(jù)的聚合器
部署metrics-server步驟:
首先進入GitHub上進到kubernetes項目下的cluster下的addons文件路徑下反肋,把其中的yaml下載下來
然后對其中幾份yaml進行修改
metrics-server-deployment.yaml
- metrics-server的command中加上 - --kubelet-insecure-tls 表示不驗證客戶端的證書
- 注釋掉端口10255尼摹,注釋后會使用10250
- 因為某些不可描述的原因和措,可以將其中兩個鏡像更換為阿里云鏡像
- addon-resizer的command中寫上具體的cpu奴烙、memory助被、extra-memory的值
- 注釋掉minClusterSize={{ metrics_server_min_cluster_size }}
resource-reader.yaml - resource屬性添加- nodes/stats屬性
執(zhí)行 kubectl create -f 下載的yaml和修改后的yaml
等待資源創(chuàng)建后
查看api-versions剖张,會看到多出了metrics.k8s.io/v1beta1
使用 kubectl top nodes 或 kubectl top pods 可查看節(jié)點或某節(jié)點內(nèi)容器組的cpu資源和內(nèi)存資源的使用情況
參考文檔
部署metrics-server后,創(chuàng)建hpa
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: ms-wechat # 名稱
namespace: default #k8s命名空間
spec:
maxReplicas: 10 # 最大副本數(shù)
minReplicas: 1 # 最小副本數(shù)
scaleTargetRef:
apiVersion: apps/v1beta1
kind: Deployment
name: ms-wechat # 監(jiān)控名為ms-wechat的Deployment
targetCPUUtilizationPercentage: 80 # cpu 閾值
或者
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: mynginx
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: mynginx
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 50
- type: Resource
resource:
name: memory
targetAverageValue: 50Mi
spec中嵌套的個字段的說明如下:
- minReplicas:自動伸縮pod副本數(shù)下限
- maxReplicas:自動伸縮可擴展至Pod副本數(shù)的上限
- scaleTargetRef:要伸縮的目標資源
- metrics:用于計算所需的Pod副本數(shù)量的指標列表
- external:用于應(yīng)用非附屬于任何對象的全局指標
- object:應(yīng)用描述集群中某單一對象的特定指標
- pods:應(yīng)用被彈性伸縮的pod對象的特定指標
- resource:應(yīng)用資源指標揩环,即當前被彈性伸縮的pod對象中容器的requests和limits中定義的指標搔弄。
- type:標識指標源的類型
設(shè)置hpa后查看hpa資源
kubectl get hpa
假如targets字段有顯示unknown
原因
- 剛建立,等待一段時間再查看
- 需要自動伸縮的目標資源并沒有進行資源限制
對目標資源加上
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "1"
再執(zhí)行
kubectl apply -f 對應(yīng)的資源yaml
然后重新查看