系统架构面临的三大挑战,看kubernetes监控如何解决?

阿里云开发者 阿里云开发者     2023-01-30     724

关键词:

简介:随着 Kubernetes 的不断实践落地,我们经常会遇到负载均衡、集群调度、水平扩展等问题。归根到底,这些问题背后都暴露出流量分布不均的问题。那么,我们该如何发现资源使用,解决流量分布不均问题呢?今天,我们就借助三个具体场景聊聊这一问题以及相应的解决方案。

作者|炎寻

审核&校对:白玙

编辑&排版:雯燕


大家好,我是阿里云云原生应用平台的炎寻,很高兴能与大家继续分享 Kubernetes 监控系列公开课。前两期公开课我们讲到了 Vol.1《通过 Kubernetes 监控探索应用架构,发现预期外的流量》Vol.2《如何发现 Kubernetes 中服务和工作负载的异常》


 如何使用 Kubernetes 监控的拓扑来探索应用架构,使用产品采集的监控数据配置告警来发现服务性能问题。今天我们将进行第三讲《使用 Kubernetes 监控发现资源使用,流量分布不均匀的问题》,大家可以钉钉搜索钉群 31588365,加入 Kubernetes 监控答疑群进行交流。 


随着 Kubernetes 的不断实践落地,我们经常会遇到越来越多问题,诸如负载均衡、集群调度、水平扩展等问题。归根到底,这些问题背后都暴露出流量分布不均的问题。那么,我们该如何发现资源使用,解决流量分布不均问题呢?今天,我们就借助三个具体场景聊聊这一问题以及相应的解决方案。 


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



通常来说,对于一个业务系统,架构会有很多层,每层包含很多组件,比如服务接入、中间件、存储,我们希望每个组件的负载都是均衡的,这样性能和稳定性都是最高的,但在多语言多通信协议场景下,快速发现以下问题具备一定难度,比如:


  • 应用服务器处理的请求是否均匀?
  • 应用服务器对中间件服务实例的访问流量是否均匀?
  • 数据库各个分库分表实例读写流量是否均匀?


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



除了服务端不均匀场景之外,云上用户大多使用云服务实例,在实践中会出现应用服务各个实例处理的流量均匀,但访问云服务实例的节点出现流量不均匀,导致云服务实例整体性能和稳定性下降。通常在应用运行时整体链路梳理和特定问题节点上下游分析时,会进入该场景。


那么,我们如何快速发现问题、解决问题呢? 针对这一问题,我们可以从服务负载、请求负载这两个方面对客户端、服务端进行问题发现,判断各个组件实例服务负载和对外请求负载是否均衡。


(1)服务端负载



对于服务端负载均衡问题排查,我们需要了解服务详情,对任意特定的 Service,Deployment,DaemonSet,StatefulSet 进行更具针对性的排查。通过 Kubernetes 监控服务详情功能,我们可以看到 Pod 列表部分会列出后端的所有 Pod,在表格中我们列出了每个 Pod 在选择时间段内的请求数聚合值和请求数时序,通过对请求数一列进行排序,我们可以清楚地看到后端的流量是否均匀。


(2)客户端负载


对于客户端负载均衡问题排查,Kubernetes 监控提供集群拓扑功能,对于任意特定的 Service,Deployment,DaemonSet,StatefulSet,我们都可以查看其关联的拓扑,当选定关联关系之后,点击表格化会列出所有与问题实体关联的网络拓扑,表格每一项都是应用服务节点对外请求的拓扑关系,在表格中我们会展示每一对拓扑关系在选择时间段内的请求数聚合值和请求数时序,通过对请求数一列进行排序,可以清楚地看到特定节点作为客户端对特定的服务端访问是否流量均匀。


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


在 Kubernetes 集群部署场景下,将 Pod 分发到某个节点的过程称之为调度,对于每个 Pod 来说,其调度过程包含了“根据过滤条件找候选节点”以及“找最好的节点”两个步骤,“根据过滤条件找候选节点”除了根据 Pod 和 node 的污点,忍受关系来过滤节点,还有一点非常重要的就是根据资源预留的量来过滤,比如节点的 CPU 只有 1 核的预留,那么对于一个请求 2 核的 Pod 来说该节点将被过滤。“找最好的节点”除了根据 Pod 和 node 的亲和性来选择,一般是在过滤出来的节点里面选择最空闲的。


