《解析 Kubernetes 故障排查工具 Robusta.docx》由会员分享,可在线阅读,更多相关《解析 Kubernetes 故障排查工具 Robusta.docx(14页珍藏版)》请在第壹文秘上搜索。
1、作为一个用于多集群Kubernetes监控、故障排除和自动化的开源平台,就像Docker用于陆署应用程序的基础设施即代码样,Robusta用于维护KUberneteSClUSter应用程序和处理其警报的墙础设旗即代码。Robusta概述作为一款用于KubernetesCluster故障排直的开源平台,其本质是为了弄清楚我们当前所构建的KubernetesCluster的健康状况,并针对所出现的告警行为进行合理解释以及给予我们相关修算建议.与大多数其他云应用程序一样,Robusta能够基于Helm安装和管理,其主要位于监控堆栈(PrometheussElasticsearch等)之上.从技术生态
2、角度来看,Robusta既是一款Kubernetes的自动化引擎,也是一个多集群可观测性开源平台.Robusta通常与Prometheus一起协作使用,当然,也支持其他工具集成.基于其相关特性,通过监听KUberneteSClUSter中的楣关密件,Robusta可以告诉我们为什么发出警报、同时发生了什么以及我们能防所采取的措施,除此之外,Kobusta也能够改进我们现有的告算体系,或用于定义由APISvrver更改触发的新告警流程,以革新现有落后的观测生态.Robusta功能特性Kubernetes自动化弓I擎即当我们所构建的KubernetesCluster中发生任何意外事件时所采取的自动
3、操作.自动修算问题或收集有关问题的证据并在后续的时间进行调查、分析.1、自动修复PrometheusAlertIRobustaCheckforknownerror、Applyfix/Tellahumanifnecessary当然,除了个别比较就手的问题外,大多数常见的问题基本上都有已知的解决方法,基于Robusta,我们可以轻松地自动修宜已知问题.例如,在YAM1.中配在修装操作或在Python中编写我们自定义的操作以实现完全可定制性.2、告警丰富AlertRobustaStgMPYesterdayat2:10PMfiringlowPodiscrashlooping.Source:kind-r
4、oiPodrobustademo-deployment-5dbc5b6c48-nhwwf(de1.05times/10minutes.Enrichment1 ExceptioninthreadAWT-EventQueue-Ojav2 atjava.util.IdentityHashMap.get(Idenfatjavax.swing.RepaintManager.etendDiatjavax.swing.RepaintManager.addDirtylRobusta获取所配声现有的告警规则,然后并自动提取有关受影晌的Kubernetes资源的详细信息.例如,当某一KubernetesClust
5、erNode的磁盘空间不足时,Robusta会显示历史图表.当Pod崩溃时,Robusta便会获取相关日志进行后续的调查、分析.Cluster观测性此平台能塔基于KubernetesCluster的一体式、全方位进行观测,涉及告警仪表盘、不健原的资源、日志以及相关图标等.1、资源展示OpenShiftDC33211t.4o!hefIBtuesNodes27/27JObS./30Apps40/45Pods42780DEV16a.Nodes13/13Jobs32/32Apps30/60Pods54792EKSProdNodes27/27Jobs14/14Apps22/22Pods51/51EKSS
6、taging7a11s.4otherNodes27/27Jobs17/30Apps32/34Pods67/76Robusta能够映射我们所构建的的KubernetesCluster拓扑并构建正在运行的应用程序列表以及识别每个人的健康问题并显示细节。除此之外,基于当前的运行状况,能够实时直看正在运行的Pod、CPU使用率、内存使用率以及有关工作负载的其他关信信息.Robusta记录了KubernetesCluster中发生的所有Kubernetes变更,能够准确百百YAM1.更改的内容以及它是否导致了问题等.2、Kubernetes原生追踪QAppsTimeline三JobSClusterHea
7、lth通常情况下,RobUSta将KubernetesUI与警报和可观察性平台相结合,告警会自动映射到正确的Kubernetes资源,然后按命名空间或集群进行过滤告警信息。除此之外,要真正了解问题,我们往往标要有关各个Pod的详细日志和事件信息.然而,基于Robusta,使得我们无需在生产环境中运行Kubectl命令或在窗口之间跳转,而直接在Robusta中搞定所有的一切,比如,按需获取日志、显示图形并跟踪Pod的状态等.路由通知基于相关规则,基于Robusta统一通知服务,我们能够可以获取有关簪报、失败的作业、应用程序更新以及我们所选择的任何其他内容的通知.1、事件通知Robusta能够更轻
8、松地获得有关失败作业、Crash1.oopBackOffs或点要Kubernetes对象的茗外更改的通知。Robusta支持向Slack,MSTeams.Discord.PagerDutysOpsGenie.WebEx等发送消息.除此之外,Robusta也能够从各种传入目的地接收数据,包括Prometheus和Elasticsearche当我们将Prometheus警报直接发送到Slack时,这些警报通常缺乏上下文.而基于Robusta珞由告警,我们可以将告警连接到相关日志和图表予以展现.内置告警基于Prometheus生态技术体系,Robusta采用了最流行的方式来监控KubernetesC
9、luster并使其变得更好.同时,告警也增加了可观察性。以下为常用的场景,具体如下:1、Pod崩溃2、系统磁盘空间不足3、OOMKiII4.谙求超时5、其他事件场景Source:kind-test-kill-pod-75fbc4fc86-c9rtninnamespacecPodandNodeOOMKiIIeddata Podoom-kU-pod-75fbc4fc86-c9rtn Namespacedefoult NodeNameflke-test-on-prem-defoult-pool-f3b33boe3s Nodeallocatedmemory24.12Xoutof6038MBolloto
10、b Containernamecontainer-exclude Containermemory124Merequest.124MBlimit Containerstartedat2022-19-20Tie:09:42Z Containernishedat2022-10-20T10:10:13Z示例:内存溢出场景当然,除上述核心的特性外,Robusta也包含Timeline(时间轴)功能,基于时间轴,我们可以杳看所有Prometheus警报的历史记录,以及与KUberneteSCIUSter中的配置更改相关的记录等。Robusta工作原理上面我们简单介绍了Robusta的功能特性,接下来,我们
11、来看一下其实现原理.基于Robusta的相关特性,其自动化实现(采用YAM1.配置,强调预构建的自动化)主要包含如下三个部分:1、Trigger即“何时运行?,通常主要针对告警、日志以及事件更新等.Trigger触发器是启动自动化的条件.例如,失败的Kubernetes作业等.2、Action-动作即“做什么?,Action动作是我们在自动化运行时执行的一系列相关操作等.例如,获取日志或收集JaVa堆转储。3、Sink-接收器即最终归宿?Sink接收器是发送任何给出的地方.例如,Slack渠道等.如下为Robusta具体工作原理结构:例如,针对Pod崩溃时的(即RobustaCrashingP
12、ods)的行为规则定义如下所示:*triggers:on_prometheus_alert:alertJame:Kubepodcrash1.oopingactions:logs-enricher:sinks:-kafka线设,基于某种特定的原因,当我们所枸建的KUberneteSClUSter中的某一个Pod发生崩溃时,此时,依据所定义的告警规则进行告警触发时,Robusta都会从正确的Pod中获取口志并将它们附加到告警中,并将会自动化把日志发送到Kafka.Robusta参考架构辔Picfromrobusta.devAlf1sroo*InggerB9gl4ilo3+基于上述参考架构,我们可以
13、看到,整个Robusta架构的核心圉绕“自动化引擎进行开展,具体涉及如下组件:1、Robusta-Forwarder此组件主要连接到APlServer并监控K8sCluster的变化,井将它们转发给Robusta-Runner进行处理.2.Robusta-Runner此组件主要执行自定义的Playbooks,依据相关的业务规则.3、BundledPrometheusStack此组件为可选项,Robusta包括一个可选的嵌入式Prometheus堆栈,根据最佳实践预先配冒了Kubernetes告警.如果我们在实际的场景中已经在使用了Kube-Prometheus-Stack,那么,则可以将其指向
14、Robusta.4、WebUI此组件为可选项,我们可以依据实际的情况,进行WebUI配百,基于此,能够为我们提供一个单一的管理面板来观测跨多个K8sCluster的所有瞥报和Pod状态追踪.5、C1.I此组件为可选项,RobustaCli通常具备两个主要用途,具体如下所示:(1)基于自动生成的Helm值使的Robusta安装变得更容易,便捷,有利于维护,节省资源成本;(2)可以手动触发Robusta故障排除工作流程(例如,我们可以从任何JaVapod应用来获取相关堆弼储信息,以供排障、分析之用)。Robusta安装部署其实,从本质上来讲,Robusta的部署安装与其他应用程序一样,安装较为简单
15、,官方给出了多种部署方式,这里,我们基于Helm进行安装具体步骤如下所示.1、安装RobustaCli插件leoli1.eonrobusta%python3-mpipinstall-Urobusta-cli-no-cacheDefaultigtouserinstallationbecausenormalsite-packagesisnotWriteableCollectingrobusta-cliDownloadingrobusta-cli-.l.Il-py3-none-any.whl(230kB)II23Collectinghikaru-.5.1-beta.Downloadinghikaru-.5.1b-py3-none-any.whl(1.2MB)1.2MB25kB/scolorlog=5.0.1Downloadi