温馨提示×

Ubuntu上Kubernetes监控如何设置

小樊
43
2025-11-23 00:05:47
栏目: 智能运维

Ubuntu上Kubernetes监控实操指南

一 监控架构与组件选型

  • 指标采集与告警
    • 使用 Prometheus Operator / kube-prometheus-stack 一键部署 Prometheus + Alertmanager,通过 ServiceMonitor / PodMonitor 自动发现 Kubernetes 节点、Pod、APIServer、kubelet、kube-state-metrics 等指标源。
    • 容器与节点指标:cAdvisor(已内置于 kubelet)负责容器资源,Node Exporter 负责节点级指标(磁盘、网络等)。
  • 可视化与观测
    • Grafana 作为可视化层,导入官方或社区 Kubernetes 仪表盘 快速展示资源、工作负载与告警。
  • 日志与事件
    • 日志建议采用 EFK(Elasticsearch + Fluent Bit/Fluentd + Kibana)Loki + Promtail 方案,便于故障排查与审计。
  • 基础能力
    • Metrics ServerHPA/VPA 等提供资源指标 API(注意:它不替代 Prometheus 的长期存储与告警)。

二 快速落地步骤 Ubuntu 20.04/22.04

  • 准备环境
    • 已部署可用的 Kubernetes 集群(v1.24+)kubectl/Helm3;确保节点可调度与网络互通。
  • 安装 kube-prometheus-stack(推荐)
    • 添加仓库并安装(示例命名空间为 monitoring):
      helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
      helm repo update
      kubectl create ns monitoring
      helm install prometheus prometheus-community/kube-prometheus-stack \
        --namespace monitoring \
        --set grafana.adminPassword=YourStrongPassw0rd
      
    • 验证核心组件:
      kubectl get pods -n monitoring
      kubectl get svc -n monitoring
      
  • 访问控制台(临时本地端口转发)
    kubectl port-forward -n monitoring svc/prometheus-k8s 9090:9090
    kubectl port-forward -n monitoring svc/grafana 3000:3000
    kubectl port-forward -n monitoring svc/alertmanager-main 9093:9093
    
    • 浏览器访问:http://localhost:3000(Grafana,默认用户 admin),http://localhost:9090(Prometheus),http://localhost:9093(Alertmanager)。
  • 外部访问(生产可用 Ingress 或 NodePort)
    • 示例将服务改为 NodePort(便于测试):
      kubectl patch svc -n monitoring prometheus-k8s --type='json' \
        -p='[{"op":"replace","path":"/spec/type","value":"NodePort"}]'
      kubectl patch svc -n monitoring grafana --type='json' \
        -p='[{"op":"replace","path":"/spec/type","value":"NodePort"}]'
      kubectl patch svc -n monitoring alertmanager-main --type='json' \
        -p='[{"op":"replace","path":"/spec/type","value":"NodePort"}]'
      
    • 查看节点端口并访问:kubectl get svc -n monitoring;随后通过 http://<任意节点IP>: 访问对应服务。

三 关键配置与验证

  • 抓取范围与发现
    • 确认 kube-prometheus-stack 已创建 ServiceMonitor(如 kubelet、nodes、pods、apiserver、kube-state-metrics 等),Prometheus 会自动发现并抓取。
    • 自建抓取示例(如需补充抓取目标):
      - job_name: 'kubernetes-nodes'
        kubernetes_sd_configs:
          - role: node
      - job_name: 'kubernetes-pods'
        kubernetes_sd_configs:
          - role: pod
      
  • 告警规则与通知
    • PrometheusRule 中新增规则(示例:节点 1 分钟负载过高):
      groups:
      - name: node.rules
        rules:
        - alert: HighNodeLoad1
          expr: node_load1 > 0.7
          for: 5m
          labels:
            severity: warning
          annotations:
            summary: "High 1m load on {{ $labels.instance }}"
            description: "1m load is above 0.7 (current: {{ $value }})"
      
    • Alertmanager 配置 SMTP/钉钉/企业微信 等接收器,实现邮件或企业 IM 告警(可按需启用 Ingress 或 NodePort 对外暴露)。
  • 可视化仪表盘
    • Grafana 添加 Prometheus 数据源(URL:http://prometheus-k8s.monitoring.svc:9090),导入官方 Kubernetes / Node / Pod 仪表盘(如 ID:3119、315 等),即可查看节点、工作负载与告警大盘。

四 常见问题与排错要点

  • 组件未就绪
    • 检查 Pod CrashLoopBackOff/ImagePullBackOffkubectl describe pod <pod> -n monitoring;确认镜像可达与节点资源充足。
  • 抓取失败
    • 确认 ServiceMonitorselector 与目标的 Service/Pod labels 匹配;检查 NetworkPolicy/安全组 是否放行 9090/9100/10250 等端口。
  • 无法外部访问
    • 临时用 port-forward 验证;生产建议使用 Ingress(配合认证)或 NodePort,并限制来源 IP 与启用 TLS。
  • 存储与持久化
    • Prometheus/Alertmanager/Grafana 配置 PVC/StorageClass,避免重启后数据丢失(可按需使用 NFS/云盘 等)。
  • 日志观测补充
    • 若需集中日志,部署 EFKLoki+Promtail,将 kubelet、容器 stdout/stderr 统一采集与检索,与指标告警联动排查。

0