中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎樣使用自定義指標進行K8S自動彈性伸縮

發布時間:2021-12-16 09:57:50 來源:億速云 閱讀:246 作者:柒染 欄目:云計算

怎樣使用自定義指標進行K8S自動彈性伸縮,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

Kubernetes自動彈性伸縮可以根據業務流量,自動增加或減少服務。這一功能在實際的業務場景中十分重要。我們將了解Kubernetes如何針對應用產生的自定義指標實現自動伸縮。

為什么需要自定義指標?

應用程序的CPU或RAM的消耗并不一定能夠正確表明是否需要進行擴展。例如,如果你有一個消息隊列consumer,它每秒可以處理500條消息而不會導致崩潰。一旦該consumer的單個實例每秒處理接近500條消息,你可能希望將應用程序擴展到兩個實例,以便將負載分布在兩個實例上。測量CPU或RAM對于擴展這樣的應用程序來說有點矯枉過正了,你需要尋找一個與應用程序性質更為密切相關的指標。一個實例在特定時間點處理的消息數量能更貼切地反映該應用的實際負載。同樣,可能有一些應用的其他指標更有意義。這些可以使用Kubernetes中的自定義指標進行定義。

Metrics流水線

Metrics Server和API

最初,這些指標會通過Heapster暴露給用戶,Heapster可以從每個kubelet中查詢指標。Kubelet則與localhost上的cAdvisor對話,并檢索出節點級和pod級的指標。Metric-server的引入是為了取代heapster,并使用Kubernetes API來暴露指標從而以Kubernetes API的方式提供指標。Metric server僅提供核心的指標,比如pod和節點的內存和CPU,對于其他指標,你需要構建完整的指標流水線。構建流水線和Kubernetes自動伸縮的機制將會保持不變。

Aggregation Layer

能夠通過Kubernetes API層暴露指標的關鍵部分之一是Aggregation Layer。該aggregation layer允許在集群中安裝額外的Kubernetes格式的API。這使得API像任何Kubernetes資源一樣可用,但API的實際服務可以由外部服務完成,可能是一個部署到集群本身的Pod(如果沒有在集群級別完成,你需要啟用aggregation layer)。那么,這到底是如何發揮作用的呢?作為用戶,用戶需要提供API Provider(比如運行API服務的pod),然后使用APIService對象注冊相同的API。

讓我們以核心指標流水線為例來說明metrics server如何使用 API Aggregation layer注冊自己。APIService對象如下:

apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
  name: v1beta1.metrics.k8s.io
spec:
  service:
    name: metrics-server
    namespace: kube-system
  group: metrics.k8s.io
  version: v1beta1
  insecureSkipTLSVerify: true
  groupPriorityMinimum: 100
  versionPriority: 100

部署使用APIService注冊API的metrics server之后,我們可以看到Kubernetes API中提供了指標API:

怎樣使用自定義指標進行K8S自動彈性伸縮

Metrics流水線:核心部分和完整流水線

我們已經了解了基本組件,讓我們把它們放在一起組成核心metrics流水線。在核心流水線中,如果你已經恰當地安裝了metrics server,它也將創建APIService將自己注冊到Kubernetes API server上。正如我們在上一節中所了解到的那樣,這些指標將在/apis/metrics.k8s.io中暴露,并被HPA使用。

怎樣使用自定義指標進行K8S自動彈性伸縮

大部分復雜的應用程序需要更多的指標,而不僅僅是內存和CPU,這也是大多數企業使用監控工具的原因,最常見的監控工具有Prometheus、Datadog以及Sysdig等。而不同的工具所使用的格式也有所區別。在我們可以使用Kubernetes API聚合來暴露endpoint之前,我們需要將指標轉換為合適的格式。此時需要使用小型的adapter(適配器)——它可能是監控工具的一部分,也可能作為一個單獨的組件,它在監控工具和Kubernetes API之間架起了一座橋梁。例如,Prometheus有專門的Prometheus adapter或者Datadog有Datadog Cluster Agent — 它們位于監控工具和API之間,并從一種格式轉換到另一個種格式,如下圖所示。這些指標在稍微不同的endpoint都可以使用。

怎樣使用自定義指標進行K8S自動彈性伸縮

Demo:Kubernetes自動伸縮

我們將演示如何使用自定義指標自動伸縮應用程序,并且借助Prometheus和Prometheus adapter。

設置Prometheus

