安装 kube-prometheus
2022年10月24日
k8s 下 prometheus 的安装部署
安装 kube-prometheus
Github 地址 此处克隆的是 release-0.4 版本的,yaml 文件如下
git clone -b release-0.4 --single-branch https://github.com/prometheus-operator/kube-prometheus.git
# 该目录下定义好了部署的 yaml
cd ./kube-prometheus/manifests
ls
# 其中
# alertmanager-alertmanager.yaml 定义了 alertmanager
# prometheus-prometheus.yaml 定义了 prometheus server端
# prometheus-rules.yaml 定义了 prometheus 的基本规则
# node-exporter* 采集宿主机的监控数据的(比zabbix更详细)
# grafana-deployment.yaml 继承了很多 dashboard,通过 ConfigMap 注入
# grafana-dashboardDefinitions.yaml 定义了很多 dashboard,都放到了 ConfigMap 里面
提示
使用容器不方便,经常会改里面的模板、创建模板等没有存储会很复杂
- 若容器部署,新增一个模板就需要修改上述定义 dashboard 并挂载到 configMap 中,grafana 才能读取到
- 有多个 configMap ,因为 etcd 默认限制大小为 1.5 Mib(Raft消息限制 ) 过大的配置文件会影响其性能(虽然可修改 )
- 加一个模板就需要创建一个 configMap 然后在
grafana-deployment.yaml
中的 volumes: 下,挂载一大堆,新增也需要沿用这种方式挂载
因此建议 grafana 最好挂个存储(数据目录),若没有存储的话最好使用宿主机部署
- 这样可以直接上传一个 dashboard 定义到宿主机或存储中
- grafana 是个界面展示,挂了无妨,但要在 grafana 上做告警,也不能挂
- 有 alertmanager 的告警,就不需要用 grafana 的告警了,更为灵活
部署 prometheus、grafana 和 alertmanager
# 进入 setup 目录下安装 operator
cd ./kube-prometheus/manifests/setup
# 安装该目录下所有 yaml 文件
$ kubectl create -f .
customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com created
...
clusterrolebinding.rbac.authorization.k8s.io/prometheus-operator created
deployment.apps/prometheus-operator created
service/prometheus-operator created
serviceaccount/prometheus-operator created
# 查看运行,此时已经创建好了 operator
$ kubectl -n monitoring get po
NAME READY STATUS RESTARTS AGE
prometheus-operator-5f75d76f9f-zkzf6 1/1 Running 0 1m20s
# 返回上级,然后创建 prometheus 的集群
cd ..
ls
# 最好将 alertmanager 中的 副本改为 3 个,因为生成环境中 3 个会通过 POSIX 协议通信,而不会发3次告警
# vim alertmanager-alertmanager.yaml
# replicas: 3
$ kubectl create -f .
# 查看运行
$ kubectl -n monitoring get po -owide
NNAME READY STATUS RESTARTS AGE
alertmanager-main-0 0/2 ContainerCreating 0 108s
grafana-58dc7468d7-wmp2p 0/1 Running 0 106s
kube-state-metrics-765c7c7f95-xn6kh 0/3 ContainerCreating 0 104s
node-exporter-99kq7 0/2 ContainerCreating 0 104s
node-exporter-b9pfp 2/2 Running 0 104s
node-exporter-qrdmv 0/2 ContainerCreating 0 104s
prometheus-adapter-5cd5798d96-72fsl 1/1 Running 0 102s
prometheus-k8s-0 0/3 ContainerCreating 0 98s
prometheus-k8s-1 0/3 ContainerCreating 0 98s
prometheus-operator-5f75d76f9f-zkzf6 1/1 Running 0 18m
查看 service 如下服务
$ kubectl -n monitoring get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
alertmanager-main ClusterIP 10.96.65.3 <none> 9093/TCP
...
grafana ClusterIP 10.109.31.26 <none> 3000/TCP
...
prometheus-k8s ClusterIP 10.105.151.175 <none> 9090/TCP
..
- alertmanager-main 用于查看当前告警有哪些、通知告警
- grafana 监控面板、展示数据
- prometheus-k8s 创建规则、校验、查询操作、target 等
使用 ingress 配置如上服务对应的域名(若没配置 ingress 先去配 ingress 的控制器 )
# 配置 ingress 如下
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: prom-ingresses
namespace: monitoring
spec:
rules:
- host: alert.test.com
http:
paths:
- backend:
serviceName: alertmanager-main
servicePort: 9093
path: /
- host: grafana.test.com
http:
paths:
- backend:
serviceName: grafana
servicePort: 3000
path: /
- host: prom.test.com
http:
paths:
- backend:
serviceName: prometheus-k8s
servicePort: 9090
path: /
status:
loadBalancer: {}
查看创建的 ingress
$ kubectl -n monitoring get ingress
NAME HOSTS ADDRESS PORTS AGE
prom-ingresses alert.test.com,grafana.test.com,prom.test.com 80 78s
修改 hosts 后即可访问域名,其中 grafana 的初始账户密码都为 admin
,登入后需修改(若没有持久化,每次重启都会还原,此处修改为 user@dev
备忘 )
192.168.3.172 alert.test.com prom.test.com grafana.test.com