kubectl 高效技巧

是否有过因为使用 kubectl 经常需要重复输入命名空间而苦恼?是否觉得应该要有个记住命名空间的功能,自动记住上次使用的命名空间,不需要每次都输入?可惜没有这种功能,但是,本文会教你一个非常巧妙的方法完美帮你解决这个痛点。

k 命令

将如下脚本粘贴到当前shell(注册k命令到当前终端session):

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
}

mac 用户可以使用 dash 的 snippets 功能快速将上面的函数粘贴,使用 kk. 作为触发键 (dash snippets可以全局监听键盘输入,使用指定的输入作为触发而展开配置的内容,相当于是全局代码片段),以后在某个终端想使用 k 的时候按下 kk. 就可以将 k 命令注册到当前终端,dash snippets 配置如图所示:

k 当作 kubectl 来用,只是不需要输入命名空间,它会调用 kubectl 并自动加上上次使用的非默认的命名空间,如果想切换命名空间,再常规的使用一次 kubectl 就行,下面是示范:

哈哈,是否感觉可以少输入很多字符,提高 kubectl 使用效率了?这是目前我探索解决 kubectl 重复输入命名空间的最好方案,一开始是受 fuck命令 的启发,想用 go 语言开发个 k 命令,但是发现两个缺点:

  • 需要安装二进制才可以使用(对于需要在多个地方用kubectl管理多个集群的人来说实在太麻烦)
  • 如果当前 shell 默认没有将历史输入记录到 history 文件( bash 的 history 文件默认是 ~/.bash_history),那么将无法准确知道上一次 kubectl 使用的哪个命名空间

这里解释下第二个缺点的原因:ssh 连上服务器会启动一个 shell 进程,通常是 bash,大多 bash 默认配置会实时将历史输入追加到 ~/.bash_history里,所以开多个ssh使用history命令看到的历史输入是一样的,但有些默认不会实时记录历史到~/.bash_history,而是记在当前 shell 进程的内存中,在 shell 退出时才会写入到文件。这种情况新起的进程是无法知道当前 shell 的最近历史输入的,fuck命令 也不例外。

所以最完美的解决方案就是注册函数到当前shell来调用,配合 dash 的 snippets 功能可以实现快速注册,解决复制粘贴的麻烦

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 利用Helm一键部署Kubernetes Dashboard并启用免费HTTPS

    Kubernetes Dashboard 是一个可以可视化查看和操作 Kubernetes 集群的一个插件

    imroc
  • 利用Helm一键部署Kubernetes Dashboard并启用免费HTTPS

    Kubernetes Dashboard 是一个可以可视化查看和操作 Kubernetes 集群的一个插件

    imroc
  • kubernetes 最佳实践:优雅热更新

    当kubernetes对服务滚动更新的期间,默认配置的情况下可能会让部分连接异常(比如连接被拒绝),我们来分析下原因并给出最佳实践

    imroc
  • 给你的 GitHub 上 Star 的项目加上标签吧

    GitHub 作为世界上最大的同性交友网站,是广大程序员最喜爱的一个网站,不是因为它交友,而且里面聚集着万千的好用的开源库和项目。俗话说的好:GitHub 在手...

    非著名程序员
  • 从 RUST 库中公开 FFI

    Wikipedia 将 FFI 定义为一种机制,通过这种机制,用一种编程语言编写的程序可以调用或使用用另一种编程语言编写的服务。

    MikeLoveRust
  • Linux 下你所不知道的 7 个 SSH 命令用法

    一个系统管理员可能会同时管理着多台服务器,这些服务器也许会放在不同的地方。要亲自一台一台的去访问来管理它们显然不是最好的方法,通过远程控制的方法应该是最有效的。

    心莱科技雪雁
  • 信息化项目软件运维费用都有哪些构成?

    信息化项目软件运维费用应包括软件运维中供方的所有直接成本、间接成本和毛利润,如图1所示。

    软件成本造价评估
  • LaTeX 数学公式编辑

    学习LaTeX公式编辑的初衷是,用word自带的mathtype公式编辑器太麻烦了,每次都要寻找并用鼠标点击不同的符号,于是就想要是能像快捷键一样只通过敲键盘编...

    小飞侠xp
  • Python字符串格式化

    字符串格式化话的标准形式为 "Template String " % (Data)

    py3study
  • Node.js 为什么进程没有 exit?

    不知道各位 noder 们有没有碰到过这样一个疑问,当你写的 Node.js 代码是异步逻辑的时候,我们要怎么才能知道 Node.js 进程是什么,什么时候才会...

    五月君

扫码关注云+社区

领取腾讯云代金券