本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名原文链接~~~

kubectl 复用上次使用的命名空间

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:


如果你也是 kubectl 重度使用患者,肯定也经常有做类似如下操作:

$ kubectl get pod -n infra
$ kubectl get svc -n infra
$ kubectl get deployment -n infra

在上述操作中,我查看了同一个命名空间下的 PodServiceDeployment 资源列表,虽然是相同的命名空间,但是我每次执行命令都得在后面跟一个 -n <ns_name>,很烦躁!5B93FDBE.png(虽然我手速还算快,但是这是无关手速的问题!)

如何解决这个问题,方法其实很简单,只需要一个 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> 部分而操作与上次相同的命名空间下的资源了。

# Kubernetes  

如果这篇文章对您有帮助,可点击下方链接分享给你的朋友们😋,如果遇到问题欢迎评论、留言~~~😇

评论

公众号:zze_coding

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×