炎龙智能炎龙智能
AIOPS智能运维平台
AIOPS智能运维平台
  • K8s集群监控

K8s集群监控

K8s集群监控模块提供对Kubernetes集群的全面监控能力,帮助用户实时掌握集群、节点、命名空间、Pod、容器等资源的运行状态和性能指标,确保容器化应用的稳定运行。

1. 功能概述

K8s集群监控模块提供以下核心功能:

  • 集群概览:实时监控集群的整体健康状态和资源使用情况
  • 节点监控:监控集群中所有节点的CPU、内存、磁盘、网络等性能指标
  • 工作负载监控:监控Deployment、StatefulSet、DaemonSet等工作负载的状态和指标
  • Pod监控:监控所有Pod的运行状态、重启次数、资源使用等
  • 容器监控:监控容器级别的CPU、内存、网络、文件系统等指标
  • 服务监控:监控Service、Ingress等服务组件的访问情况和性能
  • 事件监控:收集和分析Kubernetes事件,及时发现集群异常
  • 集群拓扑:可视化展示集群资源之间的关系和依赖
  • 自动发现:自动发现集群中的新资源并加入监控

2. 监控指标

2.1 集群级别指标

指标名称单位描述告警阈值建议
节点就绪率%就绪节点数/总节点数<95%
Pod就绪率%就绪Pod数/总Pod数<90%
资源使用率(CPU)%集群CPU资源使用率>80%
资源使用率(内存)%集群内存资源使用率>80%
资源使用率(存储)%集群存储资源使用率>80%
异常事件数个/分钟每分钟产生的警告/错误事件数>10
API Server请求延迟msKubernetes API Server的请求延迟>100ms
API Server错误率%API Server请求错误比例>1%

2.2 节点级别指标

指标名称单位描述告警阈值建议
节点CPU使用率%节点CPU总体使用率>85%
节点内存使用率%节点内存总体使用率>85%
节点磁盘使用率%节点根分区使用率>85%
节点网络发送速率MB/s节点网络发送数据的速率-
节点网络接收速率MB/s节点网络接收数据的速率-
节点容器运行数个节点上运行的容器数量-
节点Pod运行数个节点上运行的Pod数量-
节点Pod限制数个节点可运行的最大Pod数-
节点就绪状态-节点是否就绪非Ready状态

2.3 Pod级别指标

指标名称单位描述告警阈值建议
Pod CPU使用率%Pod的CPU使用率(相对于请求/限制)>80%
Pod内存使用率%Pod的内存使用率(相对于请求/限制)>80%
Pod重启次数次Pod重启次数>3次/小时
Pod就绪状态-Pod是否就绪非Ready状态
Pod容器状态-Pod中容器的状态CrashLoopBackOff
Pod网络接收流量KB/sPod网络接收速率-
Pod网络发送流量KB/sPod网络发送速率-
Pod重启原因-Pod重启的原因-

2.4 容器级别指标

指标名称单位描述告警阈值建议
容器CPU使用率%容器CPU使用率>80%
容器内存使用率%容器内存使用率>80%
容器文件系统使用率%容器挂载的文件系统使用率>80%
容器网络接收流量KB/s容器网络接收速率-
容器网络发送流量KB/s容器网络发送速率-
容器CPU限制核容器的CPU限制-
容器内存限制MB/GB容器的内存限制-
容器CPU请求核容器的CPU请求-
容器内存请求MB/GB容器的内存请求-

2.5 工作负载指标

指标名称单位描述告警阈值建议
期望Pod数个工作负载期望的Pod数量-
就绪Pod数个工作负载就绪的Pod数量不等于期望Pod数
可用Pod数个工作负载可用的Pod数量不等于期望Pod数
工作负载重启次数次/小时工作负载中Pod的重启次数>5次/小时

3. 部署与配置

3.1 安装Node Exporter

Node Exporter用于采集节点级别的指标:

# 使用DaemonSet部署Node Exporter
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/main/manifests/nodeExporter-daemonset.yaml

3.2 安装kube-state-metrics

