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

相关推荐
LTPP几秒前
自动化 Rust 开发的革命性工具:lombok-macros
前端·后端·github
一个热爱生活的普通人几秒前
Go语言中 Mutex 的实现原理
后端·go
Victor3561 分钟前
Dubbo(31)如何优化Dubbo的启动速度?
后端
qianmoq2 分钟前
轻松掌握Java多线程 - 第二章:线程的生命周期
java·后端
Postkarte不想说话3 分钟前
FreeSWITCH与FreeSWITCH对接
后端
孔令飞3 分钟前
关于 LLMOPS 的一些粗浅思考
人工智能·云原生·go
小戴同学3 分钟前
实时系统降低延时的利器
后端·性能优化·go
风象南3 分钟前
Spring Boot 实现文件断点续传
java·spring boot·后端
Cache技术分享4 分钟前
36. Java 控制流语句 Break 语句
前端·后端
极特架构笔记5 分钟前
百万QPS秒杀如何解决超卖少卖问题?(图解+秒懂)
后端