温馨提示×

CentOS环境下Kubernetes的监控如何实现

小樊
44
2025-12-07 21:33:26
栏目: 智能运维

在 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 CrashLoopBackOffDeployment 副本不足APIServer 可用性 等。
  • 安全与网络
    • Grafana/Prometheus 配置 RBACIngress 认证;跨命名空间抓取需正确设置 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

0