Kubernetes HPA Controller工作原理

HPA Controller 介紹

關於Kubernetes Horizontal Pod Autoscaler(簡稱HPA)的概念和使用介紹,請參考以下官方文檔鏈接,在這裏我不再贅述。

HPA Controller 工作原理

  • K8s通過HPA,基於獲取到的metrics(CPU utilization, custom metrics) value,對rc, deployment管理的pods進行自動伸縮。

截止到Kubernetes 1.6,Release特性中僅支持CPU utilization這一resource metrics,對custom metrics的支持目前仍在alpha階段,請知曉。

  • HPA Controller週期性(默認每30s一次,可通過kube-controller-manager的flag--horizontal-pod-autoscaler-sync-period進行設置)的調整對應的rc, deployment中的replicas數量,使得指定的metrics value能匹配用戶指定的target utilization value。

  • 在每個HPA Controller的處理週期中,kube-controller-manager都去查詢HPA中定義的metrics的utilization。查詢方式根據metric類型不同而不同:

    • 如果metric type是resource metrics,則通過resource metrics API查詢。
    • 如果metric type屬於custom metrics,則通過custom metrics API查詢。
  • 計算伸縮比例算法:

    • 對於resource metrics,比如CPU,HPA Controller獲取HPA中指定的metrics,如果HPA中設定了target utilization,則HPA Controller會將獲取到的metrics除於對應的容器的resource request值作爲監測到的當前pod的resource utilization。如此計算完所有HPA對應的pods後,對該resource utilization values取平均值。最後將平均值除於定義的target utilization,得到伸縮的比例。

      注意:如果HPA對應的某些pods中的容器沒有定義對應的resource request,則HPA不會對這些pods進行scale。

    • 對於custome metrics,HPA Controller的伸縮算法幾乎與resource metrics一樣,不同的是:此時是根據custome metrics API查詢到的metrics value對比target metics value計算得到的,而不是通過utilization計算得到的。

  • HPA與rc, deployment, pod的關係如下圖所示。

    • HPA通過Scale sub-resource接口,對RC和Deployment的replicas進行控制。
    • HPA最終對Pod副本數的控制終歸還是通過RC和Deployment控制器。

這裏寫圖片描述

HPA Controller有兩種方式獲取metrics:

  • direct Heapster access: 用於對resource metrics的監控,需要提前在kube-system namespace中部署Heapster。
  • REST client access: 用於對custom metrics的監控,需要設置kube-controller-manager的--horizontal-pod-autoscaler-use-rest-clients flag爲true。
發佈了62 篇原創文章 · 獲贊 12 · 訪問量 126萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章