基于上面的理论,我们在实践过程中经常会遇到一些问题:


  • 为什么集群资源使用率很低却无法调度 Pod?
  • 为什么部分节点资源使用率显著高于其他节点?
  • 为什么只有部分节点资源无法调度?


我们在实际工作实践中会遇到的典型场景就是资源热点问题,特定节点频繁发生 Pod 调度问题,整个集群资源利用率极低但是无法调度 Pod。如图,我们可以看到 Node1、Node2 已经调度满了 Pod,Node3 没有任何 Pod 调度上去,这个问题对跨 region 容灾高可用,整体的性能都有影响。我们通常在 Pod 调度失败会进入到该场景。


那么,我们该如何处理呢?



对于 Pod 无法调度的问题排查,我们通常应该关注到下面三个要点:

  • 节点有 Pod 数量调度上限
  • 节点有 CPU 请求调度上限
  • 节点有内存请求调度上限

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


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


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


  • CPU 是可压缩资源
  • 内存是不可压缩资源
  • Requests 用于调度
  • Limits 用于运行时资源限制隔离



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


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


对于单点问题而言,其本质就是高可用问题。高可用问题解法只有一个,就是冗余,多节点,多 region,多 zone,多机房,越分散越好,越冗余越好。除此之外,在流量增长,组件压力增大的情况下,系统各组件是否可以水平扩展也成为一个重要的议题。



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


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

目前,Kubernetes 监控免费使用中。点击阅读原文,开启 ARMS 即可使用。
Kubernetes 监控答疑钉钉群(群号:31588365)


往期推荐:


Vol.1:《通过 Kubernetes 监控探索应用架构,发现预期外的流量》

Vol.2:《如何发现 Kubernetes 中服务和工作负载的异常》


原文链接:https://developer.aliyun.com/article/799083?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

如何专业化监控一个kubernetes集群?

简介:本文会介绍Kubernetes可观测性系统的构建,以及基于阿里云云产品实现Kubernetes可观测系统构建的最佳实践。作者:佳旭阿里云容器服务技术专家 引言 Kubernetes在生产环境应用的普及度越来越广、复杂度越来越高,随... 查看详情

kubernetes日志监控系统架构详解

1背景随着客户的不断增多,客户业务复杂程度不断加大,传统的服务器级别监控由于监控粒度过大,且当告警时需要进一步排查原因,已无法满足需求,为了深入客户业务,保证业务健康运行,我们需要收集服务器系统的日志... 查看详情

cncf权威调研揭示k8s用户所面临的最大挑战

人们在使用及部署Kubernetes时会遇到各种各样的问题。一些挑战是使用Kubernetes时独有的,其他一些挑战则是伴随着一些技术的使用出现的典型问题。TheNewStack发布的《Kubernetes的生态系统状况》报告总结了用户在挑选容器编排解决... 查看详情

使用微服务架构面临哪些挑战?

开发一些较小的微服务听起来很容易,但开发它们时经常遇到的挑战如下。自动化组件:难以自动化,因为有许多较小的组件。因此,对于每个组件,我们必须遵循Build,Deploy和Monitor的各个阶段。易感性&#x... 查看详情

通过kubernetes监控探索应用架构,发现预期外的流量

简介: Kubernetes监控立足于应用监控之下的Kubernetes容器界面和底层操作系统,是Kubernetes集群软件栈端到端可观测性的一体化解决方案,在Kubernetes监控中可以同时看到关联的所有层的观测数据。我们希望通过Kubernetes... 查看详情

通过kubernetes监控探索应用架构,发现预期外的流量

简介:Kubernetes监控立足于应用监控之下的Kubernetes容器界面和底层操作系统,是Kubernetes集群软件栈端到端可观测性的一体化解决方案,在Kubernetes监控中可以同时看到关联的所有层的观测数据。我们希望通过Kubernetes监... 查看详情

kubernetes第七篇:使用kubernetes部署prometheus+grafana监控系统(kubernetes工作实践类)

