日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

asp.net core程序在k8s中基于rabbitmq队列消息数的HPA实践!

發布時間:2023/12/4 asp.net 77 豆豆
生活随笔 收集整理的這篇文章主要介紹了 asp.net core程序在k8s中基于rabbitmq队列消息数的HPA实践! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

最近一段時間,陸陸續續的把手里頭項目都遷移到了k8s中,期間遇到很多的坑,并且也學到了許多k8s的知識(從0-1),大家都知道k8s中的一大特性是自動擴容,對此結合自己的業務發現很是有“用武之地”,我有個業務,是向消息隊列中插入消息,然后.net core console app進行消費,但是我這個業務有個特點,要么沒有消息生產,要么就是有一大批消息產生。在引用HPA之前,我不得不提前啟動“合適數量”的pod(1個pod多個消費者容器)來消費消息,要不然業務方要叫了。但是作為有“潔癖”的開發者,我不想相同的容器有太多的閑置,無所事事,又占用資源。所以我們需要借助HPA來實現自動伸縮擴容,消息多的時候,自動擴容;消息少的時候,自動縮容。

前期準備:

  • 要有一個k8s集群(我是通過kubeadm搭建的3master+N node的集群 1.18.2)

  • 有一個rabbitmq實例3.8.x

  • rabbitmq_exporter:一個通過轉化mq:15672接口數據,以metrics接口暴露出來的exporter

  • kube-prometheus:一個將prometheus全家桶集合安裝的開源項目

  • 大體實現方向:

    將rabbitmq的數據指標,以metrics接口的形式,暴露給prometheus server;然后再promethus中通過添加record rule規則來自定義你的隊列指標;然后再promethus adapter中添加一條rule來將之前的指標轉化成k8s api所能識別的接口;最后在k8s中定義HPA去監測prometheus adapter service暴露的轉化好的接口來動態伸縮。

    第一步:暴露rabbitmq數據指標

    • rabbitmq官網中monitor一節中有提到它有一個插件是給pormetheus用的,但是我看了下用起來不方便,達不到效果,遂用下面的這個開源項目。

    • rabbitmq_exporter這個項目它sample中使用的是直接docker run去啟動容器,來進行mq數據指標的暴露,但是你最好把他運行在k8s中,方便管理。

    • 準備一個yaml文件,將rabbitmq exporter運行在k8s集群中,并以service的形式,暴露給k8s中安裝的prometheus server去抓取

    • rabbitmq_exporter.yaml

    • 然后在k8s master中創建這個yaml: kubectl apply –f rabbitmq_exporter.yaml

    • 看到如下內容代表部署成功了:

    • 我們看看39419端口暴露的metrics暴露的接口數據長什么樣:

      • 我們先用kubectl exec命令隨便進入一個容器,在容器內部訪問上面的svc ip + port

      • 然后訪問我們上面的svc: curl 10.110.14.151:39419/metrics | grep rabbitmq_queue_messages{

      • 看到有圖片中的數據,就代表你rabbitmq exporter搭建成功了,否則的話查看下日志解決下。

    • 至此,k8s集群中已經存在一個這樣的svc接口(10.110.14.151:39419/metrics)他只能在k8s集群內部訪問,他暴露的metrics數據中,就包含了隊列中消息的數量。

    第二步:使rabbitmq metrics指標能夠被prometheus server所定時抓取

    • 安裝prometheus監控全家桶

      • 先把原項目clone下來: git conle https://github.com/coreos/kube-prometheus.git

      • manifests:這個文件夾里放的全都是prometheus所需資源清單文件

      • example.jsonnet:這個文件是生成manifests文件夾的引導文件

      • 理論上,你git clone下來的mainfests文件夾,可以直接用的,但是需要做下調整,接下來我通過example.jsonnet來重新編譯生成manifests資源清單

        • 參考于:https://github.com/coreos/kube-prometheus#compiling

        • 為了避免干擾,先將mainfests文件夾刪除。

        • 我們先修改example.jsonnet文件,讓其按照我的要求生成mainfests資源清單:

        • 在項目目錄下,先執行(第一次會比較慢,大概10來分鐘吧,或者失敗,請重試!):

    docker run --rm -v $(pwd):$(pwd) --workdir $(pwd) quay.io/coreos/jsonnet-ci jb update
    • 然后再執行:

    • docker run --rm -v $(pwd):$(pwd) --workdir $(pwd) quay.io/coreos/jsonnet-ci ./build.sh example.jsonnet
    • 等執行好了,我們能看到新的mainfests文件夾已經生成好了。

    • 安裝:kubectl apply –f mainfests/setup/.

    • 安裝:kubectl apply –f mainfests/.

    • 看下安裝好了之后,所啟動的svc有哪些

      • 3個UI的組件,之所以是nodeport(可以直接外網通過 主機ip+端口進行訪問),是因為上面的jsonnet文件。請詳細看下上面圖片中的備注

    • 至此,全家桶不出意外的話,應該都安裝完成了。

    • 讓prometheus server可以抓取的到rabbitmq metrics指標

      • 參考資料:https://github.com/coreos/prometheus-operator/blob/master/Documentation/additional-scrape-config.md

      • 創建prometheus-additional.yaml文件用于配置rabbitmq metrics job

        prometheus-additional.yaml

      • 執行:kubectl create secret generic additional-scrape-configs --from-file=prometheus-additional.yaml -n monitoring

      • 驗證:

      • 然后修改:manifests/prometheus-prometheus.yaml

      • 執行:kubectl apply -f manifests/prometheus-prometheus.yaml

      • 此時prometheus server并沒有抓取rabbitmq metrics,需要重新啟動下,以加載到我們上述的新target

      • 最后我們看下UI,是否成功添加target

      • graph中,也能看到rabbitmq_queue_messages指標了

      第三步:使用prometheus-adapter來讓k8s能夠訪問的到自定義的資源指標

      • 上面全家桶中已經包含了adapter,所以不需要再安裝了,推薦實戰的小伙伴,仔細看下這個全家桶項目doc。

      • 首先,先確保k8s中custom.metrics.k8s.io自定義指標接口可用

      • 雖然你能在graph中看到rabbitmq_queue_messages指標,但是這個指標也只有prometheus自己認得,k8s api server并不認得。

        • 我們得添加一條prometheus rule,參考資料:點我

        • 其實我們在上面已經添加了一條,并且已經運行起來了,監測vhost為xxxx,queue為xxxx的隊列。

        • labels必選要打上:

      • 然后我們給prometheus-adapter添加一條rule用于映射到上面prometheus中的record rule:enriched_rabbitmq_queue_messages

        • 參考資料:請戳我,看最后那個人的留言,最佳解釋

        • 那我們怎么添加呢,我們先看看prometheus-adapter容器的配置文件(rule默認都有一個配置文件維護的)

        • 先看下adapter的描述:kubectl describe pod prometheus-adapter-5cdcdf9c8d-5bq5p

        • 發現他把配置信息都放到configmap里,那換個角度,只要我們能將給prometheus-adapter添加的rule,追加到這個configmap里面,理論上就可以實現動態增加了。

        • 其實adapter所有的配置都在manifests/prometheus-adapter-configMap.yaml

        • 記得執行讓它生效:kubectl apply -f manifests/prometheus-adapter-configMap.yaml

        • 等待幾十秒后,驗證下:

        • 至此自定義metrics指標已經成功,實現了prometheus server不停的監測某個隊列的消息數,然后k8s api通過prometheus adapter能夠訪問到這個指標,這樣后面的HPA就簡單的多了。

      第四步:定義HPA

      ?

      秒殺+口令「k8sgogogo」到手僅?¥69

    總結

    以上是生活随笔為你收集整理的asp.net core程序在k8s中基于rabbitmq队列消息数的HPA实践!的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。