扫盲:有效监控Kubernetes指标的最佳实践

引言

Kubernetes指标能够反映集群活动情况,是管理Kubernetes集群、节点和应用程序的关键依据。若缺少这些指标,排查问题与提升性能的难度都会显著增加。因此我们在此扫盲Kubernetes指标相关的收集、分析与监控最佳实践,进而保障集群健康、优化性能并更快地排查问题。

一、什么是Kubernetes指标?

Kubernetes 指标是用于反映 Kubernetes 环境中各类运行组件性能表现的信息数据。这类指标至关重要,因为若缺少它们,不仅难以发现问题,更无法在问题对应用程序造成损害前及时解决,同时也无法掌握集群的运行状态。

例如,在资源管理场景中,需通过 CPU 使用率、内存使用率等资源指标,判断是否需要对集群进行扩容或缩容操作,从而实现资源的高效利用。

二、Kubernetes指标的类型

Kubernetes 会生成多种指标,助力您了解不同系统层级的性能状况。以下是常见的指标类型:

(一)集群指标
在Kubernetes中,集群指运行应用程序的完整环境,包含控制平面(服务器、调度器、控制器管理器等)、节点(虚拟机或物理服务器)以及 Pod/工作负载(运行程序的容器)。

因此,集群指标是控制平面、节点、Pod/容器等组件指标的汇总数据,可提供与整个Kubernetes集群健康状态、性能表现及资源使用情况相关的信息。

  1. 节点CPU资源使用率
    该指标反映集群中各节点的CPU消耗量与可用容量的对比情况。将所有节点的CPU 消耗量相加,即可得到集群的总CPU使用率。每个节点的CPU算力是固定的,通过监控此指标,可判断节点当前处于过载、负载均衡还是未充分利用的状态。
  2. 节点内存使用情况
    该指标反映节点上所有进程(如 kubelet、容器运行时、运行中的 Pod 及系统服务)所使用的内存(RAM)量。内存使用情况包含以下几个关键组成部分:

工作集内存:进程正在使用且无法回收的内存。
缓存内存:文件系统缓存,在必要时可回收。
RSS(驻留集大小):占用物理内存(RAM)的内存部分。
通过监控节点内存使用情况,可避免集群资源耗尽——若内存资源耗尽,可能导致节点上的Pod被终止移除,或应用程序崩溃。

  1. 节点磁盘使用率
    当磁盘使用率超过特定阈值(如可用空间不足10%-15%)时,kubelet会驱逐节点上的某个Pod以腾出空间。

节点磁盘使用率反映集群中每个节点在硬盘上占用的空间量。若磁盘空间完全耗尽,节点上可能无法保留任何 Pod。

对于带有有状态存储的应用程序,需密切监控持久卷的空间使用率,确保其不会出现空间耗尽的情况。

(二)节点指标
在Kubernetes集群中,节点指标可提供大量关于节点健康状态与资源使用情况的信息。

相较于在集群层面盲目猜测问题,监控单个节点更有助于排查特定节点上的故障。例如,节点CPU使用率和节点内存消耗量可直观展示特定节点当前消耗的CPU容量与RAM数量。

除上述指标外,其他常见的节点指标还包括:

  1. 磁盘I/O与可用磁盘空间
    这是两个相关但独立的指标:

磁盘I/O:节点存储设备上的读写操作速率(单位:每秒操作数或每秒字节数)。
可用磁盘空间:节点文件系统上剩余的空闲空间。
高磁盘I/O会减慢执行大量读写任务的工作负载速度,进而导致延迟问题;同时,磁盘空间耗尽可能引发Pod驱逐或节点故障。

  1. 网络带宽使用情况
    该指标反映节点的网络接口每秒发送和接收的数据量(单位:字节或数据包),直接影响Pod、节点与外部服务之间的通信质量。若网络带宽出现问题,可能导致响应时间延迟或请求超时。

(三)控制平面指标
控制平面指标用于反映控制平面的运行效率。为便于理解,先明确 Kubernetes 的两个核心组成部分:

控制平面:相当于“大脑”,负责决策“哪些组件应在何处运行”。
节点:相当于“工作者”,实际运行应用程序与容器。
控制平面是Kubernetes决策能力与集群运行能力的核心载体,负责调度Pod、监控集群健康状态,并向工作节点下达操作指令。

跟踪控制平面指标,有助于发现资源问题及API服务器、调度器、控制器等重要服务的故障,进而提前应对潜在风险,保障集群的可靠性与响应速度。

  1. API 服务器请求延迟
    该指标反映Kubernetes API服务器响应客户端查询(如列出节点、部署资源、获取Pod信息等)所需的时间,直观体现消息传递与响应的耗时。

假设列出所有Pod的请求通常耗时100毫秒,若延迟突然增至2秒,则可能是服务器过载导致的。

API请求延迟过长意味着控制平面反应迟缓,可能导致整个集群的响应速度下降。

  1. 调度器队列长度
    该指标反映调度器队列中等待分配到节点的Pod当前数量,即截至当前所有未完成调度的Pod 总数。通过监控调度器队列长度,可及早发现集群资源短缺或调度器性能问题。

若调度器队列长度(通常较短)突然增至50以上,说明集群可能在资源分配或配置方面存在问题。队列长度过大可能导致应用部署延迟或工作负载扩展性受限,进而对服务可用性产生负面影响。

