K8s 可观测性实战
K8s 可观测性实战
一句话:K8s 可观测性的目标是——任何一次 Pod 异常、网络丢包、性能劣化,都能从统一面板定位到根因。落地靠三件事:指标源接全、Prometheus Operator 管起来、Hubble 补网络层。
指标来源三层模型
graph TD
NODE[节点层: node_exporter] --> P[Prometheus]
OBJ[K8s 对象层: kube-state-metrics] --> P
CTR[容器层: cAdvisor] --> P
NET[网络层: Cilium Hubble] --> P
APP[应用层: /metrics + OTel] --> P
P --> G[Grafana]
| 层 | 组件 | 暴露的关键指标 |
|---|---|---|
| 节点 | node_exporter | CPU/内存/磁盘/网络/文件描述符 |
| 对象 | kube-state-metrics | Pod 数、副本、Pending、RestartCount |
| 容器 | cAdvisor(kubelet 内置) | 容器 CPU/内存/网络、PSI 压力(container_cpu_pressure_*) |
| 网络 | Cilium Hubble | flow(Pod→Pod)、Policy 放行/拒绝、L7 请求 |
| 应用 | /metrics + OTel | 业务 RED 指标、trace |
cAdvisor 的 PSI 指标正是你
cgroup v2 详解里 PSI 的容器化呈现——可观测性把它们接到了 Grafana 面板。
Prometheus Operator:K8s 原生部署
Operator 把 Prometheus 本身也变成 K8s 资源(CRD):
| CRD | 作用 |
|---|---|
Prometheus | 声明一个 Prometheus 实例(副本、存储、scrape 配置) |
ServiceMonitor | 声明”哪些 Service 该被抓取”(替代手写 scrape config) |
PodMonitor | 抓 Pod 级 /metrics |
PrometheusRule | 声明告警/记录规则(Git 管理) |
Alertmanager | 声明告警分发 |
# 声明抓取某 namespace 下带 annotation 的 Service
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: api-monitor
spec:
selector:
matchLabels: { app: api }
endpoints:
- port: http-metrics
interval: 30s
和你的
CI-CD系列一致:监控配置也走 Git + CRD,基础设施即代码。
Hubble 接入(网络层可观测)
Cilium Hubble 暴露 metrics(hubble_*) 和 flow:
# 开启 Hubble metrics(Cilium 侧)
helm upgrade cilium cilium/cilium \
--set hubble.metrics.enabled="{dns,drop,tcp,flow,port-distribution}"
# 实时看 flow(谁在跟谁通信、被策略拒绝没)
hubble observe --namespace prod --protocol http
hubble observe --type drop # 只看被丢的包(排障金矿)
在 Grafana 里 Hubble drop 指标 + Jaeger trace 联动,能回答”服务慢是网络策略丢包还是下游慢”——这是纯 Metrics 做不到的。
典型排障 SOP(用可观测性定位)
graph TD
A[告警: 延迟升高] --> B[Grafana 看 RED: 哪服务 P99 高]
B --> C{是网络吗?}
C -->|是| D[hubble observe --type drop 看丢包]
C -->|否| E[看该服务 trace: 哪段 span 慢]
E --> F[下钻该 span 的日志 logql]
D --> G[查 Cilium NetworkPolicy]
F --> H[定位慢在 DB/下游/GC]
推荐 Dashboard 清单
- 集群概览:节点 CPU/内存饱和度(USE)、Pod 健康
- 工作负载 RED:每个 Deployment 的 Rate/Errors/Duration
- 网络 flow:Hubble 拓扑 + drop 排行
- SLO 预算:错误预算剩余 + 燃烧率(见
SLO/SLI 错误预算)
关联知识
- 可观测性知识总览 — 本篇是落地章
- Metrics 与 Prometheus 实战 — Operator/ServiceMonitor 部署
- Cilium Hubble 可观测性与运维排障 — 网络层指标与 flow
- cgroup v2 详解 — PSI 经 cAdvisor 入 Prometheus
- K8s 网络架构总览 — 数据包路径排查与 trace 思维一致
- LLM 推理服务化知识总览 — 推理服务指标接本套体系
参考资源
- Prometheus Operator: https://prometheus-operator.dev/
- Cilium Hubble: https://docs.cilium.io/en/stable/observability/
学习时间
| 内容 | 日期 | 状态 |
|---|---|---|
| K8s 可观测性实战 | 2026-07-24 | 完成:三层指标源、Operator CRD、Hubble 接入、排障 SOP、Dashboard 清单 |
状态
- 指标三层模型
- Prometheus Operator
- Hubble 接入
- 排障 SOP
- Dashboard 清单