[英]How Kubernetes computes CPU utilization for HPA?
我想了解 HPA 如何計算跨 Pod 的 CPU 利用率。
根據此文檔,它采用 pod 的 CPU 利用率的平均值(過去 1 分鍾的平均值)除以 pod 請求的 CPU。 然后計算所有 Pod 的 CPU 的算術平均值。
不幸的是,該文檔包含一些過時的信息,例如--horizontal-pod-autoscaler-sync-period
默認設置為 30 秒,但在官方文檔中,默認值為 15 秒。
當我測試時,我注意到 HPA 甚至在平均 CPU 達到我設置的閾值(90%)之前就擴展了,這讓我認為它可能需要跨 Pod 的最大 CPU 而不是平均值。
我的問題是在哪里可以找到更新的文檔以准確了解 HPA 的工作原理?
請注意,我手頭沒有 Kubernetes 集群,這是基於 k8s 源代碼的理論答案。
看看這是否真的符合你的經驗。
Kubernetes 是開源的,這里似乎是HPA 代碼。
函數GetResourceReplica
和calcPlainMetricReplicas
(用於非利用率百分比)計算給定當前指標的副本數。
兩者都使用usageRatio
返回的GetMetricUtilizationRatio
,該值乘以 Replica 中當前准備好的 pod 數量,以獲得新的 pod 數量:
New_number_of_pods = Old_numbers_of_ready_pods * usageRatio
有一個容忍檢查(即如果usageRatio
足夠接近1,什么都不做)並且掛起和未知狀態的pods 被忽略(被認為使用0% 的資源)而沒有metrics 的pods 被認為使用100 % 的資源。
usageRatio
由GetResourceUtilizationRatio
計算,它傳遞了所有Pod 的指標和(資源的)請求,如下所示:
utilization = Total_sum_resource_usage_all_pods / Total_sum_resource_requests_all_pods
usageRatio = utilization * 100 / targetUtilization
targetUtilization
來自 HPA 規范。
代碼比我的這個摘要更容易閱讀,在這種情況下,術語請求的意思是“資源請求”(這是一個有根據的猜測)。
所以我會說 90% 是所有 pod的資源使用情況,因為它們都是一個單獨的 pod,請求每個 pod 的請求總和並收集指標,因為它們都在單個專用節點上運行。
根據https://github.com/kubernetes/kubernetes/issues/78988#issuecomment-502106361,這取決於配置,並且是指標服務器和 kublet 報告的問題,HPA 應該只使用以下信息: https:// kubernetes.io/docs/tasks/debug-application-cluster/resource-metrics-pipeline/#cpu
我認為持續時間應該由 kubelet 的 --housekeeping-interval 定義,默認為 10 秒
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.