【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 使用率,并设置告警以便及时响应。定期检查和优化监控和告警配置,确保其有效性,以便在出现问题时能够快速反应。

相关推荐
man201738 分钟前
【2024最新】基于springboot+vue的闲一品交易平台lw+ppt
vue.js·spring boot·后端
hlsd#1 小时前
关于 SpringBoot 时间处理的总结
java·spring boot·后端
路在脚下@1 小时前
Spring Boot 的核心原理和工作机制
java·spring boot·后端
幸运小圣1 小时前
Vue3 -- 项目配置之stylelint【企业级项目配置保姆级教程3】
开发语言·后端·rust
前端SkyRain2 小时前
后端Node学习项目-用户管理-增删改查
后端·学习·node.js
提笔惊蚂蚁2 小时前
结构化(经典)软件开发方法: 需求分析阶段+设计阶段
后端·学习·需求分析
老猿讲编程2 小时前
Rust编写的贪吃蛇小游戏源代码解读
开发语言·后端·rust
黄小耶@2 小时前
python如何使用Rabbitmq
分布式·后端·python·rabbitmq
宅小海4 小时前
Scala-List列表
开发语言·后端·scala
蔚一5 小时前
Javaweb—Ajax与jQuery请求
前端·javascript·后端·ajax·jquery