如何高效、快速地Debug K8S?这里有一个解决思路可以帮助你!

网友投稿 410 2023-05-26

Kubernetes是一个高度分布式、面向微服务的技术,它让开发人员可以大规模运行代码。更重要的是,它对云基础架构进行了革命性的改变,在许多方面使工程师的工作变得更加简单。在近年来的各种研究均表明,Kubernetes在企业中的采用率有所增加。

但即便是Kubernetes的狂热爱好者也不得不承认debug Kubernetes Pod依旧是目前的一大痛点。

在如此高度分布的系统中,模拟找到问题的根源及其确切情况十分困难。传统的本地调试方法存在局限性,直接在云或生产环境中进行远程调试也存在一定的问题。

Kubernetes旨在使软件更具可伸缩性,而可伸缩的软件需要弹性的可观察性。然而,我们仍然停留在过去几十年的旧调试和日志记录的方法上。

现在,我们需要一种更好的方法。

本地调试的局限性

每个开发人员都会进行本地调试。这是产品生产流程和开发生命周期的固定部分。但是,当涉及到Kubernetes以及微服务架构的复杂性时,这种方法会变得十分困难。

每个微服务都通过其他微服务来服务和使用服务。要在本地环境中重新创建这种复杂的体系结构,特别是本地环境需要具有相同的基础结构和依存关系,这将需要大量的工作和设置。解决这些问题的一种方式是拥有自动化脚本,该脚本允许开发人员仅通过运行执行命令即可在自己的计算机上运行微服务。但是,由于开发人员必须控制配置以及所使用的分支与其他分支的对齐方式,因此脚本经常会“罢工”。

有一些开源解决方案可以缓解其中的挫败感,如Docker Compose,但他们也不是完美的。他们的缺点包括,作为开源工具如何对其进行永久维护,它还会迫使开发团队投入资源来学习新的工具。我认为,更好的方法应该能够帮助大家节省时间和精力。

远程调试Kubernetes所存在的问题

尽管开发人员可以调试由云提供商托管的微服务,但是Kubernetes拥有自己的编排机制和优化方法。这些方法和机制让Kubernetes变得很优秀,但也为debug增加了困难。首先,访问pod是十分不稳定的操作,如果开发人员希望使用SSH在Kubernetes容器上运行调试工具,那么实际上Kubernetes可能在获取数据之前就会先将其杀死。

这些问题也不是完全无解的。例如,依靠http://logger.info(“Got Exit Signal: {}”.format(sig)),这是教科书里所传授的技巧,但是随之而来的是沉重的重新部署成本。开发人员海可以将流量从集群重定向到本地计算机,这无疑可以帮助重新创建问题以进行有效的调试。但是这并不安全,而且本地计算机通常需要处理大量数据。

Istio和Linkerd等服务网格解决方案可以帮助开发人员跟踪其微服务,而无需更改代码。并且由于这些工具代理入站和出站流量,因此它们是添加调试和跟踪功能的理想场所。但是,服务网格调试的主要缺点是,它缺乏查找问题根源的能力。例如,它可以突显微服务A的运行速度较慢,但不会说明原因。这通常需要开发人员重新使用其他工具来深入研究代码,并频繁地恢复到重新部署日志行,来达到最低标准。

按需、实时数据点收集

更好的方法应该包括利用按需工具的弹性,并在运行时(runtime)添加日志/调试快照,为开发、staging和生产环境中的快速调试无缝地提供统一的解决方案。这使开发人员可以从Kubernetes应用程序获取所需的数据,而无需编写更多代码、重启或重新部署。这个想法本质上是将断点带回Kubernetes,设置断点并立刻获取任何数据点。与传统断点不同的是,无需随时停止应用程序。这些不间断的断点的工作方式对于本地、远程甚至生产部署都是相同的。另外,由于该解决方案没有绑定到单个容器实例,因此它可以大规模运行并且还能够解决间歇出现的问题。

Kubernetes和容器编排框架带来了新的功能,但是要从我们的应用程序中获取确切、实时的数据依旧具有挑战性。为了应对这一挑战,业界正在朝着新的方向发展:能够即时收集数据并且即时进行流水线处理,同时允许应用程序能够持续运行。

启用新概念,例如即时条件日志记录(相当于条件断点的Kubernetes)和临时日志记录(针对特定需求限制时间进行日志记录)。将数据与代码解耦,并将其从CI / CD流水线、复杂的安装和高开销的数据中释放出来,将可观察性提高到一个全新的水平,消除了摩擦,瓶颈,并不占用开发者和运维人员的资源。与结构化日志记录支持初始软件增长的方式类似,这种下一代响应式日志记录方式可以增加灵活性,这是现代及未来的软件趋势。

使用Kubernetess,现代软件的复杂性和规模正在爆炸式增长。从最简陋的起点开始,我们走了很长一段路。简单的单实例服务器的时代早已过去。旧的调试方法是时候退休了。现在将数据与代码分离,并提高现代可观察性所需的弹性。

作者:Or Weis,软件调试公司Rookout 联合创始人及CEO

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java List去掉重复元素的几种方式(小结)
下一篇:投资者修炼三部曲(二)—— 须鲸投资法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~