kube-state-metrics用于采集Kubernetes资源状态指标:

# 部署kube-state-metrics
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/master/examples/standard/cluster-role-binding.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/master/examples/standard/cluster-role.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/master/examples/standard/deployment.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/master/examples/standard/service-account.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/master/examples/standard/service.yaml

3.3 配置AIOPS平台接入

  1. 在AIOPS平台界面中,点击"配置中心" > "数据源管理"
  2. 点击"新增数据源",选择"Kubernetes"类型
  3. 填写以下信息:
    • 名称:K8s集群名称
    • API Server地址:Kubernetes API Server地址(如 https://kubernetes.default.svc)
    • 认证方式:选择合适的认证方式(如Service Account Token、kubeconfig等)
    • 访问令牌:如果使用Service Account Token,填写令牌内容
    • kubeconfig:如果使用kubeconfig,上传配置文件
    • 采集间隔:设置数据采集间隔,默认为15秒
  4. 点击"测试连接"验证连接是否成功
  5. 点击"确定"保存配置

3.4 配置RBAC权限

确保用于监控的服务账户有足够的权限:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: aiops-monitor
  namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: aiops-monitor-role
rules:
- apiGroups: [""]
  resources: ["nodes", "pods", "services", "endpoints", "configmaps", "events"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
  resources: ["deployments", "statefulsets", "daemonsets", "replicasets"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["batch"]
  resources: ["jobs", "cronjobs"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["metrics.k8s.io"]
  resources: ["nodes", "pods"]
  verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: aiops-monitor-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: aiops-monitor-role
subjects:
- kind: ServiceAccount
  name: aiops-monitor
  namespace: default

4. 使用指南

4.1 集群概览

在AIOPS平台界面中,点击左侧菜单栏的"监控中心" > "K8s集群监控" > "集群概览",进入集群概览页面:

  • 集群健康状态:展示集群的整体健康状态和关键指标
  • 节点状态分布:展示节点不同状态(Ready、NotReady等)的分布情况
  • 工作负载状态:展示各类工作负载的状态统计
  • 资源使用趋势:展示集群级别的CPU、内存等资源使用趋势
  • 异常事件:展示最近的异常事件

4.2 节点管理

点击"节点管理"标签页,进入节点列表页面:

  • 节点列表:展示所有集群节点的基本信息和状态
  • 节点详情:点击节点名称查看节点的详细监控数据
  • 节点筛选:支持按状态、标签等筛选节点
  • 节点操作:支持节点信息编辑、监控配置调整等操作

4.3 工作负载监控

点击"工作负载"标签页,进入工作负载监控页面:

  • 工作负载列表:展示所有工作负载的基本信息和状态
  • 工作负载类型筛选:支持按Deployment、StatefulSet、DaemonSet等类型筛选
  • 命名空间筛选:支持按命名空间筛选工作负载
  • 工作负载详情:点击工作负载名称查看详细监控数据和关联的Pod列表

4.4 Pod监控

点击"Pod"标签页,进入Pod监控页面:

  • Pod列表:展示所有Pod的基本信息和状态
  • Pod筛选:支持按命名空间、标签、状态等筛选Pod
  • Pod详情:点击Pod名称查看Pod的详细信息、容器列表、日志等
  • Pod重启记录:查看Pod的历史重启记录和原因

4.5 容器监控

在Pod详情页面,可以查看该Pod中所有容器的监控数据:

  • 容器列表:展示Pod中所有容器的基本信息
  • 容器资源使用:展示容器的CPU、内存、网络等资源使用情况
  • 容器日志:查看容器的实时和历史日志
  • 容器事件:查看与容器相关的事件

4.6 服务监控

点击"服务"标签页,进入服务监控页面:

  • 服务列表:展示所有Service的基本信息
  • 服务筛选:支持按命名空间、类型等筛选服务
  • 服务详情:点击服务名称查看服务的详细信息和关联的Pod
  • 服务访问统计:展示服务的访问量、响应时间等指标

4.7 事件监控

点击"事件"标签页,进入事件监控页面:

  • 事件列表:展示所有集群事件的详细信息
  • 事件筛选:支持按类型、级别、资源等筛选事件
  • 事件详情:查看事件的详细信息和相关资源
  • 事件统计:展示事件的数量统计和趋势

5. 告警配置

5.1 集群级别告警规则

- name: "集群节点就绪率低"
  description: "集群节点就绪率低于95%"
  severity: "high"
  condition: "sum(kube_node_status_condition{condition="Ready",status="true"}) / count(kube_node_status_condition{condition="Ready"}) * 100 < 95"
  duration: 300
  notifiers: ["email", "sms"]
  tags: ["k8s", "cluster"]

- name: "集群Pod就绪率低"
  description: "集群Pod就绪率低于90%"
  severity: "high"
  condition: "sum(kube_pod_status_ready{condition="true"}) / sum(kube_pod_status_phase{phase!="Failed",phase!="Succeeded"}) * 100 < 90"
  duration: 300
  notifiers: ["email", "sms"]
  tags: ["k8s", "cluster"]

5.2 节点级别告警规则

- name: "节点CPU使用率高"
  description: "节点CPU使用率超过85%"
  severity: "high"
  condition: "100 - (avg by(instance)(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85"
  duration: 300
  notifiers: ["email", "sms"]
  tags: ["k8s", "node"]

- name: "节点内存使用率高"
  description: "节点内存使用率超过85%"
  severity: "high"
  condition: "(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 85"
  duration: 300
  notifiers: ["email", "sms"]
  tags: ["k8s", "node"]

- name: "节点未就绪"
  description: "节点处于NotReady状态"
  severity: "critical"
  condition: "kube_node_status_condition{condition="Ready",status="true"} == 0"
  duration: 60
  notifiers: ["email", "sms"]
  tags: ["k8s", "node"]

5.3 Pod级别告警规则

- name: "Pod重启频繁"
  description: "Pod在1小时内重启超过3次"
  severity: "high"
  condition: "rate(kube_pod_container_status_restarts_total[1h]) > 3"
  duration: 60
  notifiers: ["email", "sms"]
  tags: ["k8s", "pod"]

- name: "Pod未就绪"
  description: "Pod处于未就绪状态"
  severity: "high"
  condition: "kube_pod_status_ready{condition="true"} == 0"
  duration: 300
  notifiers: ["email", "sms"]
  tags: ["k8s", "pod"]

- name: "Pod内存使用率高"
  description: "Pod内存使用率超过80%"
  severity: "medium"
  condition: "container_memory_usage_bytes{container!="",container!="POD"} / container_spec_memory_limit_bytes{container!="",container!="POD"} * 100 > 80"
  duration: 300
  notifiers: ["email"]
  tags: ["k8s", "pod"]

5.4 容器级别告警规则

- name: "容器CPU使用率高"
  description: "容器CPU使用率超过80%"
  severity: "medium"
  condition: "sum(rate(container_cpu_usage_seconds_total{container!="",container!="POD"}[5m])) by (container, pod, namespace) / sum(container_spec_cpu_quota{container!="",container!="POD"} / container_spec_cpu_period{container!="",container!="POD"}) by (container, pod, namespace) * 100 > 80"
  duration: 300
  notifiers: ["email"]
  tags: ["k8s", "container"]

- name: "容器文件系统使用率高"
  description: "容器文件系统使用率超过80%"
  severity: "medium"
  condition: "container_fs_usage_bytes{container!="",container!="POD"} / container_fs_limit_bytes{container!="",container!="POD"} * 100 > 80"
  duration: 300
  notifiers: ["email"]
  tags: ["k8s", "container"]

6. 性能优化建议

6.1 资源配置优化

  • 合理设置资源请求和限制:根据应用的实际需求设置合理的CPU和内存请求和限制
  • 避免资源过度分配:确保集群中所有Pod的资源请求总和不超过集群的实际资源容量
  • 使用HorizontalPodAutoscaler:根据负载自动调整Pod数量
  • 使用VerticalPodAutoscaler:根据实际使用情况自动优化Pod的资源请求和限制

6.2 集群规模优化

  • 节点数量调整:根据工作负载情况调整节点数量,避免资源浪费或不足
  • 节点亲和性和反亲和性:合理设置Pod的节点亲和性和反亲和性规则,优化Pod分布
  • 使用节点标签和污点:使用节点标签和污点实现工作负载的精细化调度
  • 考虑使用集群自动扩缩容:配置集群自动扩缩容,根据负载自动添加或移除节点

6.3 网络优化

  • 选择合适的网络插件:根据集群规模和网络需求选择合适的网络插件(如Calico、Flannel、Cilium等)
  • 优化Pod网络配置:调整MTU、连接跟踪等网络参数
  • 使用网络策略:实施适当的网络策略,优化网络流量
  • 考虑使用服务网格:对于复杂的微服务架构,考虑使用服务网格(如Istio)进行网络管理

6.4 存储优化

  • 选择合适的存储类:根据应用需求选择合适的存储类(如高性能SSD、标准HDD等)
  • 使用本地存储:对于需要高性能的应用,考虑使用本地存储
  • 实施存储QoS:为不同的工作负载设置不同的存储QoS
  • 优化PV回收策略:根据需要调整PV的回收策略(Retain、Delete等)

7. 故障排除

7.1 节点问题

  • 节点NotReady状态:检查kubelet服务状态、网络连接、磁盘空间等
  • 节点资源不足:查看节点资源使用情况,考虑迁移Pod或增加节点
  • 节点重启:检查节点日志,了解重启原因

7.2 Pod问题

  • Pod处于Pending状态:检查资源请求是否过大、节点资源是否充足、NodeSelector是否匹配等
  • Pod处于CrashLoopBackOff状态:检查容器日志,了解崩溃原因
  • Pod处于ImagePullBackOff状态:检查镜像名称、标签、镜像仓库访问权限等
  • Pod重启频繁:分析应用日志,检查代码问题或资源配置

7.3 工作负载问题

  • Deployment未就绪:检查Deployment的事件、Pod状态、滚动更新策略等
  • StatefulSet问题:检查StatefulSet的事件、PVC状态、Pod有序性等
  • DaemonSet未在所有节点运行:检查节点标签、污点容忍度等

7.4 服务问题

  • Service无法访问:检查Service配置、Endpoints状态、Pod就绪状态等
  • Ingress路由问题:检查Ingress规则、后端Service状态、Ingress控制器日志等
  • 服务响应缓慢:分析Pod资源使用情况、网络延迟、应用性能等

8. 最佳实践

8.1 监控覆盖范围

  • 全面监控:监控集群的各个层面,从节点到容器
  • 关注核心指标:重点关注影响应用性能和稳定性的核心指标
  • 设置合理阈值:根据应用特性和资源情况设置合理的告警阈值
  • 定期审查告警规则:定期审查和优化告警规则,减少误报

8.2 资源管理

  • 实施资源配额:为命名空间设置资源配额,避免单个应用占用过多资源
  • 使用命名空间隔离:使用命名空间隔离不同的应用或团队
  • 定期审查资源使用:定期审查和优化资源使用情况
  • 实施资源回收策略:及时清理未使用的资源,避免资源浪费

8.3 安全最佳实践

  • 使用RBAC:实施最小权限原则的RBAC配置
  • 定期更新镜像:定期更新容器镜像,修复安全漏洞
  • 使用镜像扫描:在部署前扫描镜像中的安全漏洞
  • 实施网络策略:限制Pod间的网络通信

8.4 日常维护

  • 定期备份etcd:定期备份etcd数据,确保集群数据安全
  • 定期更新Kubernetes版本:及时更新Kubernetes版本,获取新功能和安全补丁
  • 监控集群组件:监控etcd、API Server、Scheduler、Controller Manager等核心组件
  • 定期审查集群事件:定期审查集群事件,及时发现潜在问题
Last Updated:: 11/28/25, 3:06 PM
Contributors: sunxiaokun