本文已超過一年。較舊的文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Kubernetes 1.27:HorizontalPodAutoscaler ContainerResource 類型指標移至 beta 版
Kubernetes 1.20 版本在 HorizontalPodAutoscaler (HPA) 中引入了 ContainerResource
類型指標。
在 Kubernetes 1.27 版本中,此功能移至 Beta 階段,且對應的功能閘道 (HPAContainerMetrics
) 預設為啟用。
什麼是 ContainerResource 類型指標
ContainerResource 類型指標讓我們能夠根據個別容器的資源使用量來配置自動擴展。
在以下範例中,HPA 控制器會擴展目標,使所有 Pod 中應用程式容器的 CPU 平均使用率維持在 60% 左右。(請參閱 演算法詳細資訊,以了解如何準確計算所需的副本數量)
type: ContainerResource
containerResource:
name: cpu
container: application
target:
type: Utilization
averageUtilization: 60
與 Resource 類型指標的差異
HPA 已經有 Resource 類型指標。
您可以定義目標資源使用率,如下所示,然後 HPA 將根據目前的使用率擴增/縮減副本。
type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
但是,此 Resource 類型指標指的是 Pods (容器群組) 的平均使用率。
如果 Pod 具有多個容器,則使用率計算方式為
sum{the resource usage of each container} / sum{the resource request of each container}
每個容器的資源使用率可能沒有直接關聯,或者可能會隨著負載變化以不同的速率成長。
例如
- Sidecar 容器僅提供輔助服務,例如日誌傳輸。如果應用程式不常記錄日誌,或未在其熱路徑中產生日誌,則日誌傳輸程式的使用量將不會增加。
- 提供身份驗證的 Sidecar 容器。由於大量快取,當主要容器上的負載增加時,使用量只會略微增加。在目前混合使用率計算方法中,這通常會導致 HPA 不擴增部署,因為混合使用率仍然很低。
- 可能會注入未設定資源的 Sidecar,這會阻止根據使用率進行擴展。在目前的邏輯中,當未設定資源請求時,HPA 控制器只能根據 Pod 的絕對資源使用量進行擴展。
而且,在這種情況下,如果只有一個容器的資源使用率很高,則 Resource 類型指標可能不會建議擴增。
因此,為了準確的自動擴展,您可能會想要對此類 Pod 使用 ContainerResource 類型指標。
Beta 版本的新功能?
對於 Kubernetes v1.27 版本,ContainerResource 類型指標預設為可用,如本文開頭所述。(您仍然可以透過 HPAContainerMetrics
功能閘道停用它。)
此外,我們透過從 kube-controller-manager 公開一些指標,改進了 HPA 控制器的可觀察性
metric_computation_total
:指標計算總數。metric_computation_duration_seconds
:HPA 控制器計算一個指標所需的時間。reconciliations_total
:HPA 控制器的協調總數。reconciliation_duration_seconds
:HPA 控制器協調一次 HPA 物件所需的時間。
這些指標具有標籤 action
(scale_up
、scale_down
、none
) 和 error
(spec
、internal
、none
)。而且,除了這些標籤之外,前兩個指標還具有 metric_type
標籤,該標籤對應於 HorizontalPodAutoscaler 的 .spec.metrics[*].type
。
所有指標都適用於 HPA 控制器的一般監控,您可以更深入了解哪個部分有問題、在哪裡花費時間,以及叢集上在什麼時間傾向發生多少擴展等。
另一個小改動,我們變更了 SuccessfulRescale
事件的訊息,以便所有人都可以檢查事件是來自資源指標還是容器資源指標 (請參閱 相關 PR)。
參與其中
此功能由 SIG Autoscaling 管理。請加入我們並分享您的意見回饋。我們期待收到您的來信!