提升 Kubernetes 命令行操作效率的方法

提升 Kubernetes 命令行操作效率的方法

在管理大规模容器集群时,Kubernetes(简称K8s)的命令行操作成为不可或缺的工具。然而,随着集群规模的增大和操作复杂性的提升,手动输入命令变得繁琐且容易出错。为了提高工作效率和操作准确性,我们可以采用以下方法来优化Kubernetes的命令行操作。

自动补全:消除繁琐,提升准确性

Shell 自动补全是一种命令行工具,它可以自动完成你输入的 Kubernetes 命令、资源名称、标签等,极大地减少了手动输入的工作。当你开始输入命令、资源名称或标签时,自动补全会自动显示可能的选项,你只需按下 Tab 键即可自动补全或列出候选项,再按一次 Tab 键则可以切换到下一个候选项。

通过自动补全:

  • 能够极大地减少手动输入的工作量,特别是在输入长而复杂的命令时更加明显。
  • 能够保证输入的命令、资源名称和标签的准确性,避免了因为输入错误导致的命令执行失败。
  • 会显示所有可用的选项,确保你的操作符合 Kubernetes 的最佳实践
  • 能够极大地减少重复性的繁琐命令输入

如何安装Shell自动补全

# 对于Ubuntu/Debian系统
sudo apt-get install bash-completion

# 对于CentOS/RHEL系统
sudo yum install -y bash-completion

如何启用 Shell 自动补全

以下是启用 Shell 自动补全的步骤:

Bash Shell

打开终端,并输入以下命令:

source <(kubectl completion bash)
#或者
source /usr/share/bash-completion/bash_completion

如果你想让自动补全永久生效,可以将以上命令添加到你的 ~/.bashrc 文件中,然后重新打开终端。

echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc
#或者
echo 'source /usr/share/bash-completion/bash_completion' >> ~/.bashrc
source ~/.bashrc

现在,当你在终端输入 kubectl 后,按下 Tab 键,自动补全会自动列出可用的 Kubernetes 命令。

Zsh Shell

打开终端,并输入以下命令:

source <(kubectl completion zsh)

如果你想让自动补全永久生效,可以将以上命令添加到你的 ~/.zshrc 文件中,然后重新打开终端。

echo 'source <(kubectl completion zsh)' >> ~/.zshrc
source ~/.zshrc

现在,当你在终端输入 kubectl 后,按下 Tab 键,自动补全会自动列出可用的 Kubernetes 命令。

其他 Shell

对于其他 Shell,你可以参考 Kubernetes 官方文档中关于 自动补全 🔗 的说明,根据你使用的 Shell 类型来进行配置。

K命令:轻松添加命名空间参数

为了进一步优化Kubernetes的命令行操作,你可以借助自定义命令来自动添加命名空间参数。

下面介绍了一个 Bash 函数,名为k(),它能根据历史命令中的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
}

若想在SSH登录服务器时自动执行该函数,可以将上述代码添加到~/.bashrc文件中,例如:

if [[ -n $SSH_CONNECTION ]] ; then
    function k() {
        # 函数的具体实现,参考上述代码
    }
fi

这样,在使用SSH登录服务器时,会自动启用这个自定义的k()函数。随后,你就可以使用k命令而不需要携带命名空间啦。

  ~ kubectl get pod -n kube-system 
NAME                                      READY   STATUS    RESTARTS   AGE
coredns-965c8f98c-ffnvl                   1/1     Running   0          415d
coredns-965c8f98c-gssv6                   1/1     Running   0          415d
icagent-2nwvn                             1/1     Running   0          415d
icagent-j22wk                             1/1     Running   0          415d
icagent-mncc5                             1/1     Running   0          415d
icagent-q84gl                             1/1     Running   0          415d
icagent-s89zt                             1/1     Running   0          415d
 
  ~ k get pod
kubectl -n kube-system get pod
NAME                                      READY   STATUS    RESTARTS   AGE
coredns-965c8f98c-ffnvl                   1/1     Running   0          415d
coredns-965c8f98c-gssv6                   1/1     Running   0          415d
icagent-2nwvn                             1/1     Running   0          415d
icagent-j22wk                             1/1     Running   0          415d
icagent-mncc5                             1/1     Running   0          415d
icagent-q84gl                             1/1     Running   0          415d
icagent-s89zt                             1/1     Running   0          415d
lomtom

标题:提升 Kubernetes 命令行操作效率的方法

作者:lomtom

链接:https://lomtom.cn/b2rhfpcdbga5f