文章

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_exporterCPU/内存/磁盘/网络/文件描述符
对象kube-state-metricsPod 数、副本、Pending、RestartCount
容器cAdvisor(kubelet 内置)容器 CPU/内存/网络、PSI 压力(container_cpu_pressure_*)
网络Cilium Hubbleflow(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 清单

  1. 集群概览:节点 CPU/内存饱和度(USE)、Pod 健康
  2. 工作负载 RED:每个 Deployment 的 Rate/Errors/Duration
  3. 网络 flow:Hubble 拓扑 + drop 排行
  4. SLO 预算:错误预算剩余 + 燃烧率(见 SLO/SLI 错误预算

关联知识

参考资源

学习时间

内容日期状态
K8s 可观测性实战2026-07-24完成:三层指标源、Operator CRD、Hubble 接入、排障 SOP、Dashboard 清单

状态

  • 指标三层模型
  • Prometheus Operator
  • Hubble 接入
  • 排障 SOP
  • Dashboard 清单