译者|张峰审稿人|孙淑娟梁策镜像。在实践中,如果您被困在一个不熟悉的shell中进行艰苦的调试,您会想在您的生产pod上使用这个工具。对于此处的一些背景知识,请注意这些容器映像旨在与新的kubectl调试功能一起使用,该功能用于启动临时容器以进行交互式故障排除。KoolKit将被kubectldebug作为容器拉起,运行在你的Pod中,并且能够访问与原始容器相同的进程命名空间。由于生产容器内置的调试工具通常比较简单,使用KoolKit可以提供强大的故障排除工具,而不是依赖最初构建生产镜像的人有意(或无意)留下的糟糕工具。每个KoolKit中的工具都经过精心挑选,您可以在下面详细了解整个项目背后的意图。如果您迫不及待地想看看有什么用,请随时查看GitHub上的完整项目。调试Kubernetes很困难了解Kubernetes中的pod内部发生的事情并不是一件容易的事。首先,您的应用程序不再是一个单一的实体。它由多个pod组成,为水平扩展而复制,有时分布在多个集群中。其次,要使用调试器等本机工具访问您的应用程序,您需要处理自动发现和端口转发等讨厌的网络问题,这些问题会降低此类工具的使用速度。此外,分布式系统改变或完全停止正在运行的Pod的状态(例如,放置断点时)可能会导致系统其他部分发生级联故障,从而加剧现有问题。KoolKits(原因)Lightrun[1]背后的意图是在考虑Kubernetes的情况下构建的。我们跨多个pod、多个集群,甚至多个云工作。我们很早就了解到,拥有合适的工具可以让开发人员进行故障排除。我认为我们应该以某种方式回馈社区,这就是我们提出KoolKits想法的原因。让我们花点时间解释一下为什么KoolKits有用:有一个著名的Kubernetes最佳实践指出应该构建小型容器镜像。这有几个不同的原因:构建图像将消耗更少的资源(即CI小时数)。拉镜像会花费更少的时间(谁愿意为这么多Ingresses买单?)。在一个连空操作日志都不再安全的世界里,更少的东西意味着更少的区域暴露于安全漏洞。这里还有很多工具可以帮助您在不做太多繁重工作的情况下实现您的目标:AlpineLinux基础映像非常小。DistroLessDocker镜像更进一步,删除了除运行时之外的所有内容。Docker多阶段构建有助于创建精简的最终生产映像。当您尝试调试这些容器内部发生的事情时,很容易出现问题。通过使用小型生产映像,您放弃了许多在解决应用程序问题时非常宝贵的工具。通过使用KoolKit,您可以在不影响质量工具的情况下让自己享受小型生产图像的好处。除了用于基于Linux的系统的一组更通用的工具之外,每个KoolKit都包含针对它所代表的特定运行时精心挑选的工具。注意:KoolKits的灵感来自kubespy和netshoot。注意事项在构建这些图像的过程中,我们做出了许多决定。下面列出了我们考虑的一些事情。图像大小KoolKitsDocker图像倾向于运行。KoolKit旨在下载一次,保存在集群的Docker存储库中,然后立即作为容器按需启动。由于它们并非设计用于不断拉动,而是用于放置有用的工具,因此我们可以忍受这种副作用。使用Ubuntu基础映像创建精简映像如此困难的部分原因是我们决定使用完整的Ubuntu20.04系统作为每个KoolKit的基础。这主要是因为我们想要复制与您在集群中进行本地调试相同的环境。这意味着,例如,不要乱用Alpine来替换您习惯的普通Ubuntu软件包。实际上,这意味着我们可以在每个KoolKit中包含没有Alpine版本的工具。使用语言版本管理器每个KoolKit都尽可能使用语言版本管理器,而不是依赖特定于语言的发行版。这样做是为了让您可以轻松安装较旧的运行时版本,允许您在需要时在运行时版本之间切换(例如,获取仅存在于特定运行时版本上的特定工具版本)。可用的KoolKits存储库中的每个文件夹都包含KoolKit背后的Dockerfile和调试图像的简短描述。所有KoolKit都基于ubuntu:20.04基础镜像,让每个人都可以使用自己熟悉的shell。可用的KoolKit列表:1.koolkit-jvm–使用OpenJDK17.0.2和相关工具(包括用于版本管理的jabba和Maven3.8.4)2.koolkit-node–Node16.13.1和相关工具(包括用于轻松版本管理的nvm)3.koolkit-python–Python3.10.2和相关工具(包括用于轻松版本管理的pyenv)请注意,您实际上不必自己构建它们:所有KoolKit都在DockerHub上公开托管并免费提供。KoolKits即将推出全新的Go1.17.7KoolKitJVMKoolKit:jvm-profiler,jHiccup支持Node.jsKoolKit:llnode,thetool支持PythonKoolKit:vardbg,memprofsupportscontributions就是这样,我们很乐意补充他们到任何图像。旁注1:Lightrun提供了一个可观察性平台,允许开发人员在运行时插入日志、指标和跟踪等,并简化事件解决的各个方面,从而让开发人员深入了解运行的应用程序。译者介绍张峰,51CTO社区编辑,长期从事技术咨询工作,专注于运维/云原生领域,精通网络故障分析,具有丰富的建设实战经验大型银行运维工具。原标题:IntroducingKoolKits:OSSDebuggingToolkitsforKubernetes,作者:TomGranot
