你有要经常操作命令行的需求吗?
你是否觉得有些命令用过好几次,等再次使用的时候提笔忘字,忘了该怎么写?
或者是记得命令中的大部分内容,具但体是什么就记不清了?
亦或是工作中常用的命令特别长,每次输入都会浪费很多时间?你可以说我把常用的命令都配了 alias
,那如果换了电脑,这些辛苦配置的 alias
该怎样方便地携带呢?
上面一连串提出了这么多问题,是不是戳中了你内心深处的需求?那么 tmax
来了,为解决上面的痛点而来,带着闪电⚡️般的速度而来,接下来就跟我一起了解下关于 tmax 的内容,相信看完后你就会想试用一下。
tmax 是什么?
tmax
是一个命令行工具,能够帮助你以闪电般⚡️的速度执行命令以提高效率,同时能够在你记不清具体的内容时,快速地给出提示帮助你完成任务。
The design idea of tmax
- 拥有一个基础 k8s cmd 知识库,可以不断丰富它
- 高效的查询算法以及流畅的命令行交互
- 把你常用的的超长命令行变短
tmax 会给你带来什么?
tmax
拥有 3 中交互模式,direct mode、search mode、interactive mode。下面以动图的方式介绍这几种模式的用法以及使用场景。
在使用之前,我们需要执行 tmax generate
生成一份基础的配置文件,文件内容及格式如下:
custom:
- check: curl 127.0.0.1:8080/health
k8s:
- filternodecpu: kubectl get nodes -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.capacity.cpu}{'\t'}{.status.capacity.memory}{'\n'}{end}"
- filternodetaint: kubectl get nodes -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.spec.taints[*].key}{'\n'}{end}"
- corednsedit: kubectl edit cm coredns -nkube-system
- allnode: kubectl get no
- alldeploy: kubectl get deploy
- allpod: kubectl get pod -A
- busyboxrun: kubectl run busybox --rm -ti --image=busybox /bin/sh
- allnodeip: kubectl get node -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.addresses[0].address}{'\n'}{end}"
- podResource: kubectl get pod -o custom-columns=NAME:metadata.name,podIP:status.podIP,hostIp:spec.containers[0].resources
- getns: kubectl get ns
- createdemo: kubectl create deployment nginx --image=nginx
- exposedemo: kubectl expose deployment nginx --port=80
- getnetwork: kubectl get networkpolicy
- runbox: kubectl run busybox --rm -ti --image=busybox /bin/sh
unix:
- "tar": "tar -xjvf test.tar.bz2"
可以看到我们是以 group:[key:value]
的形式存储内容,举个栗子,k8s
就是一个 group
,该 group 下拥有很多跟 k8s
相关的命令行,命令行的缩写就是 key
, 真正执行的内容就是 value
,同理你可以自定义或者新增内容。
direct mode
顾名思义,direct mode
就是直接执行配置文件中的某个 key
所对应的 value
。例如,执行 tmax check
就相当于执行了 curl 127.0.0.1:8080/health
,执行 tmax runbox
就相当于执行了 kubectl run busybox --rm -ti --image=busybox /bin/sh
,如果你在日常工作中经常需要启动一些调试的临时容器,tmax
可以大大提高操作的效率。
search mode
很明显,direct mode
是在你对某些命令非常熟悉的情况下使用的,那假如有些命令不是很常用,但是你又记得命令中的某些关键字,这时候使用搜索模式是非常适合的。比如,你记得在配置文件中有个快速运行临时 busybox
容器的命令,但是记不清具体该怎么写或者你想用更快的方式呼出该命令,就可以 tmax s box
回车后使用 ↓ ↑ → ←
或者你是 vim 的死忠也可以用 j k
上下移动来选中想要执行的命令,再次回车即可执行。
当你不想执行该命令,仅用作查询功能也是可以的,tmax
默认配置文件内置了很多常用的 kubectl
命令模板,按照功能划分成 get
、create
、run
、label
等,命令模板之间使用 */*
分割,这部分就不能直接回车执行了,仅作为查询使用,当然你可以继续丰富这些模板。
interactive mode
交互模式使用场景主要有以下几个:
-
当你想要去执行一组动作,或者是比较长时间内会停留在命令行中;
-
所要执行的命令记不清关键字,要多查询几次;
-
较频繁的查询动作。
直接输入
tmax
回车后即可进入交互模式,让我们看一段演示:
交互模式提供很快的查询速度和动态的执行方式,配合 tab
键的补全方式,可以说是闪电般的速度了。
以上就是目前 tmax
具备的三种使用模式,能够满足不同场景的使用。此外,tmax
还提供了 以下功能:
tmax regen
重新生成配置文件tmax add group:key:value
,新增命令,example:tmax add k8s:getns:kubectl get ns -A
tmax clear
删除配置文件
具体可以执行 tmax --help
查看。
编译与安装
tmax
目前仅在 Linux
和 Mac OS
上测试通过,win
平台应该可以使用,但是没有测试。
- 编译:在 tmax 工程目录下,执行
make build
, 会得到可执行文件tmax
chmod +x tmax && cp tmax /usr/local/bin
即可使用
后续会提供更快捷的安装方式。
一些想法
开发 tmax
最初的动力来自于自己平时工作的需求,在大量应用使用 k8s 集群容器化后,经常需要对集群进行管理、排障、查询等操作,在某段时间内会频繁执行一些 kubectl 的命令,或者有些命令又特别长,或者 kubectl 的高级查询语法太难记忆,比如 jsonpath
、custome-column
查询,举个🌰,leader 想要你快速导出集群中所有节点的名称以及其资源配置,就要用到 jsonpath 来循环查询:
kubectl get nodes -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.capacity.cpu}{'\t'}{.status.capacity.memory}{'\n'}{end}"
像这种命令,就可以加到 tmax 配置文件中,忘记语法格式或者想再次使用的时候就可以很方便地找出来。
集中开发 tmax
大概只有几天的时间,现在的 beta 版本仅能满足基本的使用(笔者在工作中已经在开始使用),有很多不完善的地方,后面会不断丰富和加强,也欢迎贡献创意与代码,附 GitHub 仓库:github.com/hantmac/tma…