Kubernetes 資源指標(biāo)管道

2022-05-30 15:27 更新

資源指標(biāo)管道

對(duì)于 Kubernetes,Metrics API 提供了一組基本的指標(biāo),以支持自動(dòng)伸縮和類似的用例。 該 API 提供有關(guān)節(jié)點(diǎn)和 Pod 的資源使用情況的信息, 包括 CPU 和內(nèi)存的指標(biāo)。如果將 Metrics API 部署到集群中, 那么 Kubernetes API 的客戶端就可以查詢這些信息,并且可以使用 Kubernetes 的訪問控制機(jī)制來管理權(quán)限。

?HorizontalPodAutoscaler ?(HPA) 和 ?VerticalPodAutoscaler ?(VPA) 使用 metrics API 中的數(shù)據(jù)調(diào)整工作負(fù)載副本和資源,以滿足客戶需求。

你也可以通過 ?kubectl top? 命令來查看資源指標(biāo)。

Note:
Metrics API 及其啟用的指標(biāo)管道僅提供最少的 CPU 和內(nèi)存指標(biāo),以啟用使用 HPA 和/或 VPA 的自動(dòng)擴(kuò)展。 如果你想提供更完整的指標(biāo)集,你可以通過部署使用 Custom Metrics API 的第二個(gè) 指標(biāo)管道來作為簡單的 Metrics API 的補(bǔ)充。

圖 1 說明了資源指標(biāo)管道的架構(gòu)。


圖 1. 資源指標(biāo)管道

圖中從右到左的架構(gòu)組件包括以下內(nèi)容:

  • ?cAdvisor?: 用于收集、聚合和公開 Kubelet 中包含的容器指標(biāo)的守護(hù)程序。
  • ?kubelet?: 用于管理容器資源的節(jié)點(diǎn)代理。 可以使用 /metrics/resource 和 /stats kubelet API 端點(diǎn)訪問資源指標(biāo)。
  • ?Summary API?: kubelet 提供的 API,用于發(fā)現(xiàn)和檢索可通過 /stats 端點(diǎn)獲得的每個(gè)節(jié)點(diǎn)的匯總統(tǒng)計(jì)信息。
  • ?metrics-server?: 集群插件組件,用于收集和聚合從每個(gè) kubelet 中提取的資源指標(biāo)。 API 服務(wù)器提供 Metrics API 以供 HPA、VPA 和 kubectl top 命令使用。 Metrics Server 是 Metrics API 的參考實(shí)現(xiàn)。
  • ?Metrics API?: Kubernetes API 支持訪問用于工作負(fù)載自動(dòng)縮放的 CPU 和內(nèi)存。 要在你的集群中進(jìn)行這項(xiàng)工作,你需要一個(gè)提供 Metrics API 的 API 擴(kuò)展服務(wù)器。

Note: cAdvisor 支持從 cgroups 讀取指標(biāo),它適用于 Linux 上的典型容器運(yùn)行時(shí)。 如果你使用基于其他資源隔離機(jī)制的容器運(yùn)行時(shí),例如虛擬化,那么該容器運(yùn)行時(shí)必須支持 CRI 容器指標(biāo) 以便 kubelet 可以使用指標(biāo)。

Metrics API 

FEATURE STATE: Kubernetes 1.8 [beta]

metrics-server 實(shí)現(xiàn)了 Metrics API。此 API 允許你訪問集群中節(jié)點(diǎn)和 Pod 的 CPU 和內(nèi)存使用情況。 它的主要作用是將資源使用指標(biāo)提供給 K8s 自動(dòng)縮放器組件。

下面是一個(gè) ?minikube ?節(jié)點(diǎn)的 Metrics API 請(qǐng)求示例,通過 ?jq ?管道處理以便于閱讀:

kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes/minikube" | jq '.'

這是使用 ?curl ?來執(zhí)行的相同 API 調(diào)用:

curl http://localhost:8080/apis/metrics.k8s.io/v1beta1/nodes/minikube

響應(yīng)示例:

{
  "kind": "NodeMetrics",
  "apiVersion": "metrics.k8s.io/v1beta1",
  "metadata": {
    "name": "minikube",
    "selfLink": "/apis/metrics.k8s.io/v1beta1/nodes/minikube",
    "creationTimestamp": "2022-01-27T18:48:43Z"
  },
  "timestamp": "2022-01-27T18:48:33Z",
  "window": "30s",
  "usage": {
    "cpu": "487558164n",
    "memory": "732212Ki"
  }
}

下面是一個(gè) ?kube-system? 命名空間中的 ?kube-scheduler-minikube? Pod 的 Metrics API 請(qǐng)求示例, 通過 ?jq? 管道處理以便于閱讀:

kubectl get --raw "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/kube-scheduler-minikube" | jq '.'

