日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

一篇學會用 KEDA 根據工作負載進行快速擴容

來源: 責編: 時間:2023-11-30 09:27:47 226觀看
導讀歷史問題眾所周知,Kubernetes 有個親生的 HPA 組件,在云原生早期,這個名義上的自動擴縮容的能力給 Kubernetes 贏得了不少掌聲。當然現在回頭看看,僅僅根據 CPU 和內存這樣“貧瘠”的指標,不論是用于判斷負載水平,還是用于

歷史問題

眾所周知,Kubernetes 有個親生的 HPA 組件,在云原生早期,這個名義上的自動擴縮容的能力給 Kubernetes 贏得了不少掌聲。當然現在回頭看看,僅僅根據 CPU 和內存這樣“貧瘠”的指標,不論是用于判斷負載水平,還是用于計算擴容目標,都不是很夠用的。這個階段里,HPA 的擴縮容效率也是廣受詬病的一個問題,在一個多級微服務調用的業務場景里,壓力是逐級傳遞的,下圖展示了一個常見情況:jZM28資訊網——每日最新資訊28at.com

jZM28資訊網——每日最新資訊28at.com

圖片圖片jZM28資訊網——每日最新資訊28at.com

jZM28資訊網——每日最新資訊28at.com

如上圖,用戶流量進入集群之后:jZM28資訊網——每日最新資訊28at.com

  1. 首先在 Deploy A 造成負載,指標變化迫使 Deploy A 擴容
  2. A 擴容之后,吞吐量變大,B 受到壓力,再次采集到指標變化,擴容 Deploy B
  3. B 吞吐變大,C ..

這個逐級傳遞的過程不僅緩慢,而且可以說是步步驚心——每一級的擴容都是直接被 CPU 或內存的飆高觸發的,被“沖垮”的可能性是普遍存在的。這種被動、滯后的方式,很明顯是有問題的。jZM28資訊網——每日最新資訊28at.com

推陳出新

造成 HPA 窘境的原因之一,就是“自掃門前雪”,每個 Pod 都只能根據自身負載情況來進行擴縮容決策。如果能夠直接根據業務流量的變化進行決策,并且將流量流經的所有微服務進行擴縮容,看起來情況就會好很多了。HPA 的自定義指標支持,給這個問題了一個可行的方案。該能力讓 HPA 可以用其它的指標來作為擴縮容的觸發器,例如我們可以用 Promethues 采集消息中間件的深度或者負載均衡器的隊列長度,作為一個更能如實反映業務流量的指標,直接用來觸發相關的多個微服務的擴縮容,如下圖所示:jZM28資訊網——每日最新資訊28at.com

圖片圖片jZM28資訊網——每日最新資訊28at.com

jZM28資訊網——每日最新資訊28at.com

在上圖中:jZM28資訊網——每日最新資訊28at.com

  1. Prometheus 采集消息隊列和負載均衡等更能反映業務流量的指標
  2. 使用 Prometheus Adapter 將 Promethues Metrics 轉換為 Kubernetes 的 Aggregated API
  3. HPA 使用自定義指標,同時對多個應用進行擴縮容。

這中間涉及到的 Prometheus Adapter,通過配置文件完成步驟 2 的轉換:jZM28資訊網——每日最新資訊28at.com

- seriesQuery: '{__name__=~"^container_.*_total",container!="POD",namespace!="",pod!=""}'  resources:    overrides:      namespace: {resource: "namespace"}      pod: {resource: "pod"}  seriesFilters:  # since this is a superset of the query above, we introduce an additional filter here  - isNot: "^container_.*_seconds_total$"  name: {matches: "^container_(.*)_total$"}  metricsQuery: "sum(rate(<<.Series>>{<<.LabelMatchers>>,container!="POD"}[2m])) by (<<.GroupBy>>)"

當然,完全可以自行實現 Aggregated API 來支持這種指標的采集和呈現工作。Prometheus 所提供的大量 Exporter 是吸引我們寫這種古怪語法的最大動力。jZM28資訊網——每日最新資訊28at.com

那么如果是 KEDA 的話,這個問題又如何呢?KEDA 提供了幾十個被稱為 Scaler 的東西,其中除了 Promethues 之外,還包括 Kafka、Redis、PostgreSQL 等多種選擇。所以在很多場景中,無需 Promethues,也能使用 Scaler 完成對輸入指標的讀取和判斷。下面用 KEDA 為例,看看這種伸縮方法的具體實現。jZM28資訊網——每日最新資訊28at.com

KEDA

假設一個容器化應用由多個工作負載組成:jZM28資訊網——每日最新資訊28at.com

  • Ingress:負責接收業務流量
  • Backend 1、Backend 2:負責處理 Ingress 發來的任務
  • Database:數據庫

我們希望達成的效果是 —— Ingress、Backend 1、Backend 2、Database,實例數量保持在 1:2:1.5:2 的關系,Keda 的大致流程如下圖所示:jZM28資訊網——每日最新資訊28at.com

圖片圖片jZM28資訊網——每日最新資訊28at.com

jZM28資訊網——每日最新資訊28at.com

首先使用 Helm 安裝 KEDA:jZM28資訊網——每日最新資訊28at.com

$ helm repo add kedacore https://kedacore.github.io/charts$ helm install keda kedacore/keda --namespace defaultNAME: kedaLAST DEPLOYED: Wed Nov 29 18:56:36 2023NAMESPACE: defaultSTATUS: deployedREVISION: 1...

隨便創建幾個工作負載,冒充微服務:jZM28資訊網——每日最新資訊28at.com

