在 Linux 上监控 Kubernetes 集群的实用方案
一 快速巡检与可视化
- 使用 kubectl 进行日常巡检:查看节点与组件状态(如 kubectl get nodes)、查看工作负载(如 kubectl get pods --all-namespaces)、定位异常(如 kubectl describe pod -n )。这些命令适合在 CentOS、Ubuntu 等 Linux 发行版上直接执行。
- 部署 Kubernetes Dashboard 获得 Web 可视化:执行 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml 安装;获取访问 Token:kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk ‘{print $1}’);通过 https://:30000 访问并使用 Token 登录。
- 可选:在 CentOS 7/8 上启用 Cockpit(系统自带 Web 管理),对节点资源进行可视化监控,作为集群监控的补充视角。
二 指标监控与告警体系
- 组件与职责一览:
- Metrics Server:集群范围的资源指标聚合器,为 kubectl top 与 HPA 等提供数据。
- cAdvisor:内置于 kubelet,采集容器级 CPU、内存、磁盘、网络 使用。
- kube-state-metrics:从 Kubernetes API 获取资源对象状态(如 Pod/Deployment/Node 的副本数、状态等)。
- Node Exporter:暴露节点级 CPU、内存、磁盘、网络 等操作系统指标。
- Prometheus:拉取并存储指标,支持强大查询与告警。
- Alertmanager:处理告警并路由到邮件、企业微信、钉钉、Slack 等。
- Grafana:可视化展示与仪表盘。
- 快速部署(Helm 推荐):
- 添加仓库并安装 kube-prometheus-stack(内含 Prometheus、Alertmanager、Grafana、Node Exporter、kube-state-metrics 等):
- helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
- helm install prometheus prometheus-community/kube-prometheus-stack
- 访问 Grafana(默认 NodePort 3000),添加 Prometheus 为数据源,导入官方 Kubernetes / Node / Pod 仪表盘。
- 验证要点:
- 确认 Metrics Server 就绪:kubectl get pods -n kube-system | grep metrics-server
- 在 Prometheus 的 Targets 页面检查 kubelet、node-exporter、kube-state-metrics、apiserver 等抓取目标是否 UP。
三 日志与追踪
- 集中式日志方案:部署 ELK(Elasticsearch、Logstash、Kibana) 或 EFK(Elasticsearch、Fluentd/Fluent Bit、Kibana) 收集容器日志,在 Kibana 中检索、分析与可视化。
- 快速接入思路:
- 使用 Elasticsearch 存储与检索、Logstash/Fluentd 采集与处理、Kibana 展示与仪表盘。
- 在 Kibana 中按 namespace、pod、container、level 等字段建立索引与可视化,便于故障排查与审计。
四 关键指标与告警示例
- 建议重点观测与告警:
- 节点资源:Node CPU/内存/磁盘使用率、磁盘 I/O、网络丢包/错包(Node Exporter)。
- 工作负载:Pod 重启次数、容器 OOMKilled、Pending/Evicted、CPU/内存请求与限制 使用率(kube-state-metrics + cAdvisor)。
- 集群组件:API Server 延迟/错误率、etcd 健康与 leader 变化、controller-manager/scheduler 异常(Kubernetes 组件指标)。
- 服务可用性:Service/Pod 就绪探针失败、5xx/4xx 错误率(应用与 Ingress 指标)。
- Prometheus 告警规则示例(PrometheusRule):
- Pod 频繁重启
- alert: PodCrashLooping
- expr: rate(kube_pod_container_status_restarts_total{job=“kube-state-metrics”}[5m]) > 0
- for: 5m
- labels: severity=warning
- annotations: summary=“Pod {{ $labels.namespace }}/{{ $labels.pod }} 重启频繁”
- 节点磁盘将满
- alert: NodeDiskPressure
- expr: (1 - (node_filesystem_avail_bytes{fstype!=“tmpfs”} / node_filesystem_size_bytes{fstype!=“tmpfs”})) > 0.85
- for: 10m
- labels: severity=critical
- annotations: summary=“Node {{ $labels.instance }} 磁盘使用率 > 85%”
- API Server 高延迟
- alert: APIServerHighLatency
- expr: histogram_quantile(0.99, sum(rate(apiserver_request_duration_seconds_bucket{job=“apiserver”}[5m])) by (le)) > 1
- for: 5m
- labels: severity=warning
- annotations: summary=“API Server 99% 延迟 > 1s”
五 生产实践与排错清单
- 实践建议:
- 为 Prometheus 配置 持久化存储(避免数据丢失)、合理设置 scrape 间隔 与 资源 requests/limits。
- 使用 RBAC 最小权限为监控组件授权,开启 Pod Security 与 NetworkPolicy 隔离。
- 为 Grafana 配置 只读数据源 与 告警通知渠道(如企业微信/钉钉/Slack)。
- 定期 升级 监控组件与集群版本,关注安全补丁。
- 快速排错:
- 指标缺失:检查 ServiceMonitor/Endpoints、RBAC、NetworkPolicy、抓取端口与路径。
- 节点无数据:确认 Node Exporter 运行、kubelet 开启 metrics 端口、Prometheus 目标 UP。
- HPA 不生效:确认 Metrics Server 就绪、资源 requests/limits 已设置、指标名称与阈值正确。