本文已超過一年。較舊的文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

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_upscale_downnone) 和 error (specinternalnone)。而且,除了這些標籤之外,前兩個指標還具有 metric_type 標籤,該標籤對應於 HorizontalPodAutoscaler 的 .spec.metrics[*].type

所有指標都適用於 HPA 控制器的一般監控,您可以更深入了解哪個部分有問題、在哪裡花費時間,以及叢集上在什麼時間傾向發生多少擴展等。

另一個小改動,我們變更了 SuccessfulRescale 事件的訊息,以便所有人都可以檢查事件是來自資源指標還是容器資源指標 (請參閱 相關 PR)。

參與其中

此功能由 SIG Autoscaling 管理。請加入我們並分享您的意見回饋。我們期待收到您的來信!

如何了解更多資訊?