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

行动起来,活在当下

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

目 录CONTENT

文章目录

Kubectl 插件使用详解

zze
zze
2021-07-08 / 0 评论 / 2 点赞 / 317 阅读 / 6634 字

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

kubectl 插件简介

kubectl 插件是指能够由 kubectl 调用的外部独立应用程序,这类应用程序都以 kubectl-<plugin_name> 格式命名,表现为 plugin_namekubectl 的子命令。例如,应用程序 /usr/bin/kubectl-whoami 就是 whoami 插件,我们可以使用 kubectl whoami 的格式来运行它。因此,可为 kubectl 插件添加新的可用子命令,丰富 kubectI 的功能。

插件程序能够从 kubectl 继承环境信息,但 kubectl 的插件机制并不会在该程序及调用的外部程序之间传递任何信息,它仅仅提供了调用外部程序的一个统一接口, 于是我们可以使用任何熟悉的脚本语言或编程语言来开发 kubectl 插件,但最终的脚本或程序文件需要以 kubectl- 为名称前缀。而安装插件的过程,也不过是将插件程序的可执行文件移动到系统的 PATH 环境变量上,指向任一路径即可。事实上,kubectl plugin list 命令可遍历 PATH 环境变量指向的每一个路径,搜索并列出每一个以 kubectl- 为前缀的可执行程序文件路径。

插件管理工具 - Krew

Kubernetes SIG CLI 社区还提供了一个插件管理器 —— Krew, 它能够帮助用户打包、分发、查找、安装和管理 kubectl 插件,项目地址为:

Krew 以跨平台的方式打包和分发插件,因此单一打包格式即能适配主流的系统平台(Linux、Windows 或 macOS 等)。为了便于插件分发,Krew 还维护有一个插件索引,以方便用户发现主流的可用插件。

Krew 自身也表现为 kubectl 的一个插件,需要以手动方式独立安装。

Krew 安装

下面的 shell 命令集能自动完成 Krew 插件的安装,它仅适用于类 UNIX 系统平台,并以 bash 解释器运行,其他平台上的部署方式请参考上面项目地址的官方文档。

$ (
  set -x; cd "$(mktemp -d)" &&
  OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
  ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
  curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/krew.tar.gz" &&
  tar zxvf krew.tar.gz &&
  KREW=./krew-"${OS}_${ARCH}" &&
  "$KREW" install krew
)

安装完成后添加 $HOME/.krew/binPATH 环境变量:

$ echo 'export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"' >> $HOME/.bashrc && . $HOME/.bashrc

查看 kubectl 插件列表确认 Krew 安装完成:

$ $ kubectl plugin list
The following compatible plugins are available:

/root/.krew/bin/kubectl-krew

Krew 基本使用

Krew 的使用其实和 yumapt 这些包管理工具差不多,只不过它是作为 kubectl 的子命令使用而已,这里就简单列一下常用的命令:

kubectl krew update # 更新插件索引
kubectl krew search [plugin_name] # 搜索插件,省略插件名称时表示列出所有可安装插件,支持模糊搜索
kubectl krew install <plugin_name> # 安装插件
kubectl krew list # 查看已安装插件
kubectl krew info <plugin_name> # 查看指定插件详细信息
kubectl krew upgrade <plugin_name> # 升级指定插件
kubectl krew --help # 查看 Krew 使用帮助,其它插件大部分也可以通过 kubectl <plugin_name> --help 的方式来查看插件如何使用

其实目前插件的数量也不是很多,为避免占用文章篇幅,我这里就直接通过如下命令查看插件的数量了,可以看到也就一百来个。

$ kubectl krew search  | wc -l 
148

我使用的插件

我自己有安装的插件有如下:

