Prometheus是CNCF基金会继Kubernetes之后第二个正式项目,是一个开源的完整监控报警解决方案,无外部依赖,单机部署十分简单,可以用各种exporter进行扩展,支持自定义监控,并且grafana原生支持Prometheus数据源,可以做出非常好看的监控界面,定制化程度非常高。
Prometheus可以与kubernetes无缝集成,社区维护了一个prometheus-operator来帮助Prometheus在k8s中
自动化部署,简化配置流程,提供自动发现服务并加入监控的能力。
prometheus-operator的使用方法对小白并不友好,用户需要理解kubernetes的CRD及了解prometheus-operator提供的CRD的作用和使用方法。这里比较推荐使用kube-prometheus,对于想一键部署整套监控组件的小伙伴非常有用。
1. 用kube-prometheus部署prometheus
首先下载kube-prometheus项目的源码到集群的物理机上,解压后进入文件夹执行
kubectl create -f manifests/setup
until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done
kubectl create -f manifests/
如果镜像都能成功拉取下来的话,部署到这里就结束了,非常简单,并且已经自动配置好了集群基础组件的监控报警和grafana监控图表,对于不能访问外网的同学可以将yaml中用到的镜像推送到私有仓库中并替换掉yaml中对应的镜像地址再执行以上的命令。
kube-prometheus是一个组件集合,它包括了prometheus-operator、alertmanager、node-exporter、
k8s-prometheus-adapter、kube-state-metrics、grafana,并且包含了他们的常用配置且将他们有机结合起来组织成一套监控报警系统,如果我们自己去一个个部署配置这些组件的话会将会花费很大的精力和时间。
需要注意的一点是如果我们的集群apiserver是物理机部署的话需要在kube-state-metrics-deployment.yaml
加入hostNetwork: true
否则apiserver部分监控不到。
部署成功后可以在集群中看到以下组件:
image.png如果你了解k8s的CRD的话也可以在manifests文件夹里的yaml上直接定制一些配置,比如修改prometheus的数据保留时间:
apiVersion: monitoring.coreos.com/v1
kind: Prometheus # prometheus-operator 定义的 CRD
metadata:
labels:
prometheus: k8s
name: k8s
namespace: monitoring
spec:
retention: 10d # 数据保留时间 10天,默认24小时
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
更多选项可以参考 https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md
网友评论