跳到主要内容

Kubernetes 集群监控

与「在 Kubernetes 上部署运维平台」的区别

本文档讲的是用运维平台监控一个 Kubernetes 集群(采集节点、容器、Pod 指标)。如果你要把运维平台本身部署到 Kubernetes,请看「基于 Kubernetes 部署」(本目录 kubernetes 页)。

运维平台可采集 Kubernetes 集群的节点资源容器资源(cAdvisor)集群对象状态(kube-state-metrics),在前端「资源监控 → K8s」面板统一展示节点、Pod、Deployment、容器等监控视图。

根据运维平台自身的部署形态,二选一,两种方法都提供完整数据

方法一 · 集群外(static)方法二 · 集群内(incluster)
何时用运维平台以 Docker Compose 部署,与被监控集群分开(私有部署最常见)整套运维平台就部署在被监控集群内
采集方式ops-prometheus 用 token 远程抓取 NodePort + kubeletServiceAccount 自动发现,集群内直采
步骤量约 5 步约 2 步
是否需要 token需要不需要
网络要求ops 能访问节点 30080/30081/10250集群内互通即可

下文各步骤的 k8s/xxx.yaml 指采集组件 manifest,随运维平台离线包提供,位于 plugin/allinone/k8s/ 目录,可直接 kubectl apply

方法一:集群外(static)

运维平台以 Docker Compose 部署在被监控集群外,远程抓取。标准配置即包含容器级 cAdvisor。

前提

ops 容器需能网络访问被监控集群各节点的 300803008110250 端口。

  1. 被监控的 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
  2. 获取地址与 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
  3. 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:端口 逗号分隔,每节点一条。

  4. 重建容器使配置生效:

    docker compose -f ops.yaml down && docker compose -f ops.yaml up -d
  5. 验证:Prometheus /targetskube-state-metricsk8s-nodek8s-kubeletk8s-cadvisor 四个 job 均为 UP,前端「资源监控 → K8s」面板有数据。

仅需集群概览时

如果只要集群对象状态 + 节点资源、不需要每容器指标,可省略 15-metrics-reader.yamlENV_PROMETHEUS_K8S_KUBELET / ENV_K8S_BEARER_TOKEN。但 K8s 仪表盘多数面板是利用率口径(依赖容器指标),建议保留

方法二:集群内(incluster)

整套运维平台部署在被监控集群内时,ops-prometheus 作为 Pod 自动发现,零地址、零 token。

  1. 部署 kube-state-metrics 与集群内 Prometheus:

    kubectl apply \
    -f k8s/00-namespace.yaml \
    -f k8s/10-kube-state-metrics.yaml \
    -f k8s/30-prometheus-incluster.yaml
  2. 完成。ServiceAccount + apiserver proxy 自动发现 kubelet、cAdvisor、kube-state-metrics、pods,无需暴露 kubelet 端口、无需 kubeconfig。

  3. 验证

    kubectl -n mdis-monitoring get pods
    curl 节点IP:30090/prometheus/server/api/v1/targets

    k8s-kubelet / k8s-cadvisor / k8s-kube-state-metrics 均为 UP

采集组件清单

文件作用方法一方法二
00-namespace.yaml命名空间 mdis-monitoring
10-kube-state-metrics.yamlkube-state-metrics + RBAC + Service(NodePort 30080)
15-metrics-reader.yaml抓 cAdvisor 用的长效 token
20-node-exporter.yamlnode_exporter DaemonSet + Service(NodePort 30081)可选
30-prometheus-incluster.yaml集群内 ops-prometheus + RBAC + Service(NodePort 30090)