$ kubectl krew list
PLUGIN     VERSION
ctx        v0.9.4 # 快捷切换上下文
get-all    v1.3.7 # 快捷查看所有资源
krew       v0.4.1 # Krew 本身也是作为插件存在
ns         v0.9.4 # 快捷切换命名空间
rbac-view  v0.2.1 # 提供一个 web 页面可视化展示当前 rbac 资源详情
status     v0.4.1 # 查看指定资源状态信息
tail       v0.15.0 # 查看日志,支持同时查看多个 Pod 的日志
tree       v0.4.0 # 树状展示资源结构信息
whoami     v0.0.35 # 查看当前 kubectl 以何身份访问 API Server

要安装上述插件只需要执行下面命令:

$ kubectl krew install whoami rbac-view ns ctx status tail get-all tree

插件效果展示

下面就随便挑几个插件展示一下效果啦。。

  • ns
# 查看命名空间列表,会高亮当前所在命名空间名称
$ kubectl ns 
default
ingress-nginx
istio-system
kube-node-lease
kube-public
kube-system
kubernetes-dashboard
# 切换指定命名空间为默认命名空间,后续执行命令不用再加 --namespace
$ kubectl ns ingress-nginx
Context "kubernetes" modified.
Active namespace is "ingress-nginx".
root@k8s-master1:/root
$ kubectl get pod 
NAME                             READY   STATUS    RESTARTS   AGE
nginx-ingress-controller-9qfx7   1/1     Running   2          59d
# 切换回上一个命名空间
$ kubectl ns -
Context "kubernetes" modified.
Active namespace is "default".
# 查看当前命名空间
$ kubectl ns -c 
default
  • status
# 查看 Pod 状态
$ kubectl status pod nginx-proxy-9cd44999f-np748

Pod/nginx-proxy-9cd44999f-np748 -n default, created 22d ago by ReplicaSet/nginx-proxy-9cd44999f Running BestEffort
  PodScheduled -> Initialized -> ContainersReady -> Ready for 10h
  Containers:
    nginx (nginx:1.16.1) Running for 10h and Ready, restarted 2 times
      usage cpu:0, mem:1.9MB
      previously: Started 10h ago and Error after 20s with exit code 1
# 查看 Service 状态
$ kubectl status svc nginx-proxy 

Service/nginx-proxy -n default, created 1mo ago, last endpoint change was 292y ago
  Ready: Pod/nginx-proxy-9cd44999f-np748 -n default on Node/k8s-node1, 10.244.1.39:3306/TCP
  • tail
# 查看 Pod 日志
$ kubectl tail -p nginx-proxy-9cd44999f-np748
# 查看 deploy 下所有 Pod 的日志
$ kubectl tail -d nginx-proxy
# 更多查看日志方式可通过 --help 查看
$ kubectl tail --help 
usage: kubectl-tail [<flags>] <command> [<args> ...]

Tail for kubernetes pods

Flags:
  -h, --help                  Show context-sensitive help (also try --help-long and --help-man).
      --ignore=SELECTOR ...   ignore selector
  -l, --label=SELECTOR ...    label
  -p, --pod=NAME ...          pod
  -n, --ns=NAME ...           namespace
      --ignore-ns=NAME ...    ignore namespace
      --svc=NAME ...          service
      --rc=NAME ...           replication controller
      --rs=NAME ...           replica set
      --ds=NAME ...           daemonset
  -d, --deploy=NAME ...       deployment
  -j, --job=NAME ...          job
      --node=NAME ...         node
      --ing=NAME ...          ingress
      --context=CONTEXT-NAME  kubernetes context
      --current-ns            use namespace from current context
  -c, --containers=NAME ...   containers
      --dry-run               print matching pods and exit
      --log-file=LOG-FILE     log file output
      --log-level=error       log level
      --since=DURATION        Display logs generated since given duration, like 5s, 2m, 1.5h or 2h45m. Defaults to 1s.

Commands:
  help [<command>...]
    Show help.

  run*
    Display logs

  version
    Display current version

还有很多优秀的插件我这里没有演示。。可以看到使用其实很简单,多用 --help 你就会了~

2

评论区