使用 Kubernetes 监控发现资源使用流量分布不均匀的问题 | 学习笔记

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 快速学习 使用 Kubernetes 监控发现资源使用流量分布不均匀的问题

开发者学堂课程【使用Kubernetes监控发现资源使用,流量分布不均匀的问题使用 Kubernetes 监控发现资源使用流量分布不均匀的问题】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/949/detail/14761


使用 Kubernetes 监控发现资源使用流量分布不均匀的问题


内容介绍:

一、课程介绍

二、背景介绍

三、Demo 环节

四、产品价值

 

一、课程介绍

1、背景介绍

2、典型场景

3、最佳实践

首先是背景介绍,说明系统架构在资源流量不均场景下所面临的挑战,然后是典型场景,介绍在实际工作实践中会遇到的问题,最后是最佳实践,描述如何使用 Kubernetes 监控来处理这些场景,快速定位、发现问题。

 

二、背景介绍

1、系统架构面临的挑战一:负载均衡

image.png

通常来说对于一个业务系统架构会分为很多层,每层包含很多组件,比如服务接入、中间件、存储,我们希望每个组件的负载都是均衡的,这样性能和稳定性都是最高的,但是在多语言、多通信协议场景下,快速发现以下问题,具备一定难度,比如应用服务器处理的请求是否均匀;应用服务器对中间件服务实例的访问流量是否均匀;数据库的分库分表实例读写流量是否均匀。

 image.png

在实践中会遇到的典型问题就是负载不均衡,线上的流量转发策略或者流量转发组件自身有问题,导致应用服务各个实例接收到的请求量不均衡,部分实例处理的流量显著高于其他节点,导致这部分实例的性能,相对于其他实力来说显著恶化,那么路由到这部分实力上的请求无法得到及时的响应,造成系统整体的性能和稳定性降低,以上描述的是服务端不均匀的场景。

除此之外,云上用户大多使用云服务实力,在实践中会出现应用服务本身任何实例处理的流量是均匀的,但是访问云服务实例的节点出现流量不均匀的场景,导致云服务实例整体的性能和稳定性下降,进而影响上层业务的性能和稳定性,通常我们在应用运行时进行整体链路梳理和特定问题节点上下游分析时,我们会进入到这样的一个场景。

l 如何快速发发现负载不均衡的问题

(1) 对于服务端负载均衡问题排查,Kubernetes 监控提供服务详情

功能。

image.png

对于任意特定的 service deployment ,都可以进入到其详情页,其 Pod 列表部分会列出后端的所有 Pod,在表格中每一项都列出了每个 port 在选定时间段内的请求数据、值以及请求数的持续,通过对请求数一列进行排序,我们可以清楚的看到后端的流量是否均匀,从而发现服务端负载不均衡的问题。

(2) 对于客户端负载均衡问题排查 Kubernetes 监控提供集群拓扑功

image.png

对于任意特定的 service deployment ,都可以查看其关联的拓朴,当选定关联关系之后,点击表格会列出所有与该实体关联的网络拓朴,表格的每一项都是应用服务节点对外请求的拓扑关系。在表格中,对每一对拓扑关系都展示了在选定时间段内的请求数据和值以及请求数持续,通过对请求数一列进行排序,我们可以清楚的看到特定节点作为客户端对特定的服务端访问是否流量均匀。

2、系统架构面临的挑战二:集群调度

Kubernetes 集群部署场景下,将 pod 分发到某个节点的过程称之为调度,对于每个 pod 来说,其调度过程包含了根据过滤条件找候选节点以及找最好的节点,两个步骤。

image.png

步骤一:根据过滤条件找候选节点

除了根据 pod node 的污点和忍受关系来过滤节点之外,还有一点非常重要的就是根据资源预留的量来过滤,比如节点 cpu 只有一盒的预留,则对于一个请求两盒的 pod 来说,该节点将被过滤掉。

步骤二:找最好的节点

