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

2023年 7月 30日 56.3k 0

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 的一个普通子命令。

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

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

如何开始开发插件

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

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

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

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论