Kubernetes 系統(tǒng)組件指標

2022-05-26 15:28 更新

Kubernetes 系統(tǒng)組件指標

通過系統(tǒng)組件指標可以更好地了解系統(tǒng)組個內(nèi)部發(fā)生的情況。系統(tǒng)組件指標對于構建儀表板和告警特別有用。

Kubernetes 組件以 Prometheus 格式 生成度量值。 這種格式是結構化的純文本,旨在使人和機器都可以閱讀。

Kubernetes 中組件的指標

在大多數(shù)情況下,可以通過 HTTP 訪問組件的 ?/metrics? 端點來獲取組件的度量值。 對于那些默認情況下不暴露端點的組件,可以使用 ?--bind-address? 標志啟用。

在生產(chǎn)環(huán)境中,你可能需要配置 Prometheus 服務器 或 某些其他指標搜集器以定期收集這些指標,并使它們在某種時間序列數(shù)據(jù)庫中可用。

請注意,kubelet 還會在 ?/metrics/cadvisor?, ?/metrics/resource? 和 ?/metrics/probes? 端點中公開度量值。這些度量值的生命周期各不相同。

如果你的集群使用了 RBAC, 則讀取指標需要通過基于用戶、組或 ServiceAccount 的鑒權,要求具有允許訪問 ?/metrics? 的 ClusterRole。 例如:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: prometheus
rules:
  - nonResourceURLs:
      - "/metrics"
    verbs:
      - get

指標生命周期

Alpha 指標 → 穩(wěn)定的指標 → 棄用的指標 → 隱藏的指標 → 刪除的指標

Alpha 指標沒有穩(wěn)定性保證。這些指標可以隨時被修改或者刪除。

穩(wěn)定的指標可以保證不會改變。這意味著:

  • 穩(wěn)定的、不包含已棄用(deprecated)簽名的指標不會被刪除(或重命名)
  • 穩(wěn)定的指標的類型不會被更改

已棄用的指標最終將被刪除,不過仍然可用。 這類指標包含注解,標明其被廢棄的版本。

例如:

  • 被棄用之前:
  • # HELP some_counter this counts things
    # TYPE some_counter counter
    some_counter 0
  • 被棄用之后:
  • # HELP some_counter (Deprecated since 1.15.0) this counts things
    # TYPE some_counter counter
    some_counter 0

隱藏的指標不會再被發(fā)布以供抓取,但仍然可用。刪除的指標不再被發(fā)布,亦無法使用。

顯示隱藏指標 

如上所述,管理員可以通過設置可執(zhí)行文件的命令行參數(shù)來啟用隱藏指標, 如果管理員錯過了上一版本中已經(jīng)棄用的指標的遷移,則可以把這個用作管理員的逃生門。

?show-hidden-metrics-for-version? 標志接受版本號作為取值,版本號給出 你希望顯示該發(fā)行版本中已棄用的指標。 版本表示為 x.y,其中 x 是主要版本,y 是次要版本。補丁程序版本不是必須的, 即使指標可能會在補丁程序發(fā)行版中棄用,原因是指標棄用策略規(guī)定僅針對次要版本。

該參數(shù)只能使用前一個次要版本。如果管理員將先前版本設置為 ?show-hidden-metrics-for-version?, 則先前版本中隱藏的度量值會再度生成。不允許使用過舊的版本,因為那樣會違反指標棄用策略。

以指標 ??為例,此處假設 ??在 1.n 中已棄用。根據(jù)指標棄用策略,我們可以得出以下結論:

  • 在版本 ?1.n? 中,這個指標已經(jīng)棄用,且默認情況下可以生成。
  • 在版本 ?1.n+1? 中,這個指標默認隱藏,可以通過命令行參數(shù) ?show-hidden-metrics-for-version=1.n? 來再度生成。
  • 在版本 ?1.n+2? 中,這個指標就將被從代碼中移除,不會再有任何逃生窗口。

如果你要從版本 ?1.12? 升級到 ?1.13?,但仍依賴于 ?1.12? 中棄用的指標 ?A?,則應通過命令行設置隱藏指標: ?--show-hidden-metrics=1.12?,并記住在升級到 ?1.14? 版本之前刪除此指標依賴項。

禁用加速器指標

kubelet 通過 cAdvisor 收集加速器指標。為了收集這些指標,對于 NVIDIA GPU 之類的加速器, kubelet 在驅動程序上保持打開狀態(tài)。這意味著為了執(zhí)行基礎結構更改(例如更新驅動程序), 集群管理員需要停止 kubelet 代理。

