在 CentOS 上落地 Kubernetes 监控,建议以Metrics Server + cAdvisor + kube-state-metrics为基础指标来源,使用Prometheus + Grafana做指标采集、存储与可视化,配合Alertmanager实现告警,并补充日志与可视化组件形成闭环。该方案适用于绝大多数基于 CentOS 的集群环境。
一、监控架构与组件选型
- 指标采集链路
- Metrics Server:集群级资源指标聚合,为 HPA/VPA/Cluster Autoscaler 提供数据;cAdvisor(内置于 kubelet)采集容器与节点资源;kube-state-metrics 暴露 Pod/Deployment/Node 等对象状态指标。
- 存储与可视化
- Prometheus Operator / kube-prometheus-stack:简化 Prometheus/Alertmanager/ServiceMonitor 等资源的部署与管理;Grafana 负责可视化与看板。
- 日志与拓扑
- 日志:**EFK(Elasticsearch/Fluent Bit/Kibana)**或 Loki+Promtail;拓扑/排障:Weave Scope。
- 快速对比
- 基础资源与 HPA:Metrics Server
- 容器与节点指标:cAdvisor
- 对象状态与计数:kube-state-metrics
- 时序与告警:Prometheus + Alertmanager
- 可视化:Grafana
- 日志:EFK 或 Loki
- 拓扑/诊断:Weave Scope
二、快速落地步骤(推荐 Helm 方式)
- 准备
- 确保集群可正常访问镜像仓库;为持久化准备 StorageClass(如 nfs/csi);为 Grafana/Prometheus 创建 Ingress 或使用 NodePort。
- 安装 kube-prometheus-stack(含 Prometheus/Alertmanager/Grafana/Operator)
- 添加仓库并安装
- 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 -n monitoring get pods -l app.kubernetes.io/name=prometheus
- kubectl -n monitoring get svc prometheus-operated
- kubectl -n monitoring get svc grafana
- 暴露访问
- Grafana:NodePort 或 Ingress(默认账号/密码在 Secret 中:kubectl -n monitoring get secret grafana -o jsonpath=‘{.data.admin-password}’ | base64 -d)
- Prometheus:NodePort 或 Ingress(用于调试抓取目标)
- 导入常用看板
- Grafana 导入 Kubernetes / Node Exporter / cAdvisor / kube-state-metrics 官方看板(ID 可在 Grafana 官网搜索)。
- 验证抓取
- 在 Prometheus UI 的 Targets 页面检查 kubelet、kube-state-metrics、node-exporter、apiserver、coredns 等目标是否为 UP。
三、关键配置要点
- ServiceMonitor 与抓取范围
- 为关键命名空间与应用创建 ServiceMonitor(matchLabels 与 Service 的 selector 对齐),避免全量抓取造成压力。
- 资源与存储
- 为 Prometheus 设置 requests/limits 与 持久卷(如 10Gi+),避免 OOM 与数据丢失。
- 告警规则
- 在 PrometheusRule 中启用常见告警:节点 CPU/内存/磁盘、Pod CrashLoopBackOff、Deployment 副本不足、APIServer 可用性 等。
- 安全与网络
- 为 Grafana/Prometheus 配置 RBAC 与 Ingress 认证;跨命名空间抓取需正确设置 ServiceAccount/ClusterRoleBinding。
- 高可用
- Prometheus 多副本(sharding/分片)与 Thanos/Cortex/Mimir 可做长期存储与全局查询(按需引入)。
四、命令行与 UI 的即时检查
- 集群与组件状态
- kubectl get nodes
- kubectl get pods -A
- kubectl get componentstatuses 或 kubectl get cs
- Metrics Server
- kubectl top nodes
- kubectl top pods -A
- 访问与排障
- kubectl -n monitoring get svc | grep prometheus
- kubectl -n monitoring get svc grafana
- kubectl -n kube-system get pods | grep metrics-server
- 可选 UI
- Kubernetes Dashboard:kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
- 获取访问 Token:kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk ‘{print $1}’)
五、常见问题与排查
- 节点 NotReady
- 检查 kubelet 与 容器运行时(containerd/docker)、网络插件(Calico/Flannel)、磁盘/内存压力。
- cAdvisor/Prometheus 抓取失败
- 确认 kubelet 10250/10255 端口与 ServiceAccount 权限;检查 NetworkPolicy/防火墙;在 Prometheus Targets 查看错误详情。
- HPA 不生效
- 确认 Metrics Server 已就绪(kubectl top nodes 正常),Deployment 存在 requests/limits,指标名称与 kube-state-metrics 一致。
- Grafana 无数据
- 检查 Prometheus 数据源地址(Service DNS:http://prometheus-operated.monitoring.svc:9090),以及 ServiceMonitor 是否选中目标。
- 日志采集方案选择
- 统一高性能采集:优先 Fluent Bit;已有 ES 栈:选 EFK;轻量低成本:选 Loki+Promtail。