写点什么

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

  • 2020-05-18
  • 本文字数:1872 字

    阅读完需:约 6 分钟

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

作者:

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


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


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


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


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


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

本地调试的局限性

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


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


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


远程调试 Kubernetes 所存在的问题

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


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


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


按需、实时数据点收集

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


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


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


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


2020-05-18 18:07451

评论

发布
暂无评论
发现更多内容
如何高效、快速地Debug K8S?这里有一个解决思路可以帮助你!_文化 & 方法_Rancher_InfoQ精选文章