為了讓適配器可以使用指標,我們將使用Prometheus Operator來安裝Prometheus。它創建CRD來在集群中部署Prometheus的組件。CRD是擴展Kubernetes資源的一種方式。使用Operator可以“以Kubernetes的方式”(通過在YAML文件中定義對象)輕松配置和維護Prometheus實例。由Prometheus Operator創建的CRD有:

  • AlertManager

  • ServiceMonitor

  • Prometheus

你可以根據下方鏈接的指導設置Prometheus:

https://github.com/infracloudio/kubernetes-autoscaling#installing-prometheus-operator-and-prometheus

部署Demo應用程序

為了生成指標,我們將部署一個簡單的應用程序mockmetrics,它將在/metrics處生成total_hit_count值。這是一個用Go寫的網絡服務器。當URL被訪問時,指標total_hit_count的值會不斷增加。它使用Prometheus所要求的展示格式來顯示指標。

根據以下鏈接來為這一應用程序創建deployment和服務,它同時也為應用程序創建ServiceMonitor和HPA:

https://github.com/infracloudio/kubernetes-autoscaling#deploying-the-mockmetrics-application

ServiceMonitor

ServiceMonitor為Prometheus創建了一個配置。它提到了服務的標簽、路徑、端口以及應該在什么時候抓取指標的時間間隔。在服務label的幫助下,選擇了pods。Prometheus會從所有匹配的Pod中抓取指標。根據你的Prometheus配置,ServiceMonitor應該放在相應的命名空間中。在本例中,它和mockmetrics 在同一個命名空間。

部署和配置Prometheus Adapter

現在要為HPA提供custom.metrics.k8s.io API endpoint,我們將部署Prometheus Adapter。Adapter希望它的配置文件在Pod中可用。我們將創建一個configMap并將其掛載在pod內部。我們還將創建Service和APIService來創建API。APIService將**/api/custom.metrics.k8s.io/v1beta1 endpoint**添加到標準的Kubernetes APIs。你可以根據以下教程來實現這一目標:

https://github.com/infracloudio/kubernetes-autoscaling#deploying-the-custom-metrics-api-server-prometheus-adapter

接下來,我們看一下配置:

  • seriesQuery用于查詢Prometheus的資源,標簽為“default“和”mockmetrics-service“。

  • resources部分提到標簽如何被映射到Kubernetes資源。針對我們的情況,它將“namespace“標簽與Kubernetes的”namespace“進行映射,服務也是如此。

  • metricsQuery又是一個Prometheus查詢,它可以將指標導入adapter。我們使用的查詢是獲取2分鐘內所有匹配regexmockmetrics-deploy-(.*)的pods的平均total_hit_count總和。

Kubernetes自動伸縮實踐

一旦你根據下文中的步驟進行,指標值會不斷增加。我們現在就來看HPA:

https://github.com/infracloudio/kubernetes-autoscaling#scaling-the-application

$ kubectl get hpa -w
NAME                  REFERENCE                       TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
mockmetrics-app-hpa   Deployment/mockmetrics-deploy   0/100     1         10        1          11h
mockmetrics-app-hpa   Deployment/mockmetrics-deploy   56/100    1         10        1          11h
mockmetrics-app-hpa   Deployment/mockmetrics-deploy   110/100   1         10        1          11h
mockmetrics-app-hpa   Deployment/mockmetrics-deploy   90/100    1         10        2          11h
mockmetrics-app-hpa   Deployment/mockmetrics-deploy   126/100   1         10        2          11h
mockmetrics-app-hpa   Deployment/mockmetrics-deploy   306/100   1         10        2          11h
mockmetrics-app-hpa   Deployment/mockmetrics-deploy   171/100   1         10        4          11h

你可以看到當該值達到目標值時,副本數如何增加。

工作流程

自動伸縮的整體流程如下圖所示:

怎樣使用自定義指標進行K8S自動彈性伸縮

圖片來源: luxas/kubeadm-workshop

關于怎樣使用自定義指標進行K8S自動彈性伸縮問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石阡县| 竹北市| 砚山县| 贡山| 中牟县| 封开县| 丰都县| 万源市| 浦北县| 泰安市| 呼和浩特市| 固安县| 丹棱县| 光泽县| 石河子市| 汉中市| 勐海县| 榕江县| 泰来县| 新建县| 馆陶县| 韶关市| 久治县| 遂川县| 台湾省| 高碑店市| 通化市| 怀远县| 长葛市| 连州市| 新兴县| 黄陵县| 平塘县| 文昌市| 浦北县| 阳新县| 年辖:市辖区| 屯留县| 乃东县| 伊春市| 乐都县|