容器監(jiān)控實(shí)踐—Prometheus部署方案

一.單獨(dú)部署

二.在K8S中部署

如果在Kubernetes中部署Prometheus,可以使用prometheus in kubernetes,含exporter、grafana等組件。

安裝方式:

kubectl apply \
  --filename https://raw.githubusercontent.com/giantswarm/kubernetes-prometheus/master/manifests-all.yaml

卸載方式:

kubectl delete namespace monitoring

該方式為大多數(shù)用戶和云廠商使用的方式,可以基于Prometheus的服務(wù)發(fā)現(xiàn):在annotation中設(shè)置prometheus.io/scrape為true,就可以把K8S的所有服務(wù)都加入到監(jiān)控中,但在使用的過程中會(huì)有一些問題:

  • 1.如果增加了新的exporter,如nginx-exporter,需要修改prometheus配置并重啟
  • 2.服務(wù)本身和監(jiān)控配置沒有分離
  • 3.監(jiān)控集群多實(shí)例的狀態(tài)不好管理
  • 4.報(bào)警配置也包含在prometheus的配置中,監(jiān)控與報(bào)警沒有分離,添加規(guī)則麻煩

以上問題一般的處理方式為:在prometheus上加一個(gè)控制臺(tái),來動(dòng)態(tài)配置target、報(bào)警規(guī)則,并向后端server發(fā)起修改、重啟操作。同時(shí)有權(quán)限控制、日志審計(jì)、整體配置過期時(shí)間等功能。

但如果使用了Prometheus Operator,就可以將以上大多數(shù)操作抽象為k8s中的資源提交、修改,減少上層封裝的工作量。

三.Prometheus Operator部署

Prometheus-Operator是一套為了方便整合prometheus和kubernetes的開源方案,使用Prometheus-Operator可以非常簡(jiǎn)單的在kubernetes集群中部署Prometheus服務(wù),用戶能夠使用簡(jiǎn)單的聲明性配置來配置和管理Prometheus實(shí)例,這些配置將響應(yīng)、創(chuàng)建、配置和管理Prometheus監(jiān)控實(shí)例。

  • 官方地址:https://github.com/coreos/prometheus-operator
  • 目前狀態(tài):beta狀態(tài),還不夠完整,但向后兼容。將成為趨勢(shì)
  • 前置條件:要求k8s的版本>=1.8.0(應(yīng)該是因?yàn)閙etric api和CRD支持的限制)

Operator的核心思想是將Prometheus的部署與它監(jiān)控的對(duì)象的配置分離,做到部署與監(jiān)控對(duì)象的配置分離之后,就可以輕松實(shí)現(xiàn)動(dòng)態(tài)配置。使用Operator部署了Prometheus之后就可以不用再管Prometheus Server了,以后如果要添加監(jiān)控對(duì)象或者添加告警規(guī)則,只需要編寫對(duì)應(yīng)的ServiceMonitor和Prometheus資源就可以,不用再重啟Prometheus服務(wù),Operator會(huì)動(dòng)態(tài)的觀察配置的改動(dòng),并將其生成為對(duì)應(yīng)的prometheus配置文件其中Operator可以部署、管理Prometheus Service

image

四種CRD作用如下:

  • Prometheus: 由 Operator 依據(jù)一個(gè)自定義資源kind: Prometheus類型中,所描述的內(nèi)容而部署的 Prometheus Server 集群,可以將這個(gè)自定義資源看作是一種特別用來管理Prometheus Server的StatefulSets資源。

  • ServiceMonitor: 一個(gè)Kubernetes自定義資源(和kind: Prometheus一樣是CRD),該資源描述了Prometheus Server的Target列表,Operator 會(huì)監(jiān)聽這個(gè)資源的變化來動(dòng)態(tài)的更新Prometheus Server的Scrape targets并讓prometheus server去reload配置(prometheus有對(duì)應(yīng)reload的http接口/-/reload)。而該資源主要通過Selector來依據(jù) Labels 選取對(duì)應(yīng)的Service的endpoints,并讓 Prometheus Server 通過 Service 進(jìn)行拉?。ɡ┲笜?biāo)資料(也就是metrics信息),metrics信息要在http的url輸出符合metrics格式的信息,ServiceMonitor也可以定義目標(biāo)的metrics的url。

  • Alertmanager:Prometheus Operator 不只是提供 Prometheus Server 管理與部署,也包含了 AlertManager,并且一樣通過一個(gè) kind: Alertmanager 自定義資源來描述信息,再由 Operator 依據(jù)描述內(nèi)容部署 Alertmanager 集群。

  • PrometheusRule:對(duì)于Prometheus而言,在原生的管理方式上,我們需要手動(dòng)創(chuàng)建Prometheus的告警文件,并且通過在Prometheus配置中聲明式的加載。而在Prometheus Operator模式中,告警規(guī)則也編程一個(gè)通過Kubernetes API 聲明式創(chuàng)建的一個(gè)資源.告警規(guī)則創(chuàng)建成功后,通過在Prometheus中使用想servicemonitor那樣用ruleSelector通過label匹配選擇需要關(guān)聯(lián)的PrometheusRule即可。