這是使用 ?curl ?來完成的相同 API 調(diào)用:

curl http://localhost:8080/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/kube-scheduler-minikube

響應(yīng)示例:

{
  "kind": "PodMetrics",
  "apiVersion": "metrics.k8s.io/v1beta1",
  "metadata": {
    "name": "kube-scheduler-minikube",
    "namespace": "kube-system",
    "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/kube-scheduler-minikube",
    "creationTimestamp": "2022-01-27T19:25:00Z"
  },
  "timestamp": "2022-01-27T19:24:31Z",
  "window": "30s",
  "containers": [
    {
      "name": "kube-scheduler",
      "usage": {
        "cpu": "9559630n",
        "memory": "22244Ki"
      }
    }
  ]
}

Metrics API 在 k8s.io/metrics 代碼庫中定義。 你必須啟用 API 聚合層并為 ?metrics.k8s.io? API 注冊(cè)一個(gè) APIService。

要了解有關(guān) Metrics API 的更多信息, 請(qǐng)參閱資源 Resource Metrics API Design、 metrics-server 代碼庫 和 Resource Metrics API。

Note: 你必須部署提供 Metrics API 服務(wù)的 metrics-server 或其他適配器才能訪問它。

度量資源用量 

CPU 

CPU 報(bào)告為以 cpu 為單位測(cè)量的平均核心使用率。在 Kubernetes 中, 一個(gè) cpu 相當(dāng)于云提供商的 1 個(gè) vCPU/Core,以及裸機(jī) Intel 處理器上的 1 個(gè)超線程。

該值是通過對(duì)內(nèi)核提供的累積 CPU 計(jì)數(shù)器(在 Linux 和 Windows 內(nèi)核中)取一個(gè)速率得出的。 用于計(jì)算 CPU 的時(shí)間窗口顯示在 Metrics API 的窗口字段下。

內(nèi)存 

內(nèi)存報(bào)告為在收集度量標(biāo)準(zhǔn)的那一刻的工作集大小,以字節(jié)為單位。

在理想情況下,“工作集”是在內(nèi)存壓力下無法釋放的正在使用的內(nèi)存量。 然而,工作集的計(jì)算因主機(jī)操作系統(tǒng)而異,并且通常大量使用啟發(fā)式算法來產(chǎn)生估計(jì)。

Kubernetes 模型中,容器工作集是由容器運(yùn)行時(shí)計(jì)算的與相關(guān)容器關(guān)聯(lián)的匿名內(nèi)存。 工作集指標(biāo)通常還包括一些緩存(文件支持)內(nèi)存,因?yàn)橹鳈C(jī)操作系統(tǒng)不能總是回收頁面。

Metrics 服務(wù)器 

metrics-server 從 kubelet 中獲取資源指標(biāo),并通過 Metrics API 在 Kubernetes API 服務(wù)器中公開它們,以供 HPA 和 VPA 使用。 你還可以使用 ?kubectl top? 命令查看這些指標(biāo)。

metrics-server 使用 Kubernetes API 來跟蹤集群中的節(jié)點(diǎn)和 Pod。metrics-server 服務(wù)器通過 HTTP 查詢每個(gè)節(jié)點(diǎn)以獲取指標(biāo)。 metrics-server 還構(gòu)建了 Pod 元數(shù)據(jù)的內(nèi)部視圖,并維護(hù) Pod 健康狀況的緩存。 緩存的 Pod 健康信息可通過 metrics-server 提供的擴(kuò)展 API 獲得。

例如,對(duì)于 HPA 查詢,metrics-server 需要確定哪些 Pod 滿足 Deployment 中的標(biāo)簽選擇器。

metrics-server 調(diào)用 kubelet API 從每個(gè)節(jié)點(diǎn)收集指標(biāo)。根據(jù)它使用的度量服務(wù)器版本:

  • 版本 v0.6.0+ 中,使用指標(biāo)資源端點(diǎn) ?/metrics/resource ?
  • 舊版本中使用 Summary API 端點(diǎn) ?/stats/summary?

Summary API 來源

Kubelet 在節(jié)點(diǎn)、卷、Pod 和容器級(jí)別收集統(tǒng)計(jì)信息, 并在Summary API 中提供它們的統(tǒng)計(jì)信息供消費(fèi)者閱讀。

下面是一個(gè) ?minikube ?節(jié)點(diǎn)的 Summary API 請(qǐng)求示例:

kubectl get --raw "/api/v1/nodes/minikube/proxy/stats/summary"

這是使用 ?curl ?來執(zhí)行的相同 API 調(diào)用:

curl http://localhost:8080/api/v1/nodes/minikube/proxy/stats/summary
Note:
從 metrics-server 0.6.x 開始,Summary API ?/stats/summary? 端點(diǎn)被 ?/metrics/resource? 端點(diǎn)替換。


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)