K8S 监控方案
两种监控方案
1 | 1. cAdvisor+Heapster+InfluxDB+Grafana |
- 对于非容器化业务来说,像Zabbix,open-falcon已经在企业深入使用。
- 而Prometheus新型的监控系统的兴起来源容器领域,所以重点是放在怎么监控容器。随着容器化大势所趋,如果传统技术不随着改变,将会被淘汰,基础架构也会发生新的技术栈组合。
cAdvisor+Heapster+InfluxDB+Grafana
1 | 1. cAdvisor 采集所有容器的性能指标,与kubelet集成 |
cAdvisor/exporter+Prometheus+Grafana
1 | 1. cAdvisor 采集容器性能指标 |
K8S 监控指标
Kubernetes本身监控
- Node资源利用率
- Node数量
- Pods数量(Node) • 资源对象状态• Node资源利用率
- Node数量
- Pods数量(Node) • 资源对象状态
Pod监控
- Pod数量(项目)
- 容器资源利用率
- 应用程序
实现思路
- k8s中的pod都是动态创建的,不能每次都在Prometheus配置文件中去写
- 所有要使用服务发现
- k8s的服务发现是从 k8sapi中发现目标 ,并且获取当前状态,随着pod的生命周期采集数据
1 | 服务发现: |
在 K8S 中部署 Prometheus
准备工作
1 | 1. k8s集群 |
1 | [root@k8s-master1 opt]# unzip prometheus-k8s\ .zip |
1 | # k8s 基础组件 |
1 | # nfs pv自动供给 |
1 | [root@k8s-master1 prometheus-k8s]# kubectl get sc |
k8s 部署 prometheus
1 | # rbac 访问kubeapi授权,无需变动 |
1 | # prometheus-statefulset.yaml 有状态部署 |
1 | # 部署: |
基于 K8S 服务发现的配置解析
1 | # 用于修改 configmap 后 重新加载 |
1 | # 进入容器 查看配置文件 |
1 | # kubelet的服务端口是 10250 |
1 | - job_name: kubernetes-service-endpoints |
监控 K8S 集群中Pod
- kubelet的节点使用cAdvisor提供的metrics接口获取该节点所有容器相关的性能指标数据
- cAdvisor 已经集成到 kubelet 中
1 | 暴露接口地址: |
在 K8S中部署 Grafana
- Grafana是一个开源的度量分析和可视化系统。
- Grafana 也部署在 k8s 集群内
1 | 官网:https://grafana.com/grafana/download |
1 | [root@k8s-master1 prometheus-k8s]# kubectl apply -f grafana.yaml |
监控K8S集群Node
- node_exporter:用于*NIX系统监控,使用Go语言编写的收集器。
- node_exporter 在k8s中使用DaemonSet方式部署,每个node都会启动一个收集器
- 本次收集不通过yaml方式部署 yaml方式局限于数据获取不到,挂载麻烦
- 每台node节点都需要部署
1
2
3使用文档:https://prometheus.io/docs/guides/node-exporter/
GitHub:https://github.com/prometheus/node_exporter
exporter列表:https://prometheus.io/docs/instrumenting/exporters/
1 | # 部署脚本 |
1 | # 测试访问 |
1 | # 接入监控 修改配置文件 |
1 | # 导入模板: K8S Node监控 :9276 |
100 - (avg(irate(node_cpu_seconds_total{instance=~”$node”,mode=”idle”}[1m])) * 100)
监控 K8S 资源对象与Grafana可视化
1 | kube-state-metrics采集了k8s中各种资源对象的状态信息: |
1 | [root@k8s-master1 prometheus-k8s]# kubectl apply -f kube-state-metrics-rbac.yaml |
1 | # 导入模板 k8s 资源对象状态监控 :6417 |
在 K8S中部署 Alertmanager
- 部署Alertmanager
- 配置Prometheus与Alertmanager通信
- 配置告警
1 | 1. prometheus指定rules目录 |
1 | [root@k8s-master1 prometheus-k8s]# kubectl apply -f alertmanager-configmap.yaml |
1 | [root@k8s-master1 prometheus-k8s]# kubectl get pods,svc -n kube-system |
配置 Prometheus 与 Alertmanager 通信
[root@k8s-master1 prometheus-k8s]# vim prometheus-configmap.yaml
1 | alerting: |
配置告警
- prometheus指定rules目录
1 | [root@k8s-master1 prometheus-k8s]# vim prometheus-configmap.yaml |
configmap存储告警规则
1 | # 测试告警规则 无需修改 |
configmap挂载到容器rules目录
1 | [root@k8s-master1 prometheus-k8s]# kubectl apply -f prometheus-rules.yaml |
增加alertmanager告警配置
1 | [root@k8s-master1 prometheus-k8s]# vim alertmanager-configmap.yaml |
1 | # 关闭一个node_exporter 看看是否告警 |
小结
- 标签重要性(环境,部门,项目,管理者)
- Grafana灵活
- PromSQL
- 利用服务发现动态加入目标
下一步计划:Prometheus集群, PromSQL, Grafana,对业务监控