应该监控哪些Kubernetes健康指标

简介: 应该监控哪些Kubernetes健康指标

目录

1. 资源和利用率指标

2. 状态指标

3. 控制平面指标

4. 控制平面健康状况

etcd集群中是否有leader

API请求延迟

工作队列延迟

调度程序问题

5. 事件

6. 应用程序指标

总结



Circonus最近对Kubernetes运营商进行的一项调查中,收集哪些健康状况指标是运营商面临的最大挑战之一。考虑到Kubernetes每天可以生成数百万个指标,这不足为奇。

在本文中,我们将分享哪些健康指标对于Kubernetes运营商最关键。


1. 资源和利用率指标

资源和利用率指标来自内置的metrics API,由Kubelets本身提供。大多数时候,我们仅将CPU使用情况用作健康状况的指标,但是监视内存使用情况和网络流量也很重要。

指标 名称 描述
CPU使用率 usageNanoCores 节点或Pod每秒使用的CPU核数。
CPU容量 capacity_cpu 节点上可用的CPU内核数量(不适用于Pod)。
内存使用情况 used{resource:memory,units:bytes} 节点或Pod使用的内存量(以字节为单位)。
内存容量 capacity_memory{units:bytes} 节点可用的内存容量(不适用于Pod),以字节为单位。
网络流量 rx{resource:network,units:bytes} tx{resource:network,units:bytes} 节点(或Pod)看到的总网络流量(已接收(传入)流量和已传输(传出)流量),以字节为单位。


CPU使用率是重要的健康状况指标,这是最容易理解的:你应该跟踪节点正在使用多少CPU。原因有两个。首先,你不希望耗尽应用程序的处理资源,如果你的应用程序受到CPU的限制,则需要增加CPU分配或向集群添加更多节点。其次,你不希望CPU闲置在那里。


2. 状态指标

kube-state-metrics是一个组件,可提供有关集群对象(node,pod,DaemonSet,namespaces等)状态的数据。

指标 名称 描述
节点状态 kube_node_status_condition {status:true,condition:OutOfDisk| MemoryPressure|PIDPressure| DiskPressure|NetworkUnavailable} 当status为true时,指示该节点当前正在经历该条件。
循环崩溃(Crash Loops) kube_pod_container_status_waiting_reason {reason: CrashLoopBackOff} 指示pod中的容器是否正在发生循环崩溃。
任务状态(失败) kube_job_status_failed 指示任务是否失败。
持久卷状态(失败) kube_persistentvolume_status _phase {phase:Failed} 指示持久卷是否失败。
Pod状态(Pending) kube_pod_status_phase{phase:Pending} 指示Pod是否处于挂起状态。
Deployment kube_deployment_metadata _generation 代表Deployment的序列号。
Deployment kube_deployment_status_observed_generation 代表控制器观察到的当前Deployment生成的序列号。
DaemonSet期望的节点数 kube_daemonset_status_ desired_number_scheduled DaemonSet期望的节点数。
DaemonSet当前的节点数 kube_daemonset_status_ current_number_scheduled DaemonSet运行中的节点数。
期望的StatefulSet副本 kube_statefulset_status_replicas 每个StatefulSet期望的副本数。
准备就绪的StatefulSet副本 kube_statefulset_status_replicas _ready 每个StatefulSet准备好的副本数。


使用这些度量标准,你应该对以下指标监视并发出警报:崩溃循环,磁盘压力,内存压力,PID压力,网络不可用,任务失败,持久卷失败,Pod挂起,Deployment故障,DaemonSets未准备好和StatefulSets未准备好。


3. 控制平面指标

Kubernetes控制平面包含Kubernetes的“系统组件”,可以帮助进行集群管理。在Google或Amazon提供的托管环境中,控制平面由云提供商管理,你通常不必担心监视这些指标。但是,如果你管理自己的集群,则需要了解如何监视控制平面。

指标 名称 描述
etcd集群是否有leader etcd_server_has_leader 指示该成员是否知道其leader是谁。
etcd集群中leader变动总数 etcd_server_leader_changes_ seen_total etcd集群中leader变更总数。
API延迟数 apiserver_request_latencies_count API请求总数;用于计算每个请求的平均延迟。
API延迟总和 apiserver_request_latencies_sum 所有API请求持续时间的总和;用于计算每个请求的平均延迟。
队列等待时间 workqueue_queue_duration_ seconds 每个控制器管理器中的工作队列等待所花费的总时间。
队列持续时间 workqueue_work_duration_ seconds 每个控制器管理器中的工作队列处理操作所花费的总时间。
调度失败Pod的总尝试次数 scheduler_schedule_attempts _total {result:unschedulable} 调度程序尝试在节点上调度失败了Pod的总尝试次数。
Pod调度延迟 scheduler_e2e_scheduling_ delay_microseconds(<v1.14) 或 scheduler_e2e_scheduling_ duration_seconds 将Pod调度到节点上所花费的总时间。


4. 控制平面健康状况

你应该监视控制平面上的以下健康状况:


etcd集群中是否有leader

etcd集群应始终有一个leader(在更改leader的过程中除外,这种情况很少见)。你应该密切注意所有etcd_server_has_leader指标,因为如果很多集群成员没有leader,那么集群性能将会下降。另外,如果你在etcd_server_leader_changes_seen_total中看到leader变更很多次,则可能表明etcd集群存在连接性或资源问题。


API请求延迟