現(xiàn)在,收集加速器指標的責任屬于供應商,而不是 kubelet。供應商必須提供一個收集指標的容器, 并將其公開給指標服務(例如 Prometheus)。

?DisableAcceleratorUsageMetrics ?特性門控 禁止由 kubelet 收集的指標。 關于何時會在默認情況下啟用此功能也有一定規(guī)劃。

組件指標

kube-controller-manager 指標

控制器管理器指標可提供有關控制器管理器性能和運行狀況的重要洞察。 這些指標包括通用的 Go 語言運行時指標(例如 go_routine 數(shù)量)和控制器特定的度量指標, 例如可用于評估集群運行狀況的 etcd 請求延遲或云提供商(AWS、GCE、OpenStack)的 API 延遲等。

從 Kubernetes 1.7 版本開始,詳細的云提供商指標可用于 GCE、AWS、Vsphere 和 OpenStack 的存儲操作。 這些指標可用于監(jiān)控持久卷操作的運行狀況。

比如,對于 GCE,這些指標稱為:

cloudprovider_gce_api_request_duration_seconds { request = "instance_list"}
cloudprovider_gce_api_request_duration_seconds { request = "disk_insert"}
cloudprovider_gce_api_request_duration_seconds { request = "disk_delete"}
cloudprovider_gce_api_request_duration_seconds { request = "attach_disk"}
cloudprovider_gce_api_request_duration_seconds { request = "detach_disk"}
cloudprovider_gce_api_request_duration_seconds { request = "list_disk"}

kube-scheduler 指標 

FEATURE STATE: Kubernetes v1.21 [beta]

調(diào)度器會暴露一些可選的指標,報告所有運行中 Pods 所請求的資源和期望的約束值。 這些指標可用來構造容量規(guī)劃監(jiān)控面板、訪問調(diào)度約束的當前或歷史數(shù)據(jù)、 快速發(fā)現(xiàn)因為缺少資源而無法被調(diào)度的負載,或者將 Pod 的實際資源用量 與其請求值進行比較。

kube-scheduler 組件能夠辯識各個 Pod 所配置的資源 請求和約束。 在 Pod 的資源請求值或者約束值非零時,kube-scheduler 會以度量值時間序列的形式 生成報告。該時間序列值包含以下標簽:

  • 名字空間
  • Pod 名稱
  • Pod 調(diào)度所處節(jié)點,或者當 Pod 未被調(diào)度時用空字符串表示
  • 優(yōu)先級
  • 為 Pod 所指派的調(diào)度器
  • 資源的名稱(例如,?cpu?)
  • 資源的單位,如果知道的話(例如,?cores?)

一旦 Pod 進入完成狀態(tài)(其 ?restartPolicy ?為 ?Never ?或 ?OnFailure?,且 其處于 ?Succeeded ?或 ?Failed ?Pod 階段,或者已經(jīng)被刪除且所有容器都具有 終止狀態(tài)),該時間序列停止報告,因為調(diào)度器現(xiàn)在可以調(diào)度其它 Pod 來執(zhí)行。 這兩個指標稱作 ?kube_pod_resource_request ?和 ?kube_pod_resource_limit?。

指標暴露在 HTTP 端點 ?/metrics/resources?,與調(diào)度器上的 ?/metrics? 端點 一樣要求相同的訪問授權。你必須使用 ?--show-hidden-metrics-for-version=1.20? 標志才能暴露那些穩(wěn)定性為 Alpha 的指標。

禁用指標

你可以通過命令行標志 ?--disabled-metrics? 來關閉某指標。 在例如某指標會帶來性能問題的情況下,這一操作可能是有用的。 標志的參數(shù)值是一組被禁止的指標(例如:?--disabled-metrics=metric1,metric2?)。

指標順序性保證 

在 Alpha 階段,標志只能接受一組映射值作為可以使用的指標標簽。 每個映射值的格式為<指標名稱>,<標簽名稱>=<可用標簽列表>,其中 <可用標簽列表> 是一個用逗號分隔的、可接受的標簽名的列表。

最終的格式看起來會是這樣: --allow-label-value <指標名稱>,<標簽名稱>='<可用值1>,<可用值2>...', <指標名稱2>,<標簽名稱>='<可用值1>, <可用值2>...', ....

下面是一個例子:

?--allow-label-value number_count_metric,odd_number='1,3,5', number_count_metric,even_number='2,4,6', date_gauge_metric,weekend='Saturday,Sunday'?


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號