前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1分钟配置Kubectl命令自动补全功能

1分钟配置Kubectl命令自动补全功能

作者头像
非著名运维
发布2022-06-22 16:08:45
4.2K0
发布2022-06-22 16:08:45
举报
文章被收录于专栏:非著名运维非著名运维

前言:

 在使用bash命令行时,在提示符下输入某个命令的前面几个字符,然后按TAB键,就会列出以这几个字符开头的命令供我们选择。不光如此,还可以进行参数补全,但只限于文件参数,当输入到参数部分时,按TAB键,就会列出以这个参数开头的文件路径供我们选择。 现在http://www.caliban.org/bash/上提供了一个名为bash-completion的软件包,通过一个复杂的脚本bash_completion实现可编程的补全程序,减少系统管理员日常维护工作,减少差错,提高工作效率。

网站:

bash-completion补全工具官网:https://caliban.org/bash/

安装:

在日常管理k8s集群的时候,时刻都会使用到Kubectl命令行工具,但是该命令还是挺复杂的,使用中也记不住那么多的api选项,所以这里介绍一下Kubectl命令补全工具(其实是Linux中bash命令自动补全工具)的安装。

yum -y install bash-completion

source /usr/share/bash-completion/bash_completion

source <(kubectl completion bash)

echo "source <(kubectl completion bash)" >> ~/.bashrc

代码语言:javascript
复制
[root@k8s-master ~]# yum install -y bash-completion
...
...
  正在安装    : 1:bash-completion-2.1-8.el7.noarch                                                         1/1
  验证中      : 1:bash-completion-2.1-8.el7.noarch                                                         1/1

已安装:
  bash-completion.noarch 1:2.1-8.el7

完毕!

[root@k8s-master ~]# source /usr/share/bash-completion/bash_completion

[root@k8s-master ~]# source <(kubectl completion bash)