(四)Pod 指标
Pod指标是关于运行中Pod的性能数据。监控Pod指标有助于及早发现问题、判断应用程序的扩容时机,并在用户察觉问题前确保所有组件平稳运行。

除CPU使用率与内存消耗量外,常见的Pod指标还包括:

  1. Pod重启次数
    该指标反映Pod中的容器因崩溃、故障或资源短缺而重启的次数。若Pod频繁重启,通常意味着应用程序或资源配置存在问题。
  2. 待处理Pod数量
    该指标反映处于“待处理(Pending)”状态的 Pod 数量。待处理状态的Pod仍在等待被调度到某个节点,需等待Kubernetes调度器为其找到合适的节点。

Pod处于待处理状态的常见原因包括:

资源不足:没有任何节点拥有足够的空闲 CPU、内存或其他资源来运行该 Pod。
调度规则限制:节点选择器、污点、容忍度、Pod 亲和性与反亲和性等规则,可能限制 Pod 的部署位置,导致难以在现有节点中完成调度。
镜像问题:若Pod内的容器无法下载所需的镜像,Pod 将无法启动。
运行命令 kubectl get pods –field-selector=status.phase=Pending,可获取待调度 Pod 的列表。

  1. Pod状态
    Pod状态反映Pod当前的运行状态与健康状况,可判断其是否平稳运行或面临故障。常见的 Pod 状态包括:

待处理(Pending):Pod已被Kubernetes接受,但尚未完成节点调度。
运行中(Running):Pod已分配到节点,且至少有一个容器正在运行。
成功(Succeeded):Pod中的所有容器均已成功完成运行。
失败(Failed):Pod中的一个或多个容器因错误终止。
未知(Unknown):由于通信故障,Kubernetes无法确定Pod的当前状态。
运行以下命令,可查看 Pod 列表及其状态:

kubectl get pods
三、如何在 Kubernetes 中收集指标

Kubernetes默认不会存储所有指标,因此需要借助Kubernetes监控工具来收集、处理指标,部分工具还支持存储指标以供分析。

(一)指标服务器(Metrics Server)
指标服务器是在Kubernetes中收集CPU和内存指标的最简单方式。作为Kubernetes的核心组件,它专门收集节点与 Pod 的资源使用数据,提供实时指标供其他程序调用(不支持长期存储指标)。

指标服务器通过抓取每个节点上的kubelet(kubelet 会暴露资源使用数据)来收集指标,随后对指标进行汇总,并通过Kubernetes API提供访问接口。默认情况下,指标服务器每15秒收集一次数据,以实时展示资源利用率。

以下是指标服务器的设置步骤:

  1. 使用 kubectl 命令安装指标服务器
    kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
    该命令会自动创建所需的Deployment(部署)、ServiceAccount(服务账户)、角色(roles)及绑定(bindings)。
  2. 验证安装状态
    运行命令kubectl get deployment metrics-server -n kube-system,确认指标服务器已正常运行且拥有可用的 Pod。
  3. 查看节点与 Pod 指标
    查看节点指标:可通过kubectl top node命令查看
    查看所有命名空间的Pod指标:可通过kubectl top pod –all-namespaces命令查看
    (二)cAdvisor
    cAdvisor(Container Advisor)是一款实时收集Pod与容器资源消耗数据的工具。

由于cAdvisor已嵌入kubelet中,它会自动在每个节点上收集容器级别的数据。kubelet的端点会提供相关指标,这些指标可与Prometheus配合使用,用于创建监控仪表板和分析数据。

(三)Kube-State-Metrics
该工具专门监控Kubernetes中的节点、命名空间、部署和 Pod 等对象。与指标服务器和 cAdvisor不同,它不跟踪资源使用情况,而是在集群级别检查对象的状态、配置与健康状况,支持监控程序收集这些指标用于展示、告警与分析。

以下是Kube-State-Metrics 的安装方法:

  1. 通过 Helm 安装
    首先,添加Prometheus社区的Helm仓库:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
随后,在集群中安装 Kube-State-Metrics:

helm install kube-state-metrics prometheus-community/kube-state-metrics
该命令会自动创建所需的部署、服务账户和权限。

  1. 使用YAML清单手动安装
    应用 GitHub 仓库中提供的官方Kube-State-Metrics清单:

kubectl apply -f https://github.com/kubernetes/kube-state-metrics/releases/latest/download/kube-state-metrics-standalone-release.yaml
部署完成后,可通过相关命令确认其运行状态。

(四)Prometheus
Prometheus是一款免费的监控工具,专门用于收集和存储时间序列数据。它可从cAdvisor、指标服务器、Kube-State-Metrics等来源获取指标,并支持指标的存储与查询。

Prometheus 会持续从各个端点获取信息,并将其存储在时序数据库中。通过PromQL可查询指标,借助Alertmanager可发送告警通知。此外,Prometheus 还可与中间件等工具配合,构建自定义监控仪表板。

声明:来自木讷大叔爱运维,仅代表创作者观点。链接:https://eyangzhen.com/3724.html

木讷大叔爱运维的头像木讷大叔爱运维

相关推荐

关注我们
关注我们
购买服务
购买服务
返回顶部