【K8S问题系列 | 9】如何监控集群CPU使用率并设置告警?

监控 Kubernetes 集群的 CPU 使用率并设置告警是确保集群健康和性能的关键步骤。以下是详细的步骤,包括所需工具和配置方法。

1. 安装监控工具

1.1 Prometheus

Prometheus 是一个开源监控系统,能够收集和存储时间序列数据。你可以通过 Helm 或 Kubernetes 清单来安装 Prometheus。

使用 Helm 安装 Prometheus
  1. 添加 Helm 仓库:

    bash 复制代码
    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    helm repo update
  2. 安装 Prometheus:

    bash 复制代码
    helm install prometheus prometheus-community/prometheus

1.2 Grafana

Grafana 是一个开源的分析和监控平台,可以与 Prometheus 集成以可视化监控数据。

使用 Helm 安装 Grafana
  1. 添加 Grafana 仓库:

    bash 复制代码
    helm repo add grafana https://grafana.github.io/helm-charts
    helm repo update
  2. 安装 Grafana:

    bash 复制代码
    helm install grafana grafana/grafana
  3. 获取 Grafana 的访问凭证:

    bash 复制代码
    kubectl get secret --namespace default grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

2. 配置 Prometheus 监控

2.1 配置 Prometheus 采集 Kubernetes 指标

  1. 编辑 Prometheus 配置 :

    prometheus.yml 文件中,确保 Kubernetes API 的服务发现设置正确,以便 Prometheus 能够自动发现目标。

    示例配置:

    yaml 复制代码
    scrape_configs:
      - job_name: kubernetes-nodes
        kubernetes_sd_configs:
          - role: node
        relabel_configs:
          - source_labels: [__meta_kubernetes_node_name]
            action: keep
            regex: .*
      - job_name: kubernetes-pods
        kubernetes_sd_configs:
          - role: pod
        relabel_configs:
          - source_labels: [__meta_kubernetes_namespace]
            action: keep
            regex: default
  2. 重启 Prometheus :

    更新配置后,重启 Prometheus 以使更改生效。

3. 设置告警规则

3.1 在 Prometheus 中创建告警规则

  1. 创建告警规则文件 :

    创建一个 YAML 文件,例如 alert_rules.yml,定义 CPU 使用率的告警条件。

    示例告警规则:

    yaml 复制代码
    groups:
    - name: cpu-alerts
      rules:
      - alert: HighCpuUsage
        expr: sum(rate(container_cpu_usage_seconds_total{job="kubelet"}[5m])) by (instance) > 0.8
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "High CPU usage detected"
          description: "CPU usage is above 80% for more than 5 minutes."
  2. 更新 Prometheus 配置以包含告警规则 :

    prometheus.yml 中的 rule_files 字段添加刚才创建的告警规则文件路径。

    示例:

    yaml 复制代码
    rule_files:
      - "alert_rules.yml"
  3. 重启 Prometheus :

    使新的告警规则生效。

3.2 配置告警通知

Prometheus 支持多种通知方式,例如通过电子邮件、Slack 或其他服务发送告警。

  1. 配置 Alertmanager :

    在 Prometheus 的 prometheus.yml 文件中添加 Alertmanager 的配置。

    示例:

    yaml 复制代码
    alerting:
      alertmanagers:
        - static_configs:
            - targets:
              - alertmanager:9093
  2. 安装 Alertmanager :

    如果还没有安装 Alertmanager,可以通过 Helm 安装:

    bash 复制代码
    helm install alertmanager prometheus-community/alertmanager
  3. 配置告警通知渠道 :

    编辑 Alertmanager 的配置文件,设置通知渠道,例如 Slack。

    示例配置:

    yaml 复制代码
    global:
      slack_api_url: 'https://hooks.slack.com/services/XXXX/XXXX/XXXX'
    route:
      group_by: ['alertname']
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 3h
      receiver: 'slack'
    
    receivers:
    - name: 'slack'
      slack_configs:
      - channel: '#alerts'
        text: "Alert: {{ .CommonLabels.alert }}\nDescription: {{ .CommonAnnotations.description }}"

4. 可视化和告警验证

4.1 在 Grafana 中可视化监控数据

  1. 访问 Grafana :

    使用以下命令获取 Grafana 服务的外部访问地址:

    bash 复制代码
    kubectl get svc grafana
  2. 登录 Grafana :

    使用 admin 用户和上一步获取的密码登录。

  3. 添加 Prometheus 数据源:

    • 在 Grafana 中,导航到配置 > 数据源 > 添加数据源。
    • 选择 Prometheus,输入 Prometheus 服务的 URL(通常是 http://prometheus-server),然后保存。
  4. 创建仪表板:

    • 使用 Grafana 的图形编辑器创建自定义仪表板,监控 CPU 使用率和其他指标。

4.2 验证告警

  1. 模拟高 CPU 使用率:

    • 启动一个负载测试工具(如 stresshey)以模拟高负载。
  2. 检查告警:

    • 确保在高负载情况下,Prometheus 和 Alertmanager 能够发送告警通知到配置的渠道。

总结

通过以上步骤,您可以有效地监控 Kubernetes 集群的 CPU 使用率,并设置告警以便及时响应。定期检查和优化监控和告警配置,确保其有效性,以便在出现问题时能够快速反应。

相关推荐
向前看-2 小时前
验证码机制
前端·后端
鸠摩智首席音效师3 小时前
Docker 中如何限制CPU和内存的使用 ?
docker·容器
Michaelwubo3 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器
好像是个likun3 小时前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器
超爱吃士力架3 小时前
邀请逻辑
java·linux·后端
AskHarries5 小时前
Spring Cloud OpenFeign快速入门demo
spring boot·后端
暴富的Tdy6 小时前
【快速上手Docker 简单配置方法】
docker·容器·eureka
魏 无羡6 小时前
linux CentOS系统上卸载docker
linux·kubernetes·centos
isolusion6 小时前
Springboot的创建方式
java·spring boot·后端
Karoku0666 小时前
【k8s集群应用】kubeadm1.20高可用部署(3master)
运维·docker·云原生·容器·kubernetes