Kubectl几个比较有用的插件分享
介绍
kubectl命令支持插件扩展,具体介绍可以参考下面的链接
https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/
kubectl的plugin就是一个可执行文件,以kubectl-*方式命令,放置在PATH路径中,kubectl plugin list的时候就会在PATH路径下递归寻找相应的kubect-*文件,作为其plugin输出。
github上的这个项目https://github.com/ishantanu/awesome-kubectl-plugins 分享了很多kubectl的plugin,我试用了其中的几个,现在把我觉得有用的几个plugin记录一下
kubectl krew介绍
kubectl krew是第一个介绍的,其实他就是一个plugin的管理器,和mac上的brew类似,用于管理kubectl插件的,其github地址如下https://github.com/kubernetes-sigs/krew
直接使用下面的代码安装kubectl
(
set -x; cd "$(mktemp -d)" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/krew.{tar.gz,yaml}" &&
tar zxvf krew.tar.gz &&
KREW=./krew-"$(uname | tr '[:upper:]' '[:lower:]')_amd64" &&
"$KREW" install --manifest=krew.yaml --archive=krew.tar.gz &&
"$KREW" update
)
然后把kubectl-krew的执行命令所在位置添加到PATH目录,如下
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
其实上面的工作很简单,就是从github的release上下载kubectl-krew的压缩包并解压,然后放置到PATH目录中。这样执行kubectl krew的时候就等于是执行kubectl-krew了,kubectl-krew内部记录了索引,会对plugin的整个生命周期进行管理,比如list search install uninstall等等操作,和brew的理念完全一致。然后通过kubectl krew install就可以安装需要的插件了(有些插件krew安装的版本比github上还新,有些不太理解)
下面罗列出一些使用示例:
[root@dodia1 ~]# kubectl krew list
PLUGIN VERSION
krew v0.3.4
[root@dodia1 ~]# kubectl krew search debug
NAME DESCRIPTION INSTALLED
debug Attach ephemeral debug container to running pod no
debug-shell Create pod with interactive kube-shell. no
[root@dodia1 ~]# kubectl krew install doctor
Updated the local copy of plugin index.
New plugins available:
* rolesum
Installing plugin: doctor
Installed plugin: doctor
\
| Use this plugin:
| kubectl doctor
| Documentation:
| https://github.com/emirozer/kubectl-doctor
| Caveats:
| \
| | This plugin needs higher privileges on core API group.
| | Potentially a ClusterRole that can get cluster-scoped resources.
| | Such as nodes / all namespaces etc.
| /
/
WARNING: You installed plugin "doctor" from the krew-index plugin repository.
These plugins are not audited for security by the Krew maintainers.
Run them at your own risk.
kubectl-debug介绍
这个插件经常使用,用于调试k8s环境中的pod,github里这样的项目有好几个,我现在使用的是下面这个项目
https://github.com/aylei/kubectl-debug
其余的项目包括:https://github.com/verb/kubectl-debug
其官网描述如下:
kubectl-debug 是一个简单的 kubectl 插件, 能够帮助你便捷地进行 Kubernetes 上的 Pod 排障诊断. 背后做的事情很简单: 在运行中的 Pod 上额外起一个新容器, 并将新容器加入到目标容器的 pid, network, user 以及 ipc namespace 中, 这时我们就可以在新容器中直接用 netstat, tcpdump 这些熟悉的工具来解决问题了, 而旧容器可以保持最小化, 不需要预装任何额外的排障工具.
kubect-pod_dive介绍
另一个我常用的插件就是pod_dive了,这个插件可以直接显示pod资源的树状图
Air-for-Dodia:~ wenjuntang$ kubectl pod_dive test-nginx-nginx-6c75c78459-5qdl8
[node] node3 [ready]
[namespace] ├─┬ default
[type] │ └─┬ replicaset [deployment]
[workload] │ └─┬ test-nginx-nginx-6c75c78459 [1 replica]
[pod] │ └─┬ test-nginx-nginx-6c75c78459-5qdl8 [running]
[containers] │ └── nginx [0 restarts]
...
[siblings] ├── csi-rbdplugin-k8dk6
├── csi-rbdplugin-provisioner-844f8568b4-gjw9s
├── csi-rbdplugin-provisioner-844f8568b4-smk2f
├── cephfs-provisioner-75545979d8-b25nd
├── debug-agent-zzb87
├── harbor1-harbor-chartmuseum-557c74b5cb-c8gfg
├── harbor1-harbor-core-76b687cd7b-8q99p
├── harbor1-harbor-notary-server-8888898c9-tf52w
├── harbor1-harbor-registry-567468c485-pbl7g
├── jira7-1
├── jira7-recovered-1
├── jira7-recovered-4
├── jira7-recovered-6
├── testmemcache-memcached-1
├── tomcatest1-85b9df7d58-77xwt
├── wangxi-deployment-deployment-1-wangxi-deployment-6c94cd59-dpwpg
├── wx-etcd1-1
├── ingress-nginx-controller-wg9cl
├── appmanager-harbor-79ff98fcd4-kmtkq
├── auth-server-kubedb-recovered-0
├── calico-node-85dpd
├── coredns-8956959d7-kxwfn
├── dns-autoscaler-6db59696c5-vh2cd
├── dnsmasq-outer-autoscaler-5cf4cdc5f4-qgqw9
├── dnsmasq-outer-cf8966c78-rv5hd
├── kube-apiserver-node3
├── kube-controller-manager-node3
├── kube-proxy-zhvcn
├── kube-scheduler-node3
├── local-volume-provisioner-p9nbv
├── mkdir-zfbqr
├── nodelocaldns-n7fp7
├── elasticsearch-logging-2
├── fluentd-es-v2.8.0-vvjtm
├── alertmanager-6cbf699fbd-spmz2
├── ceph-exporter-dd9658889-m5m8t
├── kube-state-metrics-deployment-54d88bbcfc-rdwj4
├── monitoring-disk-4mhgw
├── monitoring-influxdb-cc5fdb46-lwhdr
├── monitoring-smart-rdwsn
├── node-directory-size-metrics-8mk76
├── prometheus-node-exporter-svfn8
├── remote-storage-adapter-dfb9557d6-g72x2
└── registry-proxy-nxvs9