Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >企业级 Kubernetes 监控体系设计与实践

企业级 Kubernetes 监控体系设计与实践

作者头像
SRE运维进阶之路
发布于 2025-04-01 03:18:30
发布于 2025-04-01 03:18:30
14202
代码可运行
举报
运行总次数:2
代码可运行

一、系统架构全景解析

1.1 K8s 分层架构

架构层级

核心组件

控制平面层

etcd、API Server、Scheduler、Controller Manager

工作节点层

Kubelet、Kube-proxy、CRI(容器运行时接口)、CNI(网络插件)、CSI(存储插件)

资源对象层

Pod、Deployment、StatefulSet、Horizontal Pod Autoscaler

扩展插件层

CoreDNS、Ingress Controller、KEDA(事件驱动自动扩缩)、Argo Rollouts

1.2 监控体系架构

核心设计要点:

  • 高可用架构:Prometheus 双副本部署,通过 Remote Write 统一写入 VictoriaMetrics 集群
  • 告警中枢:外置 AlertManager 集群实现告警收敛,通过 Webhook 对接告警系统
  • 数据持久化:alertsnitch 组件实现告警事件存储,VictoriaMetrics 作为统一时序数据库
  • 可视化层:Grafana 统一对接 VictoriaMetrics 数据源,实现监控数据可视化

二、告警管理体系建设

2.1 告警分组策略

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
route:
  group_by: [appid, alertname]
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 3h
  receiver: 'default-receiver'

关键实践:

  1. 1. 业务维度治理:通过 AppID 标签实现应用级告警归并,自动路由至对应研发团队
  2. 2. 基础架构告警:系统组件告警统一配置 SRE 专属 AppID,保障基础设施稳定性
  3. 3. 标签规范:所有资源对象(Pod/Deployment 等)强制携带 AppID 标签
  4. 4. 告警溯源:通过 PromQL 实现告警事件与业务指标的关联分析

三、监控系统部署实践

3.1 Prometheus 高可用部署

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 添加 Helm 仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

# 下载 Chart 包(注意 k8s 和 Prometheus-Operator 的对应关系)
helm pull prometheus-community/kube-prometheus-stack --version 69.8.2
tar -xvf kube-prometheus-stack-69.8.2.tgz
cd kube-prometheus-stack/

# 镜像加速
chmod +x update_registry.sh
./update_registry.sh
# 安装
helm -n monitoring install kube-prometheus-stack ./ --create-namespace

镜像加速方案:

完整脚本见附录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
# 自动化镜像地址替换脚本 demo
find ./ -type f -name "*.yaml" -exec sed -i \
    -e 's|registry.k8s.io|m.daocloud.io/registry.k8s.io|g' \
    -e 's|quay.io|m.daocloud.io/quay.io|g' \
    -e 's|docker.io|m.daocloud.io/docker.io|g' {} \;

3.2 指标采集体系

采集架构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PrometheusServiceMonitorServiceEndpointPod

故障排查路径:

  1. 1. 验证 ServiceMonitor 选择器标签匹配
  2. 2. 检查对应 Service 的 Endpoints 状态
  3. 3. 确认组件 Metric 端口可达性
  4. 4. 验证网络策略(NetworkPolicy)配置

3.3 资源对象层 AppID 标签暴露

主要都是 kube-state-metrics 收集的, K8s 内置的资源对象 , 只需要添加启动参数即可

- --metric-labels-allowlist=nodes=[env],deployments=[appid],pods=[appid],services=[appid]

3.4 自定义crd 标签暴露

Argo Rollouts 指标采集配置:

代码语言:javascript
代码运行次数:1
运行
AI代码解释
复制
# customresourcestate-argo.yaml
resources:
  - groupVersionKind:
      group: argoproj.io
      version: v1alpha1
      kind: Rollout
    metrics:
      - name: argo_rollout_appid
        help: "Argo Rollout application identifier"
        each:
          type: Info
          info:
            labelsFromPath:
              exported_namespace: [metadata, namespace]
            metricLabels:
              appid: .metadata.labels.appid

实施步骤:

1. 创建 ConfigMap 存储采集配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl -n monitoring create configmap customresourcestate-config --from-file=customresourcestate-argo.yaml

