跳到主要内容

Kubernetes 监控

Kubernetes 监控至少区分三类信号:Node 与容器资源使用、Kubernetes 对象期望与实际状态、应用业务指标。不要仅凭 CPU 和内存判断服务健康,也不要把 kube-state-metrics 的对象状态当成容器真实使用率。

1. Kubernetes 指标来源​

来源提供的信号常见指标
kubelet / cAdvisor容器资源与运行时CPU、内存、文件系统、网络
kube-state-metricsKubernetes 对象状态Deployment 副本、Pod 状态、HPA、PVC
node_exporter节点操作系统CPU、内存、磁盘、网络、内核
应用 /metrics业务与应用运行状态QPS、错误率、延迟、队列
控制面组件API Server、etcd、调度器、控制器请求延迟、leader、etcd 存储与错误

2. Prometheus Operator 与 kube-prometheus-stack​

Prometheus Operator 通过 CRD 管理 Prometheus、Alertmanager、ServiceMonitor、PodMonitor 与 PrometheusRule。kube-prometheus-stack 将 Operator、常用 Exporter、Grafana 和规则打包,适合作为集群监控基线。

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm upgrade --install monitoring prometheus-community/kube-prometheus-stack \
--namespace monitoring --create-namespace

生产环境应使用 values 文件固定 chart 版本、持久卷、资源限制、告警接收器、Ingress、RBAC 和选择器,不要直接依赖默认值。

3. ServiceMonitor​

ServiceMonitor 选择 Service,再按 Service 端口名称创建抓取目标:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: checkout
namespace: monitoring
labels:
release: monitoring
spec:
namespaceSelector:
matchNames: [shop]
selector:
matchLabels:
app.kubernetes.io/name: checkout
endpoints:
- port: metrics
path: /metrics
interval: 30s

selector 匹配的是 Service 标签,endpoints.port 匹配的是 Service 端口名称。若目标未出现,检查 Service 标签、ServiceMonitor 标签、Prometheus selector、Namespace 与端口名。

4. PodMonitor​

PodMonitor 直接选择 Pod,适合没有 Service 的 Agent 或单独端点:

apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: worker
namespace: monitoring
labels:
release: monitoring
spec:
namespaceSelector:
matchNames: [shop]
selector:
matchLabels:
app.kubernetes.io/name: worker
podMetricsEndpoints:
- port: metrics
path: /metrics

5. 核心指标​

应覆盖 API Server 请求错误与延迟、etcd 磁盘与 leader、kubelet 资源和 PLEG、控制器/调度器 leader 状态、Node Ready、Deployment 副本差异、Pod 重启、PVC 容量与证书到期。具体指标会随 Kubernetes 版本变化,应以实际 /metrics 与 chart 规则为准。

Kubernetes 工作负载和运维流程参见 Kubernetes 实战。