安裝方式:

prometheus的target列表:

image

grafana的自帶監(jiān)控圖列表:

image
image

常見問題:

因?yàn)橐猳perator中要支持聚合api,在某些版本的集群上可能需要一些配置,如下:


cfssl gencert -ca=/etc/kubernetes/pki/ca.pem -ca-key=/etc/kubernetes/pki/ca-key.pem -config=/etc/kubernetes/pki/ca-config.json -profile=jpaas metrics-server-csr.json | cfssljson -bare metrics-server


{
  "CN": "aggregator",
  "host": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "cloudnative"
    }
  ]
}
  • 配置master組件參數(shù),以支持metric-server
vim /etc/systemd/system/kube-apiserver.service

--requestheader-client-ca-file=/etc/kubernetes/pki/ca.pem \
--requestheader-allowed-names="aggregator" \
--requestheader-extra-headers-prefix="X-Remote-Extra-" \
--requestheader-group-headers=X-Remote-Group \
--requestheader-username-headers=X-Remote-User \
--proxy-client-cert-file=/etc/kubernetes/pki/metrics-server.pem \
--proxy-client-key-file=/etc/kubernetes/pki/metrics-server-key.pem \
--runtime-config=api/all=true \
--enable-aggregator-routing=true \


systemctl daemon-reload
systemctl restart kube-apiserver.service
systemctl status kube-apiserver.service


vim /etc/systemd/system/kube-controller.service
--horizontal-pod-autoscaler-use-rest-clients=true
systemctl daemon-reload
systemctl restart kube-controller.service
systemctl status kube-controller.service
  • 啟動(dòng)成功后,prometheus的target中,kubelet沒有值,401報(bào)錯(cuò)
vim /etc/systemd/system/kubelet.service

--authentication-token-webhook=true
--authorization-mode=Webhook

systemctl daemon-reload

systemctl restart kubelet.service

參考文檔:

本文為容器監(jiān)控實(shí)踐系列文章,完整內(nèi)容見:container-monitor-book

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 Prometheus是什么 摘自Prometheus官網(wǎng): From metrics to insightPo...
    曉神XO閱讀 1,728評(píng)論 0 2
  • ########文章是對(duì)官網(wǎng)給出的文檔做了翻譯-_-以及實(shí)操后的個(gè)人理解所得,若有存在不足或者不同之處還望各位大神...
    Feel_狗煥閱讀 85,543評(píng)論 2 20
  • 系統(tǒng)架構(gòu)圖 1.x版本的Prometheus的架構(gòu)圖為: 目前Prometheus版本為2.7,架構(gòu)圖為: Pro...
    徐亞松_v閱讀 10,730評(píng)論 0 8
  • 一、背景 Kubernetes是目前最為流行、成為事實(shí)標(biāo)準(zhǔn)的容器集群管理平臺(tái),為容器化應(yīng)用提供了集群化部署運(yùn)行、自...
    JFrog閱讀 5,409評(píng)論 0 1
  • 天上的街市 郭沫若 遠(yuǎn)遠(yuǎn)的街燈明了,好像閃著無數(shù)的明星。 天上的明星現(xiàn)了,好像點(diǎn)著無數(shù)的街燈。 我想那縹...
    育吉yuji閱讀 163評(píng)論 0 1

友情鏈接更多精彩內(nèi)容