如果将apiserver_request_latencies_count划分为apiserver_request_latencies_sum,则将获得API服务器每个请求的平均延迟。跟踪随时间不断变化的平均请求延迟可以让你知道服务器何时不堪重负。


工作队列延迟

工作队列是由controller manager管理的队列,用于处理集群中的所有自动化流程。监视workqueue_queue_duration_seconds的增加,将使你知道队列延迟何时增加。如果发生这种情况,你可能需要深入研究controller manager日志以查看发生了什么。


调度程序问题

调度程序有两个方面值得关注。首先,你应该监视scheduler_schedule_attempts_total {result:unschedulable},因为无法调度的Pod的增加可能意味着你的集群存在资源问题。其次,你应该使用上面指示的延迟指标之一来监视调度程序延迟。Pod调度延迟的增加可能会导致其他问题,也可能表明集群中存在资源问题。


5. 事件

除了从Kubernetes集群中收集数值指标外,从集群中收集和跟踪事件也很有用。集群事件可以帮助你监视Pod生命周期并观察重大Pod故障,并且监视从集群流出的事件的速率可以是一个很好的预警指标。如果事件发生率突然显着变化,则可能表明发生了问题。


6. 应用程序指标

与我们上面检查的指标和事件不同,应用程序指标不是从Kubernetes本身发出的,而是从集群运行的工作负载发出的。从应用程序的角度来看,这种监控可以是你认为重要的任何事情:错误响应,请求延迟,处理时间等。

关于如何收集应用程序度量标准,有两种方式。第一个是,应该将指标数据从应用程序“推送”到收集端点。这意味着必须将像StatsD这样的客户端与每个应用程序捆绑在一起,以提供一种将指标标准数据推出该应用程序的机制。该技术需要更多的管理开销,以确保正确地检测集群中运行的每个应用程序,因此它在集群管理器中不受欢迎。

第二种是,指标收集原理(正在被越来越广泛地采用),指标应由收集代理从应用程序中“拉取”。这使应用程序更易于编写,因为它们所要做的只是适当地发布了它们的指标标准,但是应用程序不必担心这些度量标准是如何被提取或删除的。这是OpenMetrics的工作方式,也是Kubernetes集群指标收集的方式。当此技术与收集代理的服务发现相结合时,它将创建一种功能强大的方法,用于从集群应用程序中收集你需要的任何类型的指标。


总结

Kubernetes每天可以生成数百万个新指标。这会带来两个大挑战。首先,许多常规的监视系统无法正确监视Kubernetes集群的大量指标。其次,数据"庞杂"使你难以跟上并知道哪些指标最重要。

你的Kubernetes监视解决方案必须具有处理所有这些数据的能力,并能够自动分析,图形化和警告要注意的最关键指标。这样,你就知道自己已经收集了期望的一切,过滤掉了不必要的数据,并自动缩小了相关数据的范围。因此,你可以节省大量时间,并确保一切都能正常进行。


译文链接:https://thenewstack.io/which-kubernetes-health-metrics-should-be-monitored/



相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
5月前
|
Kubernetes 监控 Cloud Native
"解锁K8s新姿势!Cobra+Client-go强强联手,打造你的专属K8s监控神器,让资源优化与性能监控尽在掌握!"
【8月更文挑战第14天】在云原生领域,Kubernetes以出色的扩展性和定制化能力引领潮流。面对独特需求,自定义插件成为必要。本文通过Cobra与Client-go两大利器,打造一款监测特定标签Pods资源使用的K8s插件。Cobra简化CLI开发,Client-go则负责与K8s API交互。从初始化项目到实现查询逻辑,一步步引导你构建个性化工具,开启K8s集群智能化管理之旅。
71 2
|
5月前
|
Prometheus Kubernetes 监控
Kubernetes(K8S) 监控 Prometheus + Grafana
Kubernetes(K8S) 监控 Prometheus + Grafana
331 2
|
5月前
|
人工智能 运维 Kubernetes
智能化运维:KoPylot为k8S带来AI监控诊断
智能化运维:KoPylot为k8S带来AI监控诊断
|
5月前
|
Prometheus 监控 Kubernetes
|
4月前
|
运维 Kubernetes 监控
Loki+Promtail+Grafana监控K8s日志
综上,Loki+Promtail+Grafana 监控组合对于在 K8s 环境中优化日志管理至关重要,它不仅提供了强大且易于扩展的日志收集与汇总工具,还有可视化这些日志的能力。通过有效地使用这套工具,可以显著地提高对应用的运维监控能力和故障诊断效率。
439 0
|
5月前
|
Prometheus 监控 Kubernetes
在k8S中,状态码监控是怎么做的?
在k8S中,状态码监控是怎么做的?
|
5月前
|
Prometheus 监控 Kubernetes
在k8S中,blackbox主要是监控什么的?
在k8S中,blackbox主要是监控什么的?
|
5月前
|
Prometheus Kubernetes 监控
在k8S中,etcd是怎么监控的?
在k8S中,etcd是怎么监控的?
|
5月前
|
数据采集 监控 Kubernetes
在k8S中,kubelet监控Worker节点资源是使用什么组件来实现的?
在k8S中,kubelet监控Worker节点资源是使用什么组件来实现的?
|
7月前
|
Prometheus 监控 Kubernetes
一篇文章讲明白Kubernetes(k8s)部署Promehteus监控
一篇文章讲明白Kubernetes(k8s)部署Promehteus监控
251 0

热门文章

最新文章