Kubernetes 集群监控
本文档讲的是用运维平台监控一个 Kubernetes 集群(采集节点、容器、Pod 指标)。如果你要把运维平台本身部署到 Kubernetes,请看「基于 Kubernetes 部署」(本目录 kubernetes 页)。
运维平台可采集 Kubernetes 集群的节点资源、容器资源(cAdvisor)和集群对象状态(kube-state-metrics),在前端「资源监控 → K8s」面板统一展示节点、Pod、Deployment、容器等监控视图。
根据运维平台自身的部署形态,二选一,两种方法都提供完整数据:
| 方法一 · 集群外(static) | 方法二 · 集群内(incluster) | |
|---|---|---|
| 何时用 | 运维平台以 Docker Compose 部署,与被监控集群分开(私有部署最 常见) | 整套运维平台就部署在被监控集群内 |
| 采集方式 | ops-prometheus 用 token 远程抓取 NodePort + kubelet | ServiceAccount 自动发现,集群内直采 |
| 步骤量 | 约 5 步 | 约 2 步 |
| 是否需要 token | 需要 | 不需要 |
| 网络要求 | ops 能访问节点 30080/30081/10250 | 集群内互通即可 |
下文各步骤的
k8s/xxx.yaml指采集组件 manifest,随运维平台离线包提供,位于plugin/allinone/k8s/目录,可直接kubectl apply。
方法一:集群外(static)
运维平台以 Docker Compose 部署在被监控集群外,远程抓取。标准配置即包含容器级 cAdvisor。
ops 容器需能网络 访问被监控集群各节点的 30080、30081、10250 端口。
-
在被监控的 Kubernetes 集群部署采集组件:
kubectl apply \-f k8s/00-namespace.yaml \-f k8s/10-kube-state-metrics.yaml \-f k8s/20-node-exporter.yaml \-f k8s/15-metrics-reader.yaml -
获取地址与 token:
- kube-state-metrics:
节点IP:30080 - node_exporter:
节点IP:30081 - kubelet:
节点IP:10250(Kubernetes 自带,无需部署)
kubectl -n mdis-monitoring get secret mdis-metrics-reader-token \-o jsonpath='{.data.token}' | base64 -d - kube-state-metrics:
-
在
ops-prometheus配置环境变量(完整说明见本目录「环境变量」页):ENV_K8S_MONITOR_MODE: "static"ENV_PROMETHEUS_K8S_KSM: "k8s/192.168.1.10:30080"ENV_PROMETHEUS_K8S_NODE: "n1/192.168.1.10:30081,n2/192.168.1.11:30081"ENV_PROMETHEUS_K8S_KUBELET: "n1/192.168.1.10:10250,n2/192.168.1.11:10250"ENV_K8S_BEARER_TOKEN: "<上一步获取的 token>"多节点时
NODE/KUBELET按别名/IP:端口逗号分隔,每节点一条。 -
重建容器使配置生效:
docker compose -f ops.yaml down && docker compose -f ops.yaml up -d -
验证:Prometheus
/targets中kube-state-metrics、k8s-node、k8s-kubelet、k8s-cadvisor四个 job 均为UP,前端「资源监控 → K8s」面板有数据。
如果只要集群对象状态 + 节点资源、不需要每容器指标,可省略 15-metrics-reader.yaml 及 ENV_PROMETHEUS_K8S_KUBELET / ENV_K8S_BEARER_TOKEN。但 K8s 仪表盘多数面板是利用率口径(依赖容器指标),建议保留。
方法二:集群内(incluster)
整套运维平台部署在被监控集群内时,ops-prometheus 作为 Pod 自动发现,零地址、零 token。
-
部署 kube-state-metrics 与集群内 Prometheus:
kubectl apply \-f k8s/00-namespace.yaml \-f k8s/10-kube-state-metrics.yaml \-f k8s/30-prometheus-incluster.yaml -
完成。ServiceAccount + apiserver proxy 自动发现 kubelet、cAdvisor、kube-state-metrics、pods,无需暴露 kubelet 端口、无需 kubeconfig。
-
验证:
kubectl -n mdis-monitoring get podscurl 节点IP:30090/prometheus/server/api/v1/targetsk8s-kubelet/k8s-cadvisor/k8s-kube-state-metrics均为UP。
采集组件清单
| 文件 | 作用 | 方法一 | 方法二 |
|---|---|---|---|
00-namespace.yaml | 命名空间 mdis-monitoring | ✅ | ✅ |
10-kube-state-metrics.yaml | kube-state-metrics + RBAC + Service(NodePort 30080) | ✅ | ✅ |
15-metrics-reader.yaml | 抓 cAdvisor 用的长效 token | ✅ | — |
20-node-exporter.yaml | node_exporter DaemonSet + Service(NodePort 30081) | ✅ | 可选 |
30-prometheus-incluster.yaml | 集群内 ops-prometheus + RBAC + Service(NodePort 30090) | — | ✅ |