Prometheus是CNCF基金會(huì)繼Kubernetes之后第二個(gè)正式項(xiàng)目,是一個(gè)開(kāi)源的完整監(jiān)控報(bào)警解決方案,無(wú)外部依賴(lài),單機(jī)部署十分簡(jiǎn)單,可以用各種exporter進(jìn)行擴(kuò)展,支持自定義監(jiān)控,并且grafana原生支持Prometheus數(shù)據(jù)源,可以做出非常好看的監(jiān)控界面,定制化程度非常高。
Prometheus可以與kubernetes無(wú)縫集成,社區(qū)維護(hù)了一個(gè)prometheus-operator來(lái)幫助Prometheus在k8s中
自動(dòng)化部署,簡(jiǎn)化配置流程,提供自動(dòng)發(fā)現(xiàn)服務(wù)并加入監(jiān)控的能力。
prometheus-operator的使用方法對(duì)小白并不友好,用戶(hù)需要理解kubernetes的CRD及了解prometheus-operator提供的CRD的作用和使用方法。這里比較推薦使用kube-prometheus,對(duì)于想一鍵部署整套監(jiān)控組件的小伙伴非常有用。
1. 用kube-prometheus部署prometheus
首先下載kube-prometheus項(xiàng)目的源碼到集群的物理機(jī)上,解壓后進(jìn)入文件夾執(zhí)行
kubectl create -f manifests/setup
until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done
kubectl create -f manifests/
如果鏡像都能成功拉取下來(lái)的話(huà),部署到這里就結(jié)束了,非常簡(jiǎn)單,并且已經(jīng)自動(dòng)配置好了集群基礎(chǔ)組件的監(jiān)控報(bào)警和grafana監(jiān)控圖表,對(duì)于不能訪(fǎng)問(wèn)外網(wǎng)的同學(xué)可以將yaml中用到的鏡像推送到私有倉(cāng)庫(kù)中并替換掉yaml中對(duì)應(yīng)的鏡像地址再執(zhí)行以上的命令。
kube-prometheus是一個(gè)組件集合,它包括了prometheus-operator、alertmanager、node-exporter、
k8s-prometheus-adapter、kube-state-metrics、grafana,并且包含了他們的常用配置且將他們有機(jī)結(jié)合起來(lái)組織成一套監(jiān)控報(bào)警系統(tǒng),如果我們自己去一個(gè)個(gè)部署配置這些組件的話(huà)會(huì)將會(huì)花費(fèi)很大的精力和時(shí)間。
需要注意的一點(diǎn)是如果我們的集群apiserver是物理機(jī)部署的話(huà)需要在kube-state-metrics-deployment.yaml
加入hostNetwork: true
否則apiserver部分監(jiān)控不到。
部署成功后可以在集群中看到以下組件:
如果你了解k8s的CRD的話(huà)也可以在manifests文件夾里的yaml上直接定制一些配置,比如修改prometheus的數(shù)據(jù)保留時(shí)間:
apiVersion: monitoring.coreos.com/v1
kind: Prometheus # prometheus-operator 定義的 CRD
metadata:
labels:
prometheus: k8s
name: k8s
namespace: monitoring
spec:
retention: 10d # 數(shù)據(jù)保留時(shí)間 10天,默認(rèn)24小時(shí)
alerting:
alertmanagers:
- name: alertmanager-main
namespace: monitoring
port: web
baseImage: harbor.58corp.com/wcs/prom/prometheus
nodeSelector:
beta.kubernetes.io/os: linux
replicas: 2
resources:
requests:
memory: 400Mi
ruleSelector:
matchLabels:
prometheus: k8s
role: alert-rules
securityContext:
fsGroup: 2000
runAsNonRoot: true
runAsUser: 1000
serviceAccountName: prometheus-k8s
serviceMonitorNamespaceSelector: {}
serviceMonitorSelector: {}
version: v2.21.0
更多選項(xiàng)可以參考 https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md