$ kubectl create deploy ingress --image=nginxdeployment.apps/ingress created$ kubectl create deploy backend1 --image=nginxdeployment.apps/backend1 created$ kubectl create deploy backend2 --image=nginxdeployment.apps/backend2 created$ kubectl create deploy database --image=nginxdeployment.apps/database created$ kubectl get pods | cut -d - -f 1 | grep -v keda | sort...backend1backend2databaseingress

運行成功后,我們可以看到,四個微服務,每個微服務都有一個實例。jZM28資訊網——每日最新資訊28at.com

按照剛才瞎掰的比例,編寫一個 ScaleObject:jZM28資訊網——每日最新資訊28at.com

apiVersion: keda.sh/v1alpha1kind: ScaledObjectmetadata:  name: bk1spec:  scaleTargetRef:    name: backend1  triggers:  - type: kubernetes-workload    metadata:       podSelector: 'app=ingress'      value: '0.5'---apiVersion: keda.sh/v1alpha1kind: ScaledObjectmetadata:  name: bk2spec:  scaleTargetRef:    name: backend2  triggers:  - type: kubernetes-workload    metadata:       podSelector: 'app=ingress'      value: '0.67'      ---apiVersion: keda.sh/v1alpha1kind: ScaledObjectmetadata:  name: dbspec:  scaleTargetRef:    name: database  triggers:  - type: kubernetes-workload    metadata:       podSelector: 'app=ingress'      value: '0.5'

上述代碼引入了 kubernetes-workload 類型的觸發器,他會監控 app=ingress 的容器,并對 scaleTargetRef 中提到的工作負載數量比例進行擴縮容。jZM28資訊網——每日最新資訊28at.com

提交到集群之后,會看到實例數量數量發生了變化:jZM28資訊網——每日最新資訊28at.com

$ kubectl get pods | cut -d - -f 1 | sort | uniq --count...   2 backend1   2 backend2   2 database   1 ingress   3 keda

我們把 Ingress 擴容到 2 實例,再次統計:jZM28資訊網——每日最新資訊28at.com

$ kubectl scale deployment ingress --replicas=2deployment.apps/ingress scaled$ kubectl get pods | cut -d - -f 1 | sort | uniq --count...   4 backend1   3 backend2   4 database   2 ingress   3 keda

可以看到,的確是按照我們設定的比例,同步產生了縮放。如果縮減 Ingress 服務實例數,幾分鐘之后,其它工作負載也會隨之縮容。jZM28資訊網——每日最新資訊28at.com

$ kubectl scale deployment ingress --replicas=1deployment.apps/ingress scaled$ kubectl get pods | cut -d - -f 1 | sort | uniq --count                                                         /...   2 backend1   2 backend2   2 database   1 ingress

結論

雖說云原生架構的復雜性問題越來越被強調,但是這一生態的宗旨應該還是沒有變化——用簡單的透明的手段解決復雜問題。jZM28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-35285-0.html一篇學會用 KEDA 根據工作負載進行快速擴容

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Git 難用?有救!

下一篇: useEffect 實踐案例之一

標簽:
  • 熱門焦點
  • MIX Fold3包裝盒泄露 新機本月登場

    小米的全新折疊屏旗艦MIX Fold3將于本月發布,近日該機的真機包裝盒在網上泄露。從圖上來看,新的MIX Fold3包裝盒在外觀設計方面延續了之前的方案,變化不大,這也是目前小米旗艦
  • 小米降噪藍牙耳機Necklace分享:聽一首歌 讀懂一個故事

    在今天下午的小米Civi 2新品發布會上,小米還帶來了一款新的降噪藍牙耳機Necklace,我們也在發布結束的第一時間給大家帶來這款耳機的簡單分享。現在大家能見到最多的藍牙耳機
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學習反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進行反混淆,尤其是使用自定義混淆器對其進行混淆時。什么是混
  • Automa-通過連接塊來自動化你的瀏覽器

    1、前言通過瀏覽器插件可實現自動化腳本的錄制與編寫,具有代表性的工具就是:Selenium IDE、Katalon Recorder,對于簡單的業務來說可快速實現自動化的上手工作。Selenium IDEKat
  • 之家push系統迭代之路

    前言在這個信息爆炸的互聯網時代,能夠及時準確獲取信息是當今社會要解決的關鍵問題之一。隨著之家用戶體量和內容規模的不斷增大,傳統的靠"主動拉"獲取信息的方式已不能滿足用
  • 東方甄選單飛:有些鳥注定是關不住的

    文/彭寬鴻編輯/羅卿東方甄選創始人俞敏洪帶隊的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一年多時間里,東方甄選要脫離抖音自立門戶的傳聞不絕于耳,&ldquo;7
  • 三星顯示已開始為AR設備研發硅基LED微顯示屏

    7月18日消息,據外媒報道,隨著蘋果首款頭顯產品Vision Pro在6月份正式推出,AR/VR/MR等頭顯產品也就將成為各大公司下一個重要的競爭領域,對顯示屏這一關
  • iQOO 11S新品發布會

    iQOO將在7月4日19:00舉行新品發布會,推出杭州亞運會電競賽事官方用機iQOO 11S。
  • OPPO K11樣張首曝:千元機影像“卷”得真不錯!

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
Top 主站蜘蛛池模板: 门头沟区| 丰宁| 岳阳市| 渭南市| 万全县| 务川| 宜兰市| 东明县| 梧州市| 绥中县| 延寿县| 西青区| 奎屯市| 灌云县| 阜康市| 竹山县| 海伦市| 阳东县| 仁布县| 菏泽市| 新津县| 舒城县| 西峡县| 张家界市| 嘉兴市| 新邵县| 韶山市| 德昌县| 普洱| 延安市| 云安县| 东安县| 景德镇市| 柘荣县| 班玛县| 宁强县| 平邑县| 惠州市| 民勤县| 巴青县| 南开区|