除了根据 pod note 的亲和性来选择,一般会在过滤出来的节点里面选择最空闲的,基于上面的理论,在实践过程中经常会遇到以下问题:

1)   为什么集群资源使用率很低却无法调度 pod?

2)   为什么部分节点资源利用率显著高于其他节点?

3)   为什么只有部分节点资源无法进行调度?

l 在实际工作实践中会遇到的问题就是资源热点问题,特定节点频繁发生 pod 调度问题,整个集群资源利用率极低,但是无法调度 pod

image.png

如图我们可以看到 Node1Node2已经调度满了,而 Node3没有任何 pod 调度上去,这个问题对跨 Region 整体的性能都有影响。

通常出现了 pod 调度失败会进入到该场景,那如何快速发现定位这个问题呢?

image.png

对于 pod 无法调度的问题排查,根据上面的调度理论,我们应该关注到三个要点:

1)   节点有 pod 的数量调度上限

2)   节点有 cpu 请求调度上限

3)   节点有内存请求调度上限

Kubernetes 监控提供集群节点列表展示以上三个要点,支持排序,通过查看各个节点是否均匀来查看资源热点问题。比如某个节点 cpu 请求率接近100%,就意味着任何对 cpu 有请求的 pod 都无法调度到该节点上,即使他的 cpu 使用率低于30%;如果说只有个别节点的 cpu 请求率接近100%,其他节点十分空闲,那么需要进一步检查该节点的资源总量和 pod 分布来进一步排查问题。

除了节点有资源热点问题之外,容器也有资源热点问题

image.png

如图对于一个多副本服务来说,其容器的资源使用分布也可能有资源热点问题,主要体现在 cpu 和内存使用上。cpu在容器环境中是可压缩资源,达到上限之后只会限制,不会对容器本身生命周期造成影响,而内存在容器环境中是不可压缩资源,达到上限之后会出现 oom。对于每个节点运行的时候,虽然处理的请求量一致,但是不同请求不同参数导致的 cpu 和内存消耗可能不一样,这样就会导致部分容器出现资源热点问题,对生命周期和自动扩缩容都会造成影响。

如何快速发现定位容器的资源热点问题呢?

针对容器的资源热点问题,通过理论分析,需要关注的要点如下:

1)   cpu 是可压缩资源

2)   内存是不可压缩资源资源

3)   资源请求用于调度

4)   资源限制用于运行时的资源限制合理

Kubernetes 监控在服务详情的 pod 列表展示以上四个要点,支持排序,通过查看各个 pod 是否均匀来查看资源热点问题。比如某个 pod cpu 使用相对请求的比率接近100%,那么就意味着可能触发自动扩缩容;如果说只有个别节点的 cpu 请求相对使用的比率接近100%,其他节点都十分空闲,那么就需要检查处理逻辑,进一步排查问题。

image.png

3、系统架构面临的挑战三:单点问题

image.png

单点问题本质是高可用问题,高可用问题的解法本质只有一个,就是冗余。通过多节点多危险多区域多机房的方式进行冗余,越分散越好,越冗余越好。

除此之外,在流量增长、组件压力增大的情况下,系统各组件是否可以水平扩展也成为一个重要议题。

image.png

比如应用服务只有最多一个节点,当该节点因为网络或者其他问题中断无法通过重启解决时,系统将崩溃,与此同时,因为只有一个节点,当流量增长超过一个各节点的处理能力时,系统整体的性能会严重恶化,所以单点问题会严重影响系统的性能和高可用能力,针对该问题 Kubernetes 监控支持查看资源的副本数,用于快速定位单点问题。


三、Demo 环节

本环节介绍 Kubernetes 监控解决以上三个场景的产品能力。

1、负载均衡问题

进入到 Kubernetes 的监控集群盖的页面,如果发现某个 service 错误率比较高,若想查看是否是负载均衡导致的问题,可以点击 service 名称进入到 service 的详情页,

image.png

