侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

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

zze
zze
2021-09-03 / 0 评论 / 0 点赞 / 332 阅读 / 2728 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

如果你也是 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> 部分而操作与上次相同的命名空间下的资源了。

0

评论区