云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

数据库服务器_阿里云域名查询_怎么样

小七 141 0

介绍Click:Kubernetes的命令行交互式控制器

Click是一个开源工具,可以让您快速、轻松地针对Kubernetes资源运行命令,而不需要一直进行复制/粘贴,并且可以轻松地集成到现有的命令行工作流中。在Databricks,我们经常使用Kubernetes。我们将我们的服务(其中有很多)部署在独特的名称空间中,跨越多个云,分布在多个区域中。其中的每一个(服务、命名空间、云、区域)都需要指定为特定的Kubernetes集群和对象。这意味着编写正确的kubectl命令行本身就可以成为一项壮举。一个缓慢的,容易出错的壮举。因为使用kubectl很难针对正确的Kubernetes资源,这会妨碍我们部署、调试和修复问题的能力。这已经够痛苦的了,几乎所有经常与Kubernetes交互的工程师都已经破解了某种形式的shell别名,在kubectl命令中注入参数,以缓解部分问题。`在对开发人员的个人别名进行了许多乏味的修改之后,我们觉得必须有更好的方法。基于这一要求,Click诞生了。动机Click会记住当前的Kubernetes"thing"(Kubernetes术语中的"resource"),使操作员更容易与该资源交互。这是由我们注意到的一种常见模式引起的,比如:kubectl去拿豆荚复制吊舱的名称库贝克特原木哦,对了,忘了集装箱了kubectl logs-c[容器][粘贴的吊舱]然后我们也需要从吊舱里得到事件,所以我们必须再次粘贴冲洗,重复请注意,这些不同的操作通常应用于同一个对象(如pod、服务、部署等)。我们通常需要检查日志,然后检查部署了什么版本,或者查看相关事件。这个"当前对象"的想法,启发我们开始写点击。另一个主要的动机是认识到命令行已经是我们试图做的大多数事情的优秀工具。类似"计算有多少日志行提到一个特定警报"这样的内容可以通过kubectl->grep->wc管道优雅地表达出来。我们认为,鼓励开发人员转向Kubernetes仪表板(或其他一些gui工具)将大大降低我们快速深入了解kubectl(或实际上,通过kubernetesapi)提供的大量信息的能力。注意:Click并不打算在脚本上下文中使用。kubectl在这个领域已经非常出色了,我们认为尝试替换它的任何功能都没有什么价值。因此,Click没有"runone command and exit"模式,而是始终充当REPL。Click概述首先请注意,Click的组织方式类似于REPL。当您运行它时,您将被放入"Click shell"中,在这里您开始运行Click命令。那么,足够的前奏,点击到底是什么样子?下面是一个短片,展示了点击的动作。单击命令首先,Click内置了全面的帮助。您只需键入help即可获得可以运行的所有命令的列表和简要说明。在单击shell中,可以使用-h运行任何特定的命令,以获得其用法的完整描述。从经验来看,一旦理解了交互的"REPL"模型,大多数用户就会发现如何做到他们想做的事情而不会太麻烦。单击命令可分为四类,因此每个命令都执行以下操作之一:设置当前上下文或命名空间(我将其组合称为"scope")在当前作用域中搜索资源选择从搜索返回的资源对所选资源进行操作ctx命令设置当前上下文,ns命令设置当前命名空间。单击记住这些设置并在提示中反映它们。要搜索资源,可以使用pods或nodes之类的命令。它们返回当前设置范围内匹配的所有资源的列表。选择一个对象只需在返回的列表中指定其编号即可。同样,单击将在其提示中反映此选择。一旦选择了一个资源,我们就可以对该资源运行更多的活动命令。例如,logs命令将从所选的pod中获取日志,或者describe命令将返回类似kubectl describe的输出。Click可以通过标准shell操作符(如|,>,或>>)将任何输出传递给shell。这使得上面的日志行计数命令可以发出为:logs-c container | grep alertName | wc-c,就像您最喜欢的shell中的命令一样。快速迭代上面的模型允许在特定的Kubernetes资源上进行快速迭代。您可以快速找到所关心的资源,然后针对它发出多个命令。例如,在当前范围中,您可以选择一个pod,获取其描述,查看与pod相关的任何最近事件,将foo容器中的日志拉到一个文件中,然后按如下方式删除pod:pods//在当前上下文和命名空间中搜索pods2//选择返回的第二个pod(假设它是您想要的那个)description//这将输出对pod的描述事件//查看最近的事件日志-c foo>/tmp/podfoo.log日志//将日志保存到指定文件delete//删除pod(这是请求确认)萤幕录影在这里,点击几次屏幕并不能显示出更多的精神特征。[屏幕广播]点击点击就是开源!您可以在此处获取代码:https://github.com/databricks/click您可以通过Rust的packagemanager工具cargo运行cargo install click来安装click。如果你没有货,去拿货,退房(生锈)技术细节本节介绍了有关Click实现的一些细节。如果你只对使用Click感兴趣,可以安全地跳过它。铁锈Click在Rust中实现。这部分是因为作者喜欢用Rust编写代码,但也因为Click被设计成可以长时间运行,并且泄漏内存是不可接受的。我还希望有一个快速(read-instant)的启动时间,这样人们就不会想让kubectl"只运行一个快速命令"。最后,我希望点击崩溃尽可能少。为此,生锈是个不错的选择。打开包装的诱惑我们已经努力从Click代码库中尽可能多地删除对unwrap的引用(或者在我们使用它时说明为什么它是可以的)。这是因为unwrap可能会导致您的Rust程序恐慌,并以一种相当不友好的方式退出。Rust without unwrap导致代码必须显式地处理大多数错误情况,进而导致系统不会意外死亡,并且通常以干净的方式向用户报告错误。Click在这方面并不完美,但它相当不错,而且还会继续变得更好。与Kubernetes沟通对于大多数操作,Click使用API直接与kubernetesapi服务器对话。port forward和exec命令当前利用kubectl,因为Click中没有复制该功能。这些命令可能在某个时候变得独立,但到目前为止还没有一个强烈的动机这样做。未来Click还处于beta测试阶段,因此它是实验性的。随着时间的推移,通过社区的贡献和反馈,我们将继续改进它,使它更加强大。此外,在Databricks,我们每天都在使用它,并不断地修复任何问题。我们计划添加的功能包括:一次对资源集应用命令的能力。例如,这将使一次提取特定部署中所有pod的日志变得非常简单。自动完成更多命令支持所有类型的Kubernetes资源,包括自定义资源支持修补和应用以修改已部署的资源指定click使用的颜色或完全转换颜色的功能。升级到最新版本的Hyper(或可能切换到Reqwest)。结论我们很高兴将这个工具发布到Kubernetes社区,希望你们中的许多人发现它有用。请将问题提交至https://github.com/databricks/click/issues为你未来的功能做一个公关请求。我们渴望看到点击增长和改善基于社区的反馈。免费试用Databricks。今天就开始吧