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

相关推荐
IT_陈寒13 分钟前
🔥3分钟掌握JavaScript性能优化:从V8引擎原理到5个实战提速技巧
前端·人工智能·后端
程序员清风1 小时前
贝壳一面:年轻代回收频率太高,如何定位?
java·后端·面试
ggaofeng1 小时前
k8s网络原理
网络·容器·kubernetes
考虑考虑1 小时前
Java实现字节转bcd编码
java·后端·java ee
AAA修煤气灶刘哥1 小时前
ES 聚合爽到飞起!从分桶到 Java 实操,再也不用翻烂文档
后端·elasticsearch·面试
爱读源码的大都督2 小时前
Java已死?别慌,看我如何用Java手写一个Qwen Code Agent,拯救Java
java·人工智能·后端
星辰大海的精灵2 小时前
SpringBoot与Quartz整合,实现订单自动取消功能
java·后端·算法
天天摸鱼的java工程师2 小时前
RestTemplate 如何优化连接池?—— 八年 Java 开发的踩坑与优化指南
java·后端
一乐小哥2 小时前
一口气同步10年豆瓣记录———豆瓣书影音同步 Notion分享 🚀
后端·python
LSTM972 小时前
如何使用C#实现Excel和CSV互转:基于Spire.XLS for .NET的专业指南
后端