如果你也是 kubectl
重度使用患者,肯定也经常有做类似如下操作:
$ kubectl get pod -n infra
$ kubectl get svc -n infra
$ kubectl get deployment -n infra
在上述操作中,我查看了同一个命名空间下的 Pod
、Service
、Deployment
资源列表,虽然是相同的命名空间,但是我每次执行命令都得在后面跟一个 -n <ns_name>
,很烦躁!(虽然我手速还算快,但是这是无关手速的问题!)
如何解决这个问题,方法其实很简单,只需要一个 shell 就能搞定,如下:
function k() {
cmdline=`HISTTIMEFORMAT="" history | awk '$2 == "kubectl" && (/-n/ || /--namespace/) {for(i=2;i<=NF;i++)printf("%s ",$i);print ""}' | tail -n 1`
regs=('\-n [\w\-\d]+' '\-n=[\w\-\d]+' '\-\-namespace [\w\-\d]+' '\-\-namespace=[\w\-\d]+')
for i in "${!regs[@]}"; do
reg=${regs[i]}
nsarg=`echo $cmdline | grep -o -P "$reg"`
if [[ "$nsarg" == "" ]]; then
continue
fi
cmd="kubectl $nsarg $@"
echo "$cmd"
$cmd
return
done
cmd="kubectl $@"
echo "$cmd"
$cmd
}
将上述 shell 内容保存到一个文件,比如我这里保存在 /scripts/k.sh
中,然后将该 shell 内容应用到当前 shell 环境即可开始使用了(source /scripts/k.sh
)。
如何使用?依旧以文章开头的操作为例,使用该 shell 提供的 k
函数实现效果如下:
$ kubectl get pod -n infra
NAME READY STATUS RESTARTS AGE
sonarqube-postgresql-0 1/1 Running 0 69d
sonarqube-sonarqube-69d647976b-jffkb 1/1 Running 0 64d
$ k get svc
kubectl -n infra get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
sonarqube-postgresql ClusterIP 172.18.166.77 <none> 5432/TCP 69d
sonarqube-postgresql-headless ClusterIP None <none> 5432/TCP 69d
sonarqube-sonarqube LoadBalancer 172.18.231.226 10.20.30.40 9000:32376/TCP 69d
$ k get deploy
kubectl -n infra get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
sonarqube-sonarqube 1/1 1 1 69d
效果很明显啦。。使用 k
函数代替 kubectl
时,k
函数会自动补上上次执行 kubectl
时使用的 -n <ns_name>
的部分,所以如果我们需要在一个命名空间下做多个 kubectl
操作,我们只需要在执行第一条 kubectl
命令时带上 -n <ns_name>
,后续使用 k
命令就可以省略 -n <ns_name>
部分而操作与上次相同的命名空间下的资源了。
评论区