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

kube-state-metrics 升級到 v2.0

什麼是 kube-state-metrics?

kube-state-metrics 是 Kubernetes 組織下的一個專案,它根據 Kubernetes 原生資源的當前狀態生成 Prometheus 格式的度量指標。它透過監聽 Kubernetes API 並收集有關資源和物件(例如 Deployment、Pod、Service 和 StatefulSet)的資訊來實現這一點。完整資源列表可在 kube-state-metrics 的文件中找到。

為什麼要用 kube-state-metrics?

kube-state-metrics 開箱即用地提供了許多有用的度量指標和洞察!這些度量指標可以作為您叢集的洞察:可以透過單獨的度量指標、儀表板形式或透過警報管道來實現。舉幾個例子:

  • kube_pod_container_status_restarts_total 可用於警報崩潰的 Pod。
  • kube_deployment_status_replicaskube_deployment_status_replicas_available 結合使用,可用於警報 Deployment 是否成功釋出或卡住。
  • kube_pod_container_resource_requestskube_pod_container_resource_limits 可用於容量規劃儀表板。

還有更多可用指標!要了解其他指標及其詳細資訊,請檢視文件

v2.0 有什麼新功能?

現在我們瞭解了 kube-state-metrics 是什麼,我們很高興宣佈下一個版本:kube-state-metrics v2.0!這個版本期待已久,並於 2020 年 9 月釋出了 Alpha 版本。為了便於維護,我們消除了技術債務,並調整了一些關於面向使用者的標誌和 API 的令人困惑的措辭。我們還刪除了一些在 Prometheus 中導致不必要高基數的指標!對於 2.0 版本,我們花時間設定了規模和效能測試。這使我們能夠更好地瞭解在大規模叢集中是否遇到任何問題,並記錄您叢集的資源請求建議。在此版本(和 v1.9.8)中,引入了支援多種架構的容器構建,使您也可以在 ARM、ARM64、PPC64 和 S390x 上執行 kube-state-metrics!

事不宜遲,以下是更值得注意的面向使用者的重大更改列表。完整的更改、功能和錯誤修復列表可在本文末尾的變更日誌中找到。

  • 標誌 --namespace 已重新命名為 --namespaces。如果您正在使用前者,請務必在部署最新版本之前更新該標誌。
  • 標誌 --collectors 已重新命名為 --resources
  • 標誌 --metric-blacklist--metric-whitelist 已重新命名為 --metric-denylist--metric-allowlist
  • 標誌 --metric-labels-allowlist 允許您指定一個 Kubernetes 標籤列表,這些標籤將轉換為 kube_<resource-name>_labels 指標的維度。預設情況下,該指標僅包含名稱和名稱空間標籤。
  • 所有帶有 kube_hpa_* 字首的指標都已重新命名為 kube_horizontalpodautoscaler_*
  • 與 Kubernetes 相關的指標標籤已轉換為 snake_case。
  • 如果您將 kube-state-metrics 作為庫匯入,我們已將我們的 go 模組路徑更新為 k8s.io/kube-state-metrics/v2
  • 根據 v1.9 版本中的通知,所有已棄用的穩定指標都已刪除。
  • quay.io/coreos/kube-state-metrics 映象將不再更新。k8s.gcr.io/kube-state-metrics/kube-state-metrics 是新的規範位置(更新:k8s.gcr.io 已棄用,取而代之的是 registry.k8s.io)。
  • kubernetes/kube-state-metrics 倉庫中包含的 Helm Chart 已棄用。https://github.com/prometheus-community/helm-charts 將是它的新位置。

有關 v2.0 版本更改的完整列表,包括功能、錯誤修復和其他重大更改,請參閱完整的變更日誌

發現問題?

感謝所有使用者迄今為止的測試,感謝所有貢獻者的問題報告以及程式碼和文件更改!如果您發現任何問題,我們這些維護者非常樂意調查,因此請透過建立 GitHub 問題來報告它們。