前言
kubernetes作为一个开放式式的分布式系统,其提供了多种扩展机制如CRD, service catalog等给用户做系统功能增强以及外部系统对接等。当时以往版本都是以扩展服务端的功能,现在刚发布的全新版本1.12.0已经可以支持kubectl命令行的扩展了。下面将通过一个简单例子来演示如何做kubectl的扩展。
请注意:目前kubectl的扩展alpha状态,从1.12,0开始提供。
kubectl扩展例子演示
例子的目的
通常我们会通过kubect get pod/xxx -o yaml
的方式来展示对应的k8s资源对象的申明,但是这个输出比较不太友好,输出没有对于关键字做高亮展示,可否提供一个命令对于输出做渲染呢?
其实很简单,通过简单的kubectl命令扩展就可以做到,我们把这个扩展的kubectl子命令定义为inspect,这样,我们期望的命令是:
kubectl inspect pod/xxxx
然后期望结果类似如下的渲染展示:
前置条件
- 升级kubectl 到新的1.12.x版本,在Mac下可以执行:
brew upgrade kubernetes-cli
- 安装对应的渲染工具
bat
brew install bat
创建kubectl的inspect plugin
在/usr/local/bin
下创建一个kubectl-inspect
的文件,并输入以下内容
这里需要注意的是,文件名必须是kubectl-<子命令>的形式
#!/bin/bash
kubectl get "$@" -o yaml | bat -l yaml -p
并将该文件改为可执行
chmod +x kubectl-inspect
测试
在命令行执行
kubectl inspect pod/xxx
就可以看上面的效果了
小结
这个plugin的机制还是十分诱人的,让维护人员都可以集中在kubectl命令里操作了。kubernetes在向分布式的OS又向前迈了一小步,kubectl就像是linux的cmd了