文章目录​​一、前言​​​​二、K8s监控系统架构​​​​2.1Prometheus简介​​​​2.2Prometheus架构​​​​2.3Prometheus知识普及​​​​三、K8s监控系统搭建​​​​3.1三类数据采集metrics​​​​3.2Prometheus+Grafana​​​​3.3实... 查看详情

通过kubernetes监控探索应用架构,发现预期外的流量

...是阿里云云原生应用平台的炎寻,很高兴能和大家一起在Kubernetes监控系列公开课上进行交流。本次公开课期望能够给大家在Kubernetes容器化环境中快速发现和定位问题带来新的解决思路。 为什么需要Kubernetes监控?​很多同学... 查看详情

kubernetes微服务监控体系

作者|无敌码农来源|无敌码农监控系统是运维体系乃至整个软件产品生命周期中最重要的一环,完善的监控可以帮助我们事前及时发现故障,事后快速追查定位问题。而在以微服务为代表的云原生架构体系中,系统分... 查看详情

kubernetes第七篇:使用kubernetes部署prometheus+grafana监控系统(kubernetes工作实践类)(代码片段)

文章目录一、前言二、K8s监控系统架构2.1Prometheus简介2.2Prometheus架构2.3Prometheus知识普及三、K8s监控系统搭建3.1三类数据采集metrics3.2Prometheus+Grafana3.3实践一下:将prometheus+grafana搭建起来3.3.1搭建3.3.2分步测试3.3.2.1安装nodee... 查看详情

用okr攻克的当下企业家遇到的三大挑战

...你用多了吗?》一书中,他提出了三个目前的企业家普遍面临的三种挑战:方向看不清 查看详情

kubernetes从中心走向边缘

参考技术A1.Kubernetes从中心走向边缘Kubernetes是以应用为中心的技术架构与思想理念,以一套技术体系支持任意负载,运行于任意基础设施之上;向下屏蔽基础设施差异,实现底层基础资源统一调度及编排;向上通过容器镜像标准... 查看详情

kubernetes_08_使用kubernetes部署prometheus+grafana监控系统(kubernetes工作实践类)(代码片段)

....1搭建3.3.2分步测试3.3.2.1安装nodeexporter测试好了3.3.2.2使用kubernetes部署prometheus3.3.2.3grafana测试成功3.3.3Grafana将同一个集群中的prometheus配置为数据源datasource3.3.4Grafana导入Dashboard和查看Dashboard3.3.4.1Grafana导入看板Dashboard的三种方式3.3.... 查看详情

devops架构师--04kubernetes集群的日志及监控-更新版

文章目录第四天Kubernetes集群的日志及监控k8s日志收集架构使用节点级日志代理使用sidecar容器和日志代理方式一:sidecar容器将应用程序日志传送到自己的标准输出。方式二:sidecar容器运行一个日志代理,配置该日志代理以便从... 查看详情

轻量级的架构决策记录机制

...或少的都会面临以下问题或挑战:•新成员加入团队,对系统现有的架构决策可能会盲目遵守,只知其然,不知其所以然;或者挑战或违反约束,持续挑战当前决策,“质疑”决策的合理性和正确性,负责人需要不间断的解释、... 查看详情

it的2017,面临数字生态系统新挑战,该怎么办?

所谓数字生态系统,就是包含一系列基于标准,规模可变的硬件、软件、数字设备和服务,可系统地实现企业信息数字化,数据流通,以帮助企业提高运营效率。随着越来越多的中国企业加入数字生态系统,中国CIO在技术、组织... 查看详情

it的2017,面临数字生态系统新挑战,该怎么办?

所谓数字生态系统,就是包含一系列基于标准,规模可变的硬件、软件、数字设备和服务,可系统地实现企业信息数字化,数据流通,以帮助企业提高运营效率。随着越来越多的中国企业加入数字生态系统,中国CIO在技术、组织... 查看详情

8.携程架构实践---监控(代码片段)

第8章监控8.1指标监控和告警系统Hickwall Hickwall是xc在Metrics方面的主要监控系统,可以提供指标数据的采集,存储,展示和告警。 8.1.1指标监控的应用和挑战 指标监控系统是一个对时序指标进行采集... 查看详情