近期在做Prometheus监控K8S中Pod的报警,部署完成后需要进行测试,所以我在K8S中国默认命名空间下创建了一个buxybox的容器,进入容器后使用脚本来模拟CPU资源使用过高而触发报警。具体实施如下:

prometheus-rules.yaml文件:

  pod.rules: |
    groups:
    - name: pod.rules
      rules:
      - alert: PodCPUUsage
        expr: |
           (sum(rate(container_cpu_usage_seconds_total{image!=""}[2m])) by (pod,namespace)/sum(kube_pod_container_resource_limits_cpu_cores) by (pod,namespace)  * 100) > 80
        for: 5m
        labels:
          severity: warning 
        annotations:
          summary: "命名空间: {{ $labels.namespace }} | Pod名称: {{ $labels.pod }} CPU使用大于5% (当前值: {{ $value }})"


busybox的yaml文件:

# cat testpod.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox
  labels:
    app: busybox
spec:
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      containers:
      - name: busybox
        image: busybox
        command:
          - sleep
          - "360000"
        resources:
          limits:
            cpu: 200m
            memory: 1500Mi
          requests:
            cpu: 200m
            memory: 1000Mi
kubectl exec -it -n default busybox-74d8c6c4b9-kpnqz -- sh       #进入pod

脚本内容:

~ # cat test.sh 
#! /bin/bash
for i in ‘seq $1’
do
echo -ne "
i=0;
while true
do
i=i+1;
done" | /bin/sh &
done

运行:

sh test.sh 1     #这个1代表消耗1个CPU资源,根据需求修改。

 top中CPU使用率已经达到了百分之二十以上,因为我的pod设置的requests值为200M,即1核CPU的百分之二十,所有当这里显示百分之二十以上的时候使用率已经是百分之百了。

Grafana中可以直观的看到。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