[root@k8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc      //应用kubectl的completion到系统环境

查看bash_completion补全脚本程序:

代码语言:javascript
复制
[root@k8s-master ~]# vim /usr/share/bash-completion/bash_completion     
#                                                          -*- shell-script -*-
#
#   bash_completion - programmable completion functions for bash 4.1+
#
#   Copyright © 2006-2008, Ian Macdonald <ian@caliban.org>
#             © 2009-2013, Bash Completion Maintainers
#                     <bash-completion-devel@lists.alioth.debian.org>
#
#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2, or (at your option)
#   any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program; if not, write to the Free Software Foundation,
#   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
#   The latest version of this software can be obtained here:
#
#   http://bash-completion.alioth.debian.org/
#
#   RELEASE: 2.1

if [[ $- == *v* ]]; then
    BASH_COMPLETION_ORIGINAL_V_VALUE="-v"
else
    BASH_COMPLETION_ORIGINAL_V_VALUE="+v"
fi

if [[ ${BASH_COMPLETION_DEBUG-} ]]; then
    set -v
else
    set +v
fi

# Set the following to the location of the backwards compat completion dir.
#
: ${BASH_COMPLETION_COMPAT_DIR:=/etc/bash_completion.d}
readonly BASH_COMPLETION_COMPAT_DIR

# Blacklisted completions, causing problems with our code.
#
_blacklist_glob='@()'

# Turn on extended globbing and programmable completion
shopt -s extglob progcomp
...
...

验证:

以下自动补全命令验证在不安装bash_completion工具时是无法实现自动补全的。

1.Kubectl命令自动补全:

代码语言:javascript
复制
[root@k8s-master ~]# kube
kubeadm  kubectl  kubelet

[root@k8s-master ~]# kubectl              --按TAB键两次,提示kubectl后面可跟的命令
annotate       certificate    debug          explain        options        run            wait
api-resources  cluster-info   delete         expose         patch          scale
api-versions   completion     describe       get            plugin         set
apply          config         diff           help           port-forward   taint
attach         cordon         drain          kustomize      proxy          top
auth           cp             edit           label          replace        uncordon
autoscale      create         exec           logs           rollout        version

[root@k8s-master ~]# kubectl e
edit     exec     explain  expose

[root@k8s-master ~]# kubectl exec -
--add-dir-header            --kubeconfig=               --request-timeout
--alsologtostderr           --log-backtrace-at          --request-timeout=
--as                        --log-backtrace-at=         -s
--as=                       --log-dir                   --server
--as-group                  --log-dir=                  --server=
--as-group=                 --log-file                  --skip-headers
-c                          --log-file=                 --skip-log-headers
--cache-dir                 --log-file-max-size         --stderrthreshold
--cache-dir=                --log-file-max-size=        --stderrthreshold=
--certificate-authority     --log-flush-frequency       --stdin
--certificate-authority=    --log-flush-frequency=      -t
--client-certificate        --logtostderr               --tls-server-name
--client-certificate=       --match-server-version      --tls-server-name=
--client-key                -n                          --token
--client-key=               --namespace                 --token=
--cluster                   --namespace=                --tty
--cluster=                  --one-output                --user
--container                 --password                  --user=
--container=                --password=                 --username
--context                   --pod-running-timeout       --username=
--context=                  --pod-running-timeout=      -v
-f                          --profile                   --v
--filename                  --profile=                  --v=
--filename=                 --profile-output            --vmodule
-i                          --profile-output=           --vmodule=
--insecure-skip-tls-verify  -q                          --warnings-as-errors
--kubeconfig                --quiet

[root@k8s-master ~]# kubectl get n
namespaces                         networkpolicies.networking.k8s.io  nodes

2.Linux中bash命令自动补全:

代码语言:javascript
复制
[root@k8s-master ~]# iptables --
--append         --flush          --line-numbers   --numeric        --rename-chain   --verbose
--delete         --fragment       --list           --out-interface  --replace        --version
--delete-chain   --in-interface   --match          --policy         --set-counters   --zero
--destination    --insert         --modprobe       --proto          --source
--exact          --jump           --new            --protocol       --tabl

[root@k8s-master ~]# systemctl s
set-default       set-property      show-environment  start             stop              switch-root
set-environment   show              snapshot          status            suspend

[root@k8s-master ~]# firewall-cmd --
--add-forward-port=                   --list-services
--add-icmp-block=                     --list-source-ports
--add-icmp-block-inversion            --list-sources
--add-interface=                      --lockdown-off
--add-lockdown-whitelist-command=     --lockdown-on
--add-lockdown-whitelist-context=     --panic-off
--add-lockdown-whitelist-uid=         --panic-on
--add-lockdown-whitelist-user=        --permanent
--add-masquerade                      --query-forward-port=
--add-port=                           --query-icmp-block=
--add-protocol=                       --query-icmp-block-inversion
--add-rich-rule=                      --query-interface=
--add-service=                        --query-lockdown
--add-source=                         --query-lockdown-whitelist-command=
--add-source-port=                    --query-lockdown-whitelist-context=
--change-interface=                   --query-lockdown-whitelist-uid=
--change-source=                      --query-lockdown-whitelist-user=
--change-zone=                        --query-masquerade
--complete-reload                     --query-panic
--direct                              --query-port=
--get-active-zones                    --query-protocol=
--get-default-zone                    --query-rich-rule=
--get-description                     --query-service=
--get-helpers                         --query-source=
--get-icmptypes                       --query-source-port=
--get-ipset-types                     --reload
--get-log-denied                      --remove-forward-port=
--get-services                        --remove-icmp-block=
--get-short                           --remove-icmp-block-inversion
--get-zone-of-interface=              --remove-interface=
--get-zones                           --remove-lockdown-whitelist-command=
--help                                --remove-lockdown-whitelist-context=
--info-helper=                        --remove-lockdown-whitelist-uid=
--info-icmptype=                      --remove-lockdown-whitelist-user=
--info-ipset=                         --remove-masquerade
--info-service=                       --remove-port=
--info-zone=                          --remove-protocol=
--list-all                            --remove-rich-rule=
--list-all-zones                      --remove-service=
--list-forward-ports                  --remove-source=
--list-icmp-blocks                    --remove-source-port=
--list-interfaces                     --set-default-zone=
--list-lockdown-whitelist-commands    --set-description=
--list-lockdown-whitelist-contexts    --set-log-denied=
--list-lockdown-whitelist-uids        --set-short=
--list-lockdown-whitelist-users       --state
--list-ports                          --version
--list-protocols                      --zone=
--list-rich-rules
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 非著名运维 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • 网站:
  • 安装:
  • 验证:
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档