ack-prometheus-operator就像一把瑞士军刀,包含非常丰富的功能,安装后会自动部署prometheus、grafana、alertmanager等组件,并会下发很多的监控相关的规则,包括metric采集规则、告警规则和grafana dashboard。但是很朋友看到这些指标和规则后,只能感受到他的强大,却不知道如何发挥它强大的功能,我们这一系列文章就是描述如何快速上手使用ack-prometheus-operator,让这把瑞士军刀发挥出强大的作用
背景知识
开始之前
- 你需要有一个ACK集群,以及配置好可以管理这个集群的kubectl,集群上还要有ingress controller和helm tiller,如果你还没有集群,可以 使用ACK快速部署kubernetes集群
- 安装ack-prometheus-operator,参考 这里
CPUThrottlingHigh
很多Kubernetes的用户都会苦恼如何配置cpu的limit,并且不知如何确认自己当前的配置是否合理,这里就来演示如何利用ack-prometheus-operator自带的告警规则发现cpu limit的不合理配置
ack-prometheus-operator部署后默认带有个叫CPUThrottlingHigh的rule,expr如下:
100
* sum by(container_name, pod_name, namespace) (increase(container_cpu_cfs_throttled_periods_total{container_name!=""}[5m]))
/ sum by(container_name, pod_name, namespace) (increase(container_cpu_cfs_periods_total[5m]))
> 25
这个表达式的作用是查出最近5分钟,超过25%的CPU执行周期受到限制的container,这里用到了来自kubelet的两个重要指标:
- container_cpu_cfs_periods_total:container生命周期中度过的cpu周期总数
- container_cpu_cfs_throttled_periods_total:container生命周期中度过的受限的cpu周期总数
下面我们就用一个例子来验证这个告警规则的可靠性:
apiVersion: v1
kind: Pod
metadata:
name: cpu-demo
spec:
containers:
- name: cpu-demo
image: vish/stress
resources:
limits:
cpu: "2"
requests:
cpu: "2"
args:
- -cpus
- "3"
这个pod,我们给他的cpu limit配置成2,然后容器的进程配置申请3个cpu核心的用量,这个pod下发下去,不久就可以在Prometheus的alert页面看到
CPUThrottlingHigh
这个告警规则变成active
小结
Prometheus为kubernetes提供了丰富的可观测指标,有了这些指标,我们队集群的掌握就告别了盲人摸象的阶段,并且可以利用我们观测到的指标来持续的优化我们的应用配置