使用 kubectl 命令时,最烦人的就是频繁的切换命名空间了,查看什么资源都得加命名空间,每次敲命令在习惯也会很烦。今天在网上看到一篇文章,很有用,可以记住上一次使用 kubectl 时操作的命名空间。
代码如下:
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
}
可以将此代码放入 .bashrc
或者其它的开机自启文件中(永久生效需重启)。因为很多服务器都不会轻易重启,建议在使用时直接复制到命令行执行(即临时生效)
使用方法如下:
使用
kubectl -n xxx
之后,-n 会被记住,然后直接使用 k get xxx 不需要加 -n,即可,下次切换命名空间时,还是使用kubectl -n xxx
COPY$ kubectl get pods -n nginx
NAME READY STATUS RESTARTS AGE
nginx-deployment-c94f957b8-4t4f8 1/1 Running 3 35d
nginx-deployment-c94f957b8-gj4j7 1/1 Running 3 35d
$ k get pods
kubectl -n nginx get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-c94f957b8-4t4f8 1/1 Running 3 35d
nginx-deployment-c94f957b8-gj4j7 1/1 Running 3 35d
$ k get svc
kubectl -n nginx get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-svc ClusterIP 10.105.99.220 <none> 8080/TCP 43d
$ k get ingress
kubectl -n nginx get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
test-ingress <none> feiyi.yanjiang.chai 172.16.182.193 80, 443 38d
$ kubectl get pods -n istio-system
NAME READY STATUS RESTARTS AGE
istio-ingressgateway-76bdc8cbf6-4lzmb 1/1 Running 0 4d
istio-tracing-8549b858b6-ztvwh 1/1 Running 0 3d23h
istiod-1-6-10-5789bdcb9f-jp5ng 1/1 Running 0 4d
kiali-655dd5cfdc-c4hxd 1/1 Running 0 3d23h
$ k get pods
kubectl -n istio-system get pods
NAME READY STATUS RESTARTS AGE
istio-ingressgateway-76bdc8cbf6-4lzmb 1/1 Running 0 4d
istio-tracing-8549b858b6-ztvwh 1/1 Running 0 3d23h
istiod-1-6-10-5789bdcb9f-jp5ng 1/1 Running 0 4d
kiali-655dd5cfdc-c4hxd 1/1 Running 0 3d23h
参考链接:https://k8s.imroc.io/trick/efficient-kubectl/--https://www.feiyiblog.com/