簡體   English   中英

Kubernetes 如何計算 HPA 的 CPU 利用率?

[英]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 代碼

函數GetResourceReplicacalcPlainMetricReplicas (用於非利用率百分比)計算給定當前指標的副本數。
兩者都使用usageRatio返回的GetMetricUtilizationRatio ,該值乘以 Replica 中當前准備好的 pod 數量,以獲得新的 pod 數量:

New_number_of_pods = Old_numbers_of_ready_pods * usageRatio

有一個容忍檢查(即如果usageRatio足夠接近1,什么都不做)並且掛起和未知狀態的pods 被忽略(被認為使用0% 的資源)而沒有metrics 的pods 被認為使用100 % 的資源。

usageRatioGetResourceUtilizationRatio計算,它傳遞了所有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM