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

2022-05-26 15:28 更新

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

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

Kubernetes 組件以 Prometheus 格式 生成度量值。 這種格式是結(jié)構(gòu)化的純文本,旨在使人和機(jī)器都可以閱讀。

Kubernetes 中組件的指標(biāo)

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

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

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

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

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

指標(biāo)生命周期

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

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

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

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

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

例如:

  • 被棄用之前:
  • # 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

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

顯示隱藏指標(biāo) 

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

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

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

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

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

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

禁用加速器指標(biāo)

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

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

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

組件指標(biāo)

kube-controller-manager 指標(biāo)

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

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

比如,對于 GCE,這些指標(biāo)稱為:

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 指標(biāo) 

FEATURE STATE: Kubernetes v1.21 [beta]

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

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

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

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

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

禁用指標(biāo)

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

指標(biāo)順序性保證 

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

最終的格式看起來會是這樣: --allow-label-value <指標(biāo)名稱>,<標(biāo)簽名稱>='<可用值1>,<可用值2>...', <指標(biāo)名稱2>,<標(biāo)簽名稱>='<可用值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

公眾號
微信公眾號

編程獅公眾號