[TOC]
## **背景**
在前面的文章中,prometheus的监控目标(Target)都是静态配置的,如下:
```
scrape_configs:
- job_name: 'node_exporter'
static_configs:
- targets: ['192.168.2.101:9100']
```
但是在kubernetes中,假如我们用DaemonSet来运行node-exporter,我们想监控所有的node-exporter,但是node-exporter的Pod数目随着节点的扩缩容而变化的,所以通过上面的静态配置的方法来配置Target肯定是行不通的。于是,就有了我们接下来要介绍的kubernetes下的服务发现。
Prometheus在Kubernetes支持五种类型的服务发现:
* Node
* Pod
* Service
* Endpoints
* Ingress
在后面的章节,我们将给出详细的示例,来详细介绍Kubernetes的每一种服务发现。
## **RBAC授权**
在示例之前,我们先给Prometheus容器授权,使它有权限访问Kubernetes的API。新建文件prometheus-rbac.yaml,内容如下:
```
apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: prometheus
rules:
- apiGroups: [""]
resources:
- nodes
- nodes/proxy
- services
- endpoints
- pods
verbs: ["get", "list", "watch"]
- apiGroups:
- extensions
resources:
- ingresses
verbs: ["get", "list", "watch"]
- nonResourceURLs: ["/metrics"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: prometheus
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: prometheus
subjects:
- kind: ServiceAccount
name: prometheus
namespace: kube-system
```
注意,ClusterRole与ClusterRoleBinding是没有命名空间的, 它们属于集群级别的资源对象。
执行以下命令创建:
```
$ kubectl create -f prometheus-rbac.yaml
serviceaccount/prometheus created
clusterrole.rbac.authorization.k8s.io/prometheus created
clusterrolebinding.rbac.authorization.k8s.io/prometheus created
```
在完成角色权限以及用户的绑定之后,就可以指定Prometheus使用特定的ServiceAccount创建Pod实例。修改prometheus-deployment.yml文件,并添加serviceAccountName定义:
```
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
...
spec:
serviceAccountName: prometheus
containers:
...
```
然后,通过kubectl apply对Deployment进行变更升级
```
$ kubectl apply -f prometheus-deployment.yaml
```
- (一)快速开始
- 安装Prometheus
- 使用NodeExporter采集数据
- AlertManager进行告警
- Grafana数据可视化
- (二)探索PromQL
- 理解时间序列
- Metrics类型
- 初识PromQL
- PromQL操作符
- PromQL内置函数
- rate和irate
- 常见指标的PromQL
- 主机CPU使用率
- 主机内存使用率
- 主机磁盘使用率
- 主机磁盘IO
- 主机网络IO
- API的响应时间
- (三)Promtheus告警处理
- 自定义告警规则
- 示例-对主机进行监控告警
- 部署AlertManager
- 告警的路由与分组
- 使用Receiver接收告警信息
- 集成邮件系统
- 屏蔽告警通知
- 扩展阅读
- AlertManager的API
- Prometheus发送告警机制
- 实践:接收Prometheus的告警
- 实践:AlertManager
- (四)监控Kubernetes集群
- 部署Prometheus
- Kubernetes下的服务发现
- 监控Kubernetes集群
- 监控Kubelet的运行状态
- 监控Pod的资源(cadvisor)
- 监控K8s主机的资源
- KubeStateMetrics
- K8S及ETCD常见监控指标
- ETCD监控指标
- Kube-apiserver监控指标
- (五)其他
- Prometheus的relabel-config
- Target的Endpoint
- Prometheus的其他配置
- (六)BlackboxExporter
- 安装
- BlackboxExporter的应用场景
- 在Promtheus中使用BlackboxExporter
- 参考