這篇文章主要介紹“怎么自定義Istio指標(biāo)實(shí)現(xiàn)Pod水平自動(dòng)縮放以及自動(dòng)伸縮Spring Boot”,在日常操作中,相信很多人在怎么自定義Istio指標(biāo)實(shí)現(xiàn)Pod水平自動(dòng)縮放以及自動(dòng)伸縮Spring Boot問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么自定義Istio指標(biāo)實(shí)現(xiàn)Pod水平自動(dòng)縮放以及自動(dòng)伸縮Spring Boot”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站,成都做網(wǎng)站公司-成都創(chuàng)新互聯(lián)公司已向1000+企業(yè)提供了,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)絡(luò)營(yíng)銷等服務(wù)!設(shè)計(jì)與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗(yàn),合理的價(jià)格為您打造企業(yè)品質(zhì)網(wǎng)站。
Pipeline的核心功能之一,Banzai Cloud的應(yīng)用程序和devops容器管理平臺(tái),是多維的并可以基于默認(rèn)和自定義指標(biāo)進(jìn)行自動(dòng)調(diào)節(jié)。 在我們引入自定義指標(biāo)后,我們選擇了通過(guò)Prometheus適配器從Prometheus收集指標(biāo)。 從那時(shí)起,我們的許多客戶開(kāi)始使用Hoizontal Pod Autoscaling,他們中的大多數(shù)人只對(duì)基本的CPU和內(nèi)存指標(biāo)感到滿意。
我們一直都知道這不是一個(gè)理想的解決方案,我們一直在努力尋求更靈活的解決方案,以便:
基于自定義Prometheus指標(biāo)的擴(kuò)展
為更復(fù)雜的Prometheus查詢提供擴(kuò)展支持
隨著我們的開(kāi)源Istio operator的發(fā)布以及在Pipeline平臺(tái)上廣泛引入基于Istio的服務(wù)網(wǎng)格,我們也提供了根據(jù)自定義的Istio指標(biāo)的自動(dòng)縮放功能。 Prometheus現(xiàn)在提供網(wǎng)絡(luò)指標(biāo),延遲,故障率以及更多指標(biāo)(默認(rèn)情況下從Istio中刪除)。 我們的HPA operator根據(jù)這些指標(biāo)決定是否擴(kuò)展。
但是,在使用Prometheus Adapter時(shí),我們的方法已不再可行,因此我們決定探索替代方案。
如果您錯(cuò)過(guò)了我們關(guān)于Pipeline平臺(tái)所支持和自動(dòng)化不同類型的自動(dòng)縮放功能的系列博客,請(qǐng)查看這些早先的帖子:
Autoscaling Kubernetes集群
Vertical pod autoscaler
自定義指標(biāo)上的水平自動(dòng)縮放Kubernetes部署
Horizontal Pod Autoscaler Kubernetes Operator
重新加載水平Pod自動(dòng)調(diào)節(jié)器操作員
Pipeline及其HPA Operator中對(duì)重新設(shè)計(jì)的自定義指標(biāo)支持的介紹。
使用來(lái)自Prometheus的Istio指標(biāo)自動(dòng)調(diào)整Spring Boot部署的示例
深入了解添加自定義指標(biāo)后發(fā)生了什么
切換到另一個(gè)自定義指標(biāo)適配器,kube-metrics-adapter的介紹
由于上面列出的原因,我們決定使用另一個(gè)自定義指標(biāo)適配器,kube-metrics-adapter。
kube-metrics-adapter是一種通用指標(biāo)適配器,可以從多個(gè)來(lái)源收集和提供指標(biāo)。對(duì)于每個(gè)源,都有一個(gè)Collector
實(shí)現(xiàn);目前,我們對(duì)其Prometheus收集器最感興趣。
Prometheus Collector
是一個(gè)通用收集器。它將Prometheus查詢映射到可由HPA控制器用于部署自動(dòng)擴(kuò)展的度量標(biāo)準(zhǔn)。它的方法不同于Prometheus Adapter,它具有預(yù)定義的規(guī)則集 - 包含針對(duì)Prometheus運(yùn)行的查詢,用于將指標(biāo)轉(zhuǎn)換為自定義指標(biāo) - 定期執(zhí)行。獲取所有匹配的指標(biāo)標(biāo)準(zhǔn)(因?yàn)檫@些查詢必須是通用的并且定位所有pod和部署),并作為自定義指標(biāo)進(jìn)行轉(zhuǎn)換和公開(kāi)。相比之下,“Prometheus collector”僅收集自定義查詢返回的指標(biāo)結(jié)果,其定義因部署而異,并且僅針對(duì)單個(gè)部署/ pod或服務(wù),從而減少了存儲(chǔ)的指標(biāo)總數(shù)。該解決方案的一個(gè)缺點(diǎn)是,目前,用戶應(yīng)該避免執(zhí)行性能不佳的查詢。
我選擇了流行的spotguides
,基于MySQL的Sprint Boot 應(yīng)用,以便在MySQL服務(wù)器旁,快速啟動(dòng)一個(gè)輕量級(jí)Web應(yīng)用程序容器。 我使用Banzai Pipeline Beta,它支持在六個(gè)云提供商中或在本地快速啟動(dòng)Kubernetes集群。 Prometheus & Grafana Monitoring以及Istio是默認(rèn)功能,可以通過(guò)UI開(kāi)關(guān)輕松打開(kāi)(Pipeline處理其余部分)。 在這個(gè)例子中,我將在Google Cloud上啟動(dòng)一個(gè)Kubernetes集群,并打開(kāi)Monitoring and Service Mesh,并在其上部署Spring Boot Spotguide。 群集創(chuàng)建是我們的spotguide
向?qū)У囊徊糠?,但是,因?yàn)?code>Service Mesh是Pipeline中的一個(gè)相對(duì)較新的功能,我們不能(迄今為止)從spotguide
的流程中啟用它, 所以我們必須事先創(chuàng)建集群。
我在這個(gè)視頻中記錄了這些步驟:
一旦你的Spring Boot容器
和MySQL
服務(wù)器啟動(dòng)并運(yùn)行,你就可以從Spotguid 總覽打開(kāi)演示程序。這是一個(gè)演示應(yīng)用程序,是典型的Spring Web
應(yīng)用程序。我們已經(jīng)創(chuàng)建了一個(gè)GitHub
代碼庫(kù),你可以在里面找到示意代碼(就像我們的其他spotguides
一樣)。默認(rèn)情況下,應(yīng)用程序URL將僅返回運(yùn)行狀況檢查狀態(tài),該狀態(tài)連接到Kubernetes
活動(dòng)和準(zhǔn)備情況檢查。然后,JVM指標(biāo)將暴露給Prometheus,并且repo將集成到我們的CI/CD流中,因此,一旦您提交業(yè)務(wù)邏輯,它將自動(dòng)部署到集群。在這里閱讀更多關(guān)于我們的spotguides。
您可以從群集列表或詳細(xì)信息頁(yè)面下載Kubernetes
配置,以便稍后從本地計(jì)算機(jī)獲取對(duì)群集的kubectl
訪問(wèn)權(quán)限。
我正在使用hey
工具(go get -u github.com/rakyll/hey
)來(lái)生成針對(duì)Spring應(yīng)用程序的負(fù)載;下面的命令將每秒發(fā)出50個(gè)請(qǐng)求
,總計(jì)10000
個(gè)請(qǐng)求:
hey -n 10000 -q 50 https://spring-boot-custom-metrics-demo.sancyx5g25.sancyx.beta.banzaicloud.io/actuator/health/kubernetes
現(xiàn)在,打開(kāi)監(jiān)控(我們的Spotguide摘要或群集詳細(xì)信息頁(yè)面中提供的鏈接)以查看可用的指標(biāo)并確定您的Prometheus查詢。 因?yàn)槲覀儐⒂昧薙ervice Mesh,所有網(wǎng)絡(luò)通信都將通過(guò)Envoy代理,將指標(biāo)發(fā)送到Istio遙測(cè)服務(wù),該服務(wù)由Prometheus抓取。
我將基于我的示例,查詢基于istio_requests_total指標(biāo),該指標(biāo)與Spring容器相關(guān):
sum(rate(istio_requests_total{destination_service="spring-boot-custom-metrics-demo-spotguide-spring-boot.default.svc.cluster.local",destination_service_name="spring-boot-custom-metrics-demo-spotguide-spring-boot",destination_service_namespace="default",destination_workload="spring-boot-custom-metrics-demo-spotguide-spring-boot"}[1m]))
請(qǐng)務(wù)必添加相應(yīng)的標(biāo)簽過(guò)濾器,以便專門(mén)選擇與您的pod/部署相關(guān)的指標(biāo)。
從部署列表頁(yè)面上的Horizontal Pod Autoscaler菜單中選擇spring-boot-custom-metrics-demo-spotguide-spring-boot部署,以訪問(wèn)HPA Edit頁(yè)面。 在那里,您可以通過(guò)輸入自定義指標(biāo)或查詢的名稱來(lái)設(shè)置cpu,內(nèi)存和自定義指標(biāo)。
現(xiàn)在,如果您在更長(zhǎng)的時(shí)間內(nèi)生成另一個(gè)負(fù)載(50個(gè)請(qǐng)求/秒),則應(yīng)在屬于部署的HPA中增加副本計(jì)數(shù):
hey -n 50000 -q 50 https://spring-boot-custom-metrics-demo.sancyx5g25.sancyx.beta.banzaicloud.io/actuator/health/kubernetes ... kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE spring-boot-custom-metrics-demo-spotguide-spring-boot Deployment/spring-boot-custom-metrics-demo-spotguide-spring-boot 245866m/40 1 10 7 80s
加載結(jié)束后,副本數(shù)將慢慢減少到默認(rèn)的最小值:
kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE spring-boot-custom-metrics-demo-spotguide-spring-boot Deployment/spring-boot-custom-metrics-demo-spotguide-spring-boot 266m/40 1 10 1 32m
讓我們深入了解使用Pipeline UI向部署添加自定義指標(biāo)時(shí)幕后發(fā)生的情況。 這個(gè)流程非常類似于資源指標(biāo),您可能會(huì)從之前的一系列帖子中熟悉這些指標(biāo),但是現(xiàn)在,讓我們關(guān)注與自定義指標(biāo)相關(guān)的API。
Pipeline UI使用HPA API創(chuàng)建/更新指標(biāo):
PUT {{pipeline_url}}/api/v1/orgs/:orgId/clusters/:clusterId/hpa { "scaleTarget": "example-deployment-name", "minReplicas": 1, "maxReplicas": 10, "customMetrics": { "customMetricName": { "query": "sum({kubernetes_pod_name=~\"^example-deployment-name-pod.*\",__name__=~\"example-metric-name\"})", "targetAverageValue": "100" } } }
如果要指定絕對(duì)值,可以使用targetValue
而不是targetAverageValue
。 不同之處在于,targetAverageValue
使用當(dāng)前pod副本計(jì)數(shù)對(duì)獲取的度量值進(jìn)行平均。
Pipeline實(shí)際上做的是為您的部署添加以下注釋:
hpa.autoscaling.banzaicloud.io/maxReplicas=10 hpa.autoscaling.banzaicloud.io/minReplicas=1 prometheus.customMetricName.hpa.autoscaling.banzaicloud.io/query=sum({kubernetes_pod_name=~\"^example-deployment-name-pod.*\",__name__=~\"example-metric-name\"})
所有這些都是通過(guò)HPA operator實(shí)現(xiàn)的,它根據(jù)部署注釋管理HPA資源。 Pipeline在群集創(chuàng)建完成后,通過(guò)一個(gè)post hook,部署HPA operator,然后,如果metrics.api
尚未注冊(cè),則部署kube-metrics-adapter
和metrics-server
。 此過(guò)程可能會(huì)有所不同,具體取決于您的云提供商和K8s版本,這些版本可能已安裝了某些功能。在我們的例子中,新創(chuàng)建的HPA對(duì)象將如下所示:
apiVersion: v1 items: - apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: annotations: ... autoscaling.alpha.kubernetes.io/current-metrics: '[{"type":"Object","object":{"target":{"kind":"Pod","name":"example-deployment-name-customMetricName","apiVersion":"v1"},"metricName":"customMetricName","currentValue":"222m"}}]' autoscaling.alpha.kubernetes.io/metrics: '[{"type":"Object","object":{"target":{"kind":"Pod","name":"example-deployment-name-customMetricName","apiVersion":"v1"},"metricName":"customMetricName","targetValue":"40"}}]' metric-config.object.customMetricName.prometheus/per-replica: "true" metric-config.object.customMetricName.prometheus/query: sum({kubernetes_pod_name=~\"^example-deployment-name-pod.*\",__name__=~\"example-metric-name\"}) ... spec: maxReplicas: 10 minReplicas: 1 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: example-deployment-name status: currentReplicas: 1 desiredReplicas: 1 kind: List metadata: resourceVersion: "" selfLink: ""
請(qǐng)注意,自定義度量標(biāo)準(zhǔn)是Object
類型,并綁定到名為example-deployment-name-customMetricName
的Pod資源。 Kube-metrics-adapter
也使用注釋查詢來(lái)獲取度量值,該值在以下端點(diǎn)公開(kāi)/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/example-deployment-name -customMetricName/customMetricName
,并且它正是HPA控制器將要查找的位置:
$ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/*/customMetricName" | jq . { "kind": "MetricValueList", "apiVersion": "custom.metrics.k8s.io/v1beta1", "metadata": { "selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/%2A/customMetricName" }, "items": [ { "describedObject": { "kind": "Pod", "namespace": "default", "name": "example-deployment-name-customMetricName", "apiVersion": "v1" }, "metricName": "customMetricName", "timestamp": "2019-03-13T20:23:32Z", "value": "222m" } ] }
到此,關(guān)于“怎么自定義Istio指標(biāo)實(shí)現(xiàn)Pod水平自動(dòng)縮放以及自動(dòng)伸縮Spring Boot”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
標(biāo)題名稱:怎么自定義Istio指標(biāo)實(shí)現(xiàn)Pod水平自動(dòng)縮放以及自動(dòng)伸縮SpringBoot
標(biāo)題URL:http://aaarwkj.com/article32/gjgjpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷、定制網(wǎng)站、網(wǎng)站設(shè)計(jì)、面包屑導(dǎo)航、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)