下拉移动到 pod 列表区域,在该区域通过对请求数进行排序来查看是否流量均匀。操作后可以看到该集群的 getDNS服务流量处理是均匀的。

image.png

从服务端的角度观察均匀之后,移动到拓扑区域,通过查看它的下游,点击表格化,每一项都会展示 Kubernetes DNS service 和外部服务的拓扑关系,通过对请求数进行排序,可以查看该 service 对外请求的均匀情况,

image.png

可以看到 Kubernetes 对外部的 DNS 服务的请求也是均匀的,由此可以判断 Kubernetes DNS 无论是从服务端还是客户端视角都达到了负载均衡状态。

2、集群调度的问题

进入到集群资源概览页面,向下拖动到 node 资源概览部分,查看全部 note,在这里可以看到每个 note pod 数、CPU 请求率和内存请求率,通过对这些进行排序,可以看到部分节点请求率显著高于其他节点。

image.png

在这种情况下,我们可以进入到该节点,进一步分析其 pod 分布,对 pod cpu 请求率和内存请求率进行排序,找到贪婪的 pod 对其进行处理,即可解决资源热点问题。

3、单点问题

回到集群资源页面,以 KubeDNS 为例,进入到其详情页面,切换到 deployment,进入到 KubeDNS,通过查看YAML 可以查看到其副本数,没有单点问题。

image.png

与此同时,可以查看其扩展列表区域,可以看到容器的资源没有产生热点。

 

四、产品价值

image.png

通过上面的介绍,可以看到 Kubernetes 监控可以从服务端、客户端多视角支持多语言、多通信协议场景下的负载均衡问题排查,与此同时,也支持容器节点服务的资源热点问题排查,最后通过副本数检查和流量分析,支持单点问题排查,在后续的迭代过程中,将会把这些检查点作为场景开关,支持一键开启之后自动检查报警。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
JSON 运维 Kubernetes
|
1月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--Traffic Shifting 流量接入
k8s学习--Traffic Shifting 流量接入
|
3月前
|
Prometheus Kubernetes 网络协议
k8s学习笔记之CoreDNS
k8s学习笔记之CoreDNS
|
3月前
|
存储 Kubernetes 数据安全/隐私保护
k8s学习笔记之ConfigMap和Secret
k8s学习笔记之ConfigMap和Secret
|
3月前
|
存储 Kubernetes 数据中心
在K8S中,同⼀个Pod内不同容器哪些资源是共用的,哪些资源是隔离的?
在K8S中,同⼀个Pod内不同容器哪些资源是共用的,哪些资源是隔离的?
|
3月前
|
边缘计算 人工智能 Kubernetes
边缘计算问题之理解 Kubernetes 节点资源的四层分配结构如何解决
边缘计算问题之理解 Kubernetes 节点资源的四层分配结构如何解决
31 1
|
3月前
|
存储 Kubernetes API
|
2月前
|
运维 Kubernetes 监控
Loki+Promtail+Grafana监控K8s日志
综上,Loki+Promtail+Grafana 监控组合对于在 K8s 环境中优化日志管理至关重要,它不仅提供了强大且易于扩展的日志收集与汇总工具,还有可视化这些日志的能力。通过有效地使用这套工具,可以显著地提高对应用的运维监控能力和故障诊断效率。
290 0
|
3月前
|
Kubernetes Cloud Native 应用服务中间件
Kubernetes 自动伸缩策略:优化资源利用率
【8月更文第29天】在现代云原生环境中,应用的流量往往具有不可预测性。为了应对这种变化,Kubernetes 提供了多种自动伸缩机制来动态调整应用实例的数量和每个实例分配的资源。本文将深入探讨两种主要的自动伸缩工具:水平 Pod 自动伸缩器 (HPA) 和垂直 Pod 伸缩器 (VPA),并提供实际的应用示例。
97 0
|
3月前
|
Kubernetes jenkins 持续交付
jenkins学习笔记之二十一:k8s部署jenkins及动态slave
jenkins学习笔记之二十一:k8s部署jenkins及动态slave