查看原文
其他

用kubectl插件把你的想法带到这个世界

Kubernetes CNCF 2024-02-03

作者:Cornelius Weig(TNG技术咨询有限公司)


kubectl是与Kubernetes交互的最关键工具,它必须满足多个用户角色,每个用户角色都有自己的需求和观点。让kubectl满足你需要的一种方法是在kubectl中构建新功能。


在kubectl中构建命令的挑战

然而,说起来容易做起来难。作为Kubernetes的重要基石,对kubectl的任何有意义的更改都需要经过Kubernetes增强建议(Kubernetes Enhancement Proposal,KEP),预先讨论了预期的更改。


在实现方面,你会发现kubectl是一个巧妙而复杂的工程。要完成你想要完成的任务,可能需要很长时间才能适应代码库的流程和风格。接下来是审查过程,可能要经过几轮,直到满足Kubernetes维护者的所有要求--毕竟,他们需要接管这个特性的所有权,并从合并的那一天开始维护它。


当一切顺利时,你终于可以高兴了。你的代码将随下一个Kubernetes发行版一起发布。如果你不走运的话,这可能意味着你需要再等三个月才能在kubectl发布你的想法。


这就是一切顺利的幸福之路。但是,你的新功能可能永远不会出现在kubectl中,这是有原因的。首先,kubectl具有特定的外观和感觉,违反这种风格是维护者无法接受的。例如,用颜色生成输出的交互式命令与kubectl的其余部分不一致。另外,当涉及到只对极少数用户有用的工具或命令时,维护人员可能会简单地拒绝你的建议,因为kubectl需要解决常见的需求。


但这并不意味着你不能将你的想法发送给kubectl用户。


如果不需要更改kubectl来添加功能呢?

这就是kubectl插件的亮点所在。从kubectl v1.12开始,你可以简单地将可执行文件放到你的路径中,该路径遵循kubectl-myplugin的命名模式。然后你可以用kubectl myplugin来执行这个插件,它就像kubectl的一个普通子命令。

https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/


插件使你有机会尝试新的体验,如终端UI、丰富多彩的输出、专门的功能或其他创新的想法。你可以去创造,因为你是你自己的插件的所有者。


此外,插件为你希望向kubectl建议的命令提供了安全的实验空间。通过预先发布插件,你可以更快地将你的功能推送给最终用户,并快速收集反馈。例如,kubectl-debug插件建议成为kubectl中的内置命令(KEP)。同时,插件作者可以使用插件机制发布功能并收集反馈。

https://github.com/verb/kubectl-debug

https://github.com/kubernetes/enhancements/blob/master/keps/sig-cli/20190805-kubectl-debug.md


如何开始开发插件

如果你已经有了一个插件的想法,你如何最好地实现它?首先,你必须自问是否可以将其实现为现有kubectl功能的包装。如果是这样,那么将插件编写为shell脚本通常是最好的方法,因为生成的插件很小,可以跨平台工作,并且由于没有编译而具有很高的可信度。


另一方面,如果插件逻辑很复杂,那么通用语言通常更好。这里的标准选择是Go,因为你可以使用优秀的client-go库与Kubernetes API进行交互。Kubernetes维护的sample-cli-plugin演示了一些最佳实践,可以作为新插件项目的模板。

https://github.com/kubernetes/sample-cli-plugin


当开发完成后,你只需要将你的插件发送给Kubernetes用户即可。为了获得最佳的插件安装体验和可发现性,你应该考虑通过krew插件管理器这样做。要深入讨论关于kubectl插件的技术细节,请参阅kubernetes.cn的文档。

https://github.com/kubernetes-sigs/krew

https://kubernetes.cn/docs/tasks/extend-kubectl/kubectl-plugins/


点击文末<<阅读原文>>进入网页了解更多。




关于中国KubeCon + CloudNativeCon + 开源峰会


扫描二维码联系我们!




CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux  Foundation,是非营利性组织。 

CNCF云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。请长按以下二维码进行关注。

继续滑动看下一个

用kubectl插件把你的想法带到这个世界

Kubernetes CNCF
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存