2. 扩展 Kube-State-Metrics RBAC 权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kube-state-metrics-argo
rules:
- apiGroups: ["apiextensions.k8s.io"]
  resources: ["customresourcedefinitions"]
  verbs: ["list", "watch"]
- apiGroups: ["argoproj.io"]
  resources: ["rollouts"]
  verbs: ["list", "watch"]

3. 挂载配置文件到 KSM Pod,添加启动参数 --custom-resource-state-config-file

代码语言:javascript
代码运行次数:1
运行
AI代码解释
复制
containers:
- args:
  - --custom-resource-state-config-file=/etc/config/customresourcestate-argo.yaml
  volumeMounts:
  - name: config-volume
    mountPath: /etc/config
volumes:
- name: config-volume
  configMap:
    name: customresourcestate-config

关联查询示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 获取带有 AppID 的 Rollout 副本可用率
kube_argo_rollouts_status_replicas_available 
* on(namespace, rollout_name) group_left(appid)
kube_customresource_argo_rollout_appid

四、监控可视化体系

4.1 全局概览看板

核心功能模块

  • 全局筛选器:集群(前端、后端、AI、大数据中间件、流水线等)、区域(IDC-上海、IDC-北京、阿里云、腾讯云、华为云等)、环境(产线、UT、泳道等)
  • 资源水位:节点数量、CPU/Memory 总量、Pod 配额使用率
  • 集群健康度:Etcd 选举状态、API Server 可用性、资源请求率、K8s 架构图(Flow Charting):按照上面的K8s架构分层图进行绘制,分为 K8s 资源对象块、控制平面块、工作节点块(kubelet、kube-proxy、CNI、CSI、CRI)、插件块 (每个小图标都是一个超链, 显示组件目前的状态(通过是否有告警判断), 超链可以自动跳转到各自组建的监控大盘中)
  • 异常监控:Node 负载水位线、Pod Crash 事件流

关键 PromQL 集锦

使用的关键 promql 函数 countunlesssumgroup_leftsummaxlabel_replacerateavgmin_over_time

4.2 应用级监控看板

监控维度

  • 资源维度:CPU/Memory 限流分析、存储 IOPS、网络吞吐量
  • 运行时指标:FD 使用率、线程数统计、TCP 连接状态
  • 业务指标:QPS/TPS、错误率、健康检查成功率
  • 事件中心Kubernetes 事件流、应用日志聚合

可视化设计原则

  1. 1. 采用分层展示结构:集群级 -> 节点级 -> 应用级
  2. 2. 使用热力图展示资源分布密度
  3. 3. 异常指标使用动态阈值告警
  4. 4. 关键性能指标展示同比/环比数据

五、最佳实践总结

  1. 1. 标签治理:严格执行 AppID 标签规范,确保监控-日志-追踪三位一体
  2. 2. 采集优化:按需配置采集间隔,重要指标 15s 粒度,业务指标 1m 粒度
  3. 3. 容量规划:预估存储用量 每日数据量 = 指标数量 × 采集频率 × 24h × 保留天数
  4. 4. 告警收敛:配置分级告警策略,关键告警立即通知,预警类告警延迟处理
  5. 5. 版本管理:Chart 版本与 Kubernetes 版本严格对应,定期验证兼容性

通过以上架构设计和实践方案,可构建覆盖基础设施、Kubernetes 核心组件、业务应用的立体化监控体系,为容器化业务提供全方位可观测性保障。

附录:

镜像加速脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash

# 检测操作系统类型
if [[ "$(uname)" == "Darwin" ]]; then
  # macOS
  SED_CMD="sed -i ''"
else
  # Linux 和其他
  SED_CMD="sed -i"
fi

