摘要:自定義指標由提供,由此可支持任意采集到的指標。文件清單的,收集級別的監(jiān)控數(shù)據(jù)監(jiān)控服務端,從拉數(shù)據(jù)并存儲為時序數(shù)據(jù)。本文為容器監(jiān)控實踐系列文章,完整內(nèi)容見
概述
上文metric-server提到,kubernetes的監(jiān)控指標分為兩種:
Core metrics(核心指標):從 Kubelet、cAdvisor 等獲取度量數(shù)據(jù),再由metrics-server提供給 Dashboard、HPA 控制器等使用。
Custom Metrics(自定義指標):由Prometheus Adapter提供API custom.metrics.k8s.io,由此可支持任意Prometheus采集到的指標。
核心指標只包含node和pod的cpu、內(nèi)存等,一般來說,核心指標作HPA已經(jīng)足夠,但如果想根據(jù)自定義指標:如請求qps/5xx錯誤數(shù)來實現(xiàn)HPA,就需要使用自定義指標了,目前Kubernetes中自定義指標一般由Prometheus來提供,再利用k8s-prometheus-adpater聚合到apiserver,實現(xiàn)和核心指標(metric-server)同樣的效果。
以下是官方metrics的項目介紹:
Resource Metrics API(核心api)
Heapster
Metrics Server
Custom Metrics API:
Prometheus Adapter
Microsoft Azure Adapter
Google Stackdriver
Datadog Cluster Agent
部署Prometheus可以采集其它各種指標,但是prometheus采集到的metrics并不能直接給k8s用,因為兩者數(shù)據(jù)格式不兼容,因此還需要另外一個組件(kube-state-metrics),將prometheus的metrics數(shù)據(jù)格式轉(zhuǎn)換成k8s API接口能識別的格式,轉(zhuǎn)換以后,因為是自定義API,所以還需要用Kubernetes aggregator在主API服務器中注冊,以便直接通過/apis/來訪問。
文件清單:
node-exporter:prometheus的export,收集Node級別的監(jiān)控數(shù)據(jù)
prometheus:監(jiān)控服務端,從node-exporter拉數(shù)據(jù)并存儲為時序數(shù)據(jù)。
kube-state-metrics:將prometheus中可以用PromQL查詢到的指標數(shù)據(jù)轉(zhuǎn)換成k8s對應的數(shù)
k8s-prometheus-adpater:聚合進apiserver,即一種custom-metrics-apiserver實現(xiàn)
開啟Kubernetes aggregator功能(參考上文metric-server)
k8s-prometheus-adapter的部署文件:
其中創(chuàng)建了一個叫做cm-adapter-serving-certs的secret,包含兩個值: serving.crt和serving.key,這是由apiserver信任的證書。kube-prometheus項目中的gencerts.sh和deploy.sh腳本可以創(chuàng)建這個secret
包括secret的所有資源,都在custom-metrics命名空間下,因此需要kubectl create namespace custom-metrics
以上組件均部署成功后,可以通過url獲取指標
基于自定義指標的HPA使用prometheus后,pod有一些自定義指標,如http_request請求數(shù)
創(chuàng)建一個HPA,當請求數(shù)超過每秒10次時進行自動擴容
apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: name: podinfo spec: scaleTargetRef: apiVersion: extensions/v1beta1 kind: Deployment name: podinfo minReplicas: 2 maxReplicas: 10 metrics: - type: Pods pods: metricName: http_requests targetAverageValue: 10
查看hpa
$ kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE podinfo Deployment/podinfo 899m / 10 2 10 2 1m
對pod進行施壓
#install hey $ go get -u github.com/rakyll/hey #do 10K requests rate limited at 25 QPS $ hey -n 10000 -q 5 -c 5 http://PODINFO_SVC_IP:9898/healthz
HPA發(fā)揮作用:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulRescale 5m horizontal-pod-autoscaler New size: 3; reason: pods metric http_requests above target Normal SuccessfulRescale 21s horizontal-pod-autoscaler New size: 2; reason: All metrics below target關(guān)于k8s-prometheus-adapter
其實k8s-prometheus-adapter既包含自定義指標,又包含核心指標,即如果按照了prometheus,且指標都采集完整,k8s-prometheus-adapter可以替代metrics server。
在1.6以上的集群中,k8s-prometheus-adapter可以適配autoscaling/v2的HPA
因為一般是部署在集群內(nèi),所以k8s-prometheus-adapter默認情況下,使用in-cluster的認證方式,以下是主要參數(shù):
lister-kubeconfig: 默認使用in-cluster方式
metrics-relist-interval: 更新metric緩存值的間隔,最好大于等于Prometheus 的scrape interval,不然數(shù)據(jù)會為空
prometheus-url: 對應連接的prometheus地址
config: 一個yaml文件,配置如何從prometheus獲取數(shù)據(jù),并與k8s的資源做對應,以及如何在api接口中展示。
config文件的內(nèi)容示例(參考文檔)
rules: - seriesQuery: "{__name__=~"^container_.*",container_name!="POD",namespace!="",pod_name!=""}" seriesFilters: [] resources: overrides: namespace: resource: namespace pod_name: resource: pod name: matches: ^container_(.*)_seconds_total$ as: "" metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>,container_name!="POD"}[1m])) by (<<.GroupBy>>) - seriesQuery: "{__name__=~"^container_.*",container_name!="POD",namespace!="",pod_name!=""}" seriesFilters: - isNot: ^container_.*_seconds_total$ resources: overrides: namespace: resource: namespace pod_name: resource: pod name: matches: ^container_(.*)_total$ as: "" metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>,container_name!="POD"}[1m])) by (<<.GroupBy>>) - seriesQuery: "{__name__=~"^container_.*",container_name!="POD",namespace!="",pod_name!=""}" seriesFilters: - isNot: ^container_.*_total$ resources: overrides: namespace: resource: namespace pod_name: resource: pod name: matches: ^container_(.*)$ as: "" metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>,container_name!="POD"}) by (<<.GroupBy>>)問題
為什么我看不到自定義的metric
檢查下config配置文件,是否有選擇你的metric
檢查下采集的信息是否正確,如foo{namespace="somens",deployment="bar"},foo這個名稱的數(shù)據(jù)來自于somens的命名空間+bar這個部署
啟動的時候加上--v=6,可以打出adapter實際的query信息
參考k8s-prometheus-adapter,可以實現(xiàn)自己的adapter,比如獲取已有監(jiān)控系統(tǒng)的指標,匯聚到api-server中,k8s-prometheus-adapter的實現(xiàn)邏輯會在后續(xù)文章中專門來講。
本文為容器監(jiān)控實踐系列文章,完整內(nèi)容見:container-monitor-book
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/28066.html
摘要:自定義指標由提供,由此可支持任意采集到的指標。文件清單的,收集級別的監(jiān)控數(shù)據(jù)監(jiān)控服務端,從拉數(shù)據(jù)并存儲為時序數(shù)據(jù)。本文為容器監(jiān)控實踐系列文章,完整內(nèi)容見 概述 上文metric-server提到,kubernetes的監(jiān)控指標分為兩種: Core metrics(核心指標):從 Kubelet、cAdvisor 等獲取度量數(shù)據(jù),再由metrics-server提供給 Dashboar...
摘要:出現(xiàn)后,新的監(jiān)控架構(gòu)將變成上圖的樣子核心流程黑色部分這是正常工作所需要的核心度量,從等獲取度量數(shù)據(jù),再由提供給控制器等使用。本文為容器監(jiān)控實踐系列文章,完整內(nèi)容見 概述 從 v1.8 開始,資源使用情況的監(jiān)控可以通過 Metrics API的形式獲取,具體的組件為Metrics Server,用來替換之前的heapster,heapster從1.11開始逐漸被廢棄。 Metrics-S...
摘要:出現(xiàn)后,新的監(jiān)控架構(gòu)將變成上圖的樣子核心流程黑色部分這是正常工作所需要的核心度量,從等獲取度量數(shù)據(jù),再由提供給控制器等使用。本文為容器監(jiān)控實踐系列文章,完整內(nèi)容見 概述 從 v1.8 開始,資源使用情況的監(jiān)控可以通過 Metrics API的形式獲取,具體的組件為Metrics Server,用來替換之前的heapster,heapster從1.11開始逐漸被廢棄。 Metrics-S...
摘要:方案匯總一開源方案采集展示報警二商業(yè)方案三云廠商騰訊云阿里云百度云華為云四主機監(jiān)控五日志監(jiān)控六服務監(jiān)控七存儲后端腦圖本文為容器監(jiān)控實踐系列文章,完整內(nèi)容見 概述 隨著越來越多的線上服務docker化,對容器的監(jiān)控、報警變得越來越重要,容器監(jiān)控有多種形態(tài),有些是開源的(如promethues),而另一些則是商業(yè)性質(zhì)的(如Weave),有些是集成在云廠商一鍵部署的(Rancher、谷歌云)...
摘要:方案匯總一開源方案采集展示報警二商業(yè)方案三云廠商騰訊云阿里云百度云華為云四主機監(jiān)控五日志監(jiān)控六服務監(jiān)控七存儲后端腦圖本文為容器監(jiān)控實踐系列文章,完整內(nèi)容見 概述 隨著越來越多的線上服務docker化,對容器的監(jiān)控、報警變得越來越重要,容器監(jiān)控有多種形態(tài),有些是開源的(如promethues),而另一些則是商業(yè)性質(zhì)的(如Weave),有些是集成在云廠商一鍵部署的(Rancher、谷歌云)...
閱讀 1099·2021-09-30 09:58
閱讀 2962·2021-09-09 11:55
閱讀 2071·2021-09-01 11:41
閱讀 1050·2019-08-30 15:55
閱讀 3415·2019-08-30 12:50
閱讀 3569·2019-08-29 18:37
閱讀 3352·2019-08-29 16:37
閱讀 2070·2019-08-29 13:00