温馨提示×

Kubernetes 集群在 Ubuntu 上如何监控

小樊
45
2025-12-08 17:40:55
栏目: 智能运维

在 Ubuntu 上监控 Kubernetes 集群的实用方案

一、监控架构与组件选型

  • 指标采集与存储:使用 Prometheus 拉取集群与应用指标,配合 Alertmanager 做告警路由与抑制。
  • 可视化:使用 Grafana 展示集群、节点、Pod、容器与应用指标仪表板。
  • 节点与系统指标:部署 Node Exporter 采集机器级指标;cAdvisor 已集成于 kubelet,提供容器级指标;kube-state-metrics 提供 Kubernetes 对象(如 Deployment、Pod、Node)状态指标。
  • 可选扩展:日志用 ELK(Elasticsearch/Logstash/Kibana);主机/容器更细粒度可用 Telegraf 采集并送入 Prometheus;若使用 Charmed Kubernetes,可用 Juju 叠加监控组件一键集成。

二、快速落地步骤(kube-prometheus-stack)

  • 准备:确保 Ubuntu 节点已安装 kubectl 且当前上下文指向目标集群;具备 Helm(或能访问镜像仓库)。
  • 安装 kube-prometheus-stack(推荐):
    • 添加仓库并安装:
      • helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
      • helm repo update
      • helm install monitoring prometheus-community/kube-prometheus-stack --namespace monitoring --create-namespace
    • 验证:kubectl get pods -n monitoring;访问 Grafana(Service: monitoring-grafana:3000),默认账号/密码通常为 admin/prom-operator(以实际输出为准)。
  • 暴露服务(按需):
    • Grafana:kubectl expose svc monitoring-grafana -n monitoring --type=NodePort --port=3000
    • Prometheus:kubectl expose svc monitoring-kube-prometheus-prometheus -n monitoring --type=NodePort --port=9090
    • Alertmanager:kubectl expose svc monitoring-kube-prometheus-alertmanager -n monitoring --type=NodePort --port=9093
  • 导入常用仪表板:在 Grafana 导入 Kubernetes / Compute Resources / NodesPods 等官方或社区仪表板(ID 可在 Grafana 仪表板库搜索)。
  • 说明:kube-prometheus-stack 已集成 Prometheus、Grafana、Alertmanager、Node Exporter、kube-state-metrics,并预置大量规则与仪表板,适合生产快速落地。

三、手动组合方案(Prometheus + Grafana + Exporters)

  • 组件与职责:
    • cAdvisor:容器资源与性能(集成于 kubelet,无需单独部署)。
    • Node Exporter:主机 CPU、内存、磁盘、网络等。
    • kube-state-metrics:Deployment、ReplicaSet、Pod、Node 等对象状态。
    • Prometheus:基于 ServiceMonitor/Endpoints 自动发现并抓取指标。
    • Alertmanager:分组、抑制、路由告警(邮件、Webhook 等)。
    • Grafana:可视化与告警面板。
  • 部署要点(示例思路):
    • 使用 DaemonSet 部署 Node Exporter(hostNetwork: true,端口 9100)。
    • 部署 kube-state-metrics(RBAC 权限、Service 暴露 8080)。
    • 部署 Prometheus(RBAC、ConfigMap 配置 scrape_configs,Service 暴露 9090;可按需配置持久化,如 NFS PV/PVC)。
    • 部署 Alertmanager(Service 暴露 9093,配置路由与接收器)。
    • 部署 Grafana(Service 暴露 3000,添加 Prometheus 数据源并导入仪表板)。
  • 持久化示例(Prometheus 使用 NFS):
    • 在 NFS 服务器创建目录并导出(如 /data/pvdata),在各节点安装 nfs-common 后可挂载测试。
    • Prometheus StatefulSet 使用 volumeClaimTemplates 或指定现有 PVC 挂载数据目录,确保数据不随 Pod 重建丢失。

四、告警与可视化实践

  • 告警规则:在 Prometheus 中创建 Rules(如节点 CPU/内存/磁盘 阈值、Pod 重启/不可用kubelet 异常等),由 Alertmanager 接收并按团队渠道(如 钉钉/企业微信/邮件/Webhook)发送。
  • 通知示例:可部署 webhook-dingtalk 插件并配置路由,将告警推送到钉钉群;为不同团队设置分组与抑制策略,避免告警风暴。
  • 仪表板:优先使用 Kubernetes 官方/社区仪表板(集群、节点、Pod、网络、存储、工作负载),再按业务补充自定义面板(如 QPS、延迟、错误率、饱和度 等 SLO 指标)。

五、可选集成与扩展

  • 日志链路:引入 ELKEFK(Elasticsearch/Fluent Bit/Kibana) 收集容器与系统日志,与指标监控互补,便于故障排查与审计。
  • 主机/容器采集增强:使用 Telegraf 采集主机与应用指标,输出到 Prometheus,统一到同一可视化与告警体系。
  • Charmed Kubernetes 场景:通过 Juju 叠加监控 overlay,一键部署 Prometheus + Grafana + Telegraf 并与 Kubernetes/Etcd 建立抓取与仪表板关系,适合 Canonical 发行版的一体化交付。

0