# 查找当前目录及子目录下的所有 YAML 文件
find . -type f -name "values.yaml" -o -name "values.yml" | while read yaml_file; do
  echo "处理文件: $yaml_file"

  # 使用 awk 处理整个文件,以处理隔行的 registry 和 repository
  awk -v file="$yaml_file" -v sed_cmd="$SED_CMD" '
  BEGIN { registry = ""; in_block = 0; }

  /registry:/ {
    # 提取 registry 值
    for (i=1; i<=NF; i++) {
      if ($i == "registry:") {
        registry = $(i+1);
        gsub(/[",]/, "", registry);  # 移除可能的引号和逗号
        in_block = 1;
        print "找到 registry:", registry, "在文件", file;
      }
    }
  }

  /repository:/ {
    if (in_block && registry != "") {
      # 提取 repository 值
      for (i=1; i<=NF; i++) {
        if ($i == "repository:") {
          repo = $(i+1);
          gsub(/[",]/, "", repo);  # 移除可能的引号和逗号
          print "找到匹配的 repository:", repo, "在文件", file;

          # 构建并执行 sed 命令
          cmd = sed_cmd " '\''s|repository: " repo "|repository: " registry "/" repo "|g'\'' " file;
          system(cmd);

          # 重置状态
          in_block = 0;
          registry = "";
        }
      }
    }
  }

  # 如果遇到新的块开始,重置状态
  /^[^ ]/ {
    if ($1 != "registry:" && $1 != "repository:") {
      in_block = 0;
      registry = "";
    }
  }
  ' "$yaml_file"

  # 然后替换所有 registry 地址
  $SED_CMD 's|registry: docker.io|registry: m.daocloud.io|g' "$yaml_file"
  $SED_CMD 's|registry: registry.k8s.io|registry: m.daocloud.io|g' "$yaml_file"
  $SED_CMD 's|registry: quay.io|registry: m.daocloud.io|g' "$yaml_file"
  $SED_CMD 's|registry: ghcr.io|registry: m.daocloud.io|g' "$yaml_file"

  echo "完成处理: $yaml_file"
done

echo "所有 YAML 文件处理完成!"

我是 Clay, 下期见~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SRE运维进阶之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
二进制安装Kubernetes(k8s) v1.27.3 IPv4/IPv6双栈 可脱离互联网
https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了
小陈运维
2023/08/18
2K0
二进制安装Kubernetes(k8s) v1.27.3 IPv4/IPv6双栈 可脱离互联网
Prometheus Operator与kube-prometheus之二-如何监控1.23+ kubeadm集群
•系列文章: 标签 - Prometheus - 东风微鸣技术博客 (ewhisper.cn)[1]•Prometheus Operator 的上一篇: Prometheus Operator 与 kube-prometheus 之一 - 简介 - 东风微鸣技术博客 (ewhisper.cn)[2]
东风微鸣
2022/12/01
6930
Prometheus Operator与kube-prometheus之二-如何监控1.23+ kubeadm集群
K8s集群性能指标监控方案kube-prometheus-stack(helm)+Metrics Server安装Demo
「 带着凡世的梦想,将污秽的灵魂依偎在纯洁的天边。它们是所有流浪、追寻、渴望与乡愁的永恒象征。 ——赫尔曼·黑塞《彼得.卡门青》」
山河已无恙
2023/01/30
1.4K0
K8s集群性能指标监控方案kube-prometheus-stack(helm)+Metrics Server安装Demo
Helm 安装 Kubernetes 监控套件
Helm 安装 Grafana Prometheus Altermanager 套件安装helm# 安装helm工具curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3chmod 700 get_helm.sh./get_helm.sh下载离线包# 添加 prometheus-community 官方Helm Chart仓库helm repo add prometheus-c
小陈运维
2023/02/15
1.2K0
k8s-1.30.1版本一站式部署监控服务
官网:https://kubecm.cloud/zh-cn/introduction
希里安
2024/07/25
1590
k8s-1.30.1版本一站式部署监控服务
Kubernetes上的Backstage
本文将介绍如何使用 Helm Chart 在 Kubernetes 上部署 Backstage,并与 Argo CD 和 Prometheus 集成。
云云众生s
2024/06/30
1940
Kubernetes上的Backstage
监控 Kubernetes 集群证书过期时间的三种方案
Kubernetes 中大量用到了证书, 比如 ca证书、以及 kubelet、apiserver、proxy、etcd等组件,还有 kubeconfig 文件。
东风微鸣
2022/12/01
2.1K0
监控 Kubernetes 集群证书过期时间的三种方案
详解kubernetes的企业级监控(付文档)
• request(需求资源):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod • limit(资源限额):即运行Pod期间,可能内存使用量会增加,可以在yaml文件中设定最多能使用多少内存配置资源限额
IT运维技术圈
2022/10/24
1.2K0
kubernetes监控-prometheus(十六)
通过各种exporter采集不同维度的监控指标,并通过Prometheus支持的数据格式暴露出来,Prometheus定期pull数据并用Grafana展示,异常情况使用AlertManager告警。
yuezhimi
2020/09/30
7960
kubernetes监控-prometheus(十六)
【K8s】专题七:Kubernetes 安装方法之 KubeOne
Kubermatic KubeOne 可以在云、本地、 边缘和物联网等环境安装高可用集群以及单主集群。
行者Sun
2024/09/02
1010
【K8s】专题七:Kubernetes 安装方法之 KubeOne
kubernetes监控-prometheus+grafana完美监控
通过各种exporter采集不同维度的监控指标,并通过Prometheus支持的数据格式暴露出来,Prometheus定期pull数据并用Grafana展示,异常情况使用AlertManager告警。
kubernetes中文社区
2019/06/21
6.4K0
kubernetes监控-prometheus+grafana完美监控
Kubernetes(k8s)-Prometheus安装
作者介绍:简历上没有一个精通的运维工程师。下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2025/03/27
990
Kubernetes(k8s)-Prometheus安装
使用 OpenTelemetry Collector 采集 Kubernetes 指标数据
Kubernetes 已成为一个被广泛采用的行业工具,对可观测性工具的需求也在不断增加。为此,OpenTelemetry 创建了许多不同的工具,来帮助 Kubernetes 用户观察他们的集群和服务。
我是阳明
2023/09/11
2.2K0
使用 OpenTelemetry Collector 采集 Kubernetes 指标数据
Kubernetes(k8s)-Ingress介绍&安装
作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2025/01/15
2780
Kubernetes(k8s)-Ingress介绍&安装
一文搞懂基于 Helm 部署 Prometheus Stack 全家桶
Hello folks! 今天我们介绍一下基于 Helm 快速部署安装 Prometheus Stack 的文章,在本文中,我们将讨论 Prometheus 和 Grafana,以及如何使用 Helm 图表为任何 Kubernetes 集群设置监控。我们还将学习如何将 Prometheus 和 Grafana 连接在一起,并在 Grafana 上设置一个基本的仪表板来监控 Kubernetes 集群上的资源。
Luga Lee
2023/02/14
5.2K3
一文搞懂基于 Helm 部署 Prometheus Stack 全家桶
Gitlab CI 集成 Kubernetes
首先将本节所用到的代码库从 Github 上获得:cnych/gitlab-ci-k8s-demo,可以在 Gitlab 上新建一个项目导入该仓库,当然也可以新建一个空白的仓库,然后将 Github 上面的项目 Clone 到本地后,更改远程仓库地址即可:
jwangkun
2021/12/23
1.6K0
Gitlab CI 集成 Kubernetes
微服务监控神器Prometheus的安装部署
Prometheus提供了容器和云原生领域数据搜集、存储、处理、可视化和告警一套完整的解决方案,最初时是由SoundCloud公司开发的。自2012年开源以来社区成员就不断递增。如今的Prometheus已经发展到继Kubernetes后第2个正式加入CNCF基金会的项目
Java学习录
2019/05/21
9560
微服务监控神器Prometheus的安装部署
利用 Kruise Rollouts 对 Kubernetes 资源实现金丝雀发布
Kruise Rollouts 是一个旁路组件,它为一系列 Kubernetes 工作负载(如 Deployment and CloneSet)提供高级部署功能,如金丝雀、流量路由和渐进式交付功能
philentso
2022/12/29
9690
Ops实践 | K8S云原生环境下集群资源监控指标拉取与可视化展示实践(补充)
描述: 在《Ops实践 | 从零开始,在云原生环境下快速实现K8S集群可视化监控》文章中,针对 Kubernetes 集群资源监控部分,作者写得有些含糊不清,所以此文我将对K8S集群组件(kubelet、kube-proxy)以及使用kube-state-metric暴露资源(deployment、statefulset、service、pod)的监控指标整理介绍。
全栈工程师修炼指南
2023/12/01
9060
Ops实践 | K8S云原生环境下集群资源监控指标拉取与可视化展示实践(补充)
(3 / 3)CentOS搭建K8s微服务20条
k8s第三方资源监控资源展示平台、Prometheus(数据收集)、Grafana(数据展示)
老张的哲学
2023/01/09
5530
推荐阅读
相关推荐
二进制安装Kubernetes(k8s) v1.27.3 IPv4/IPv6双栈 可脱离互联网
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档