Kubectl Plugin 推荐(一)| 可观测性篇_3g

前言

​kubectl​​ 作为最重要的 Kubernetes 客户端工具一直以来都被广泛的应用与各种场景,其对于 YAML 工程师的作用就像战士手中的枪,用的好不好完全可以影响到 YAML 工程师的整体工作效率。虽然 kubectl

Krew

Krew 是 kubernetes SIG 项目,是 ​​kubectl​​ 的插件管理器,其提供了类似 brew 的包管理功能,用户可以方便的使用 krew 安装和使用 kubectl 插件,极大的方便了 kubectl 插件的开发和管理。

安装

Krew 虽然也可以使用 brew

(
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/bin​​​ 添加到 ​​PATH​​​ 中,在 ​​.bashrc​​​ 或 ​​.zshrc​​ 文件中添加以下内容:

export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"

添加完成后请重启终端,使用 ​​kubectl krew​​ 检查是否安装成功。

插件推荐

接下来推荐一些增强可观测性的

tree

该插件是由 Google 大佬开发,通过 ownerReferences

项目地址:https://github.com/ahmetb/kubectl-tree

安装

$ kubectl krew install tree
$ kubectl tree --help

示例

Kubectl Plugin 推荐(一)| 可观测性篇_nginx_02kubectl tree

status

kubectl-status 这个插件简化了 ​​get​​​ 和 ​​describe​​ 操作,采用不同颜色和箭头等元素来展示 kubernetes 资源的生命周期和状态信息,可以查看单个资源,也可以查看该 namespace 下的所有该资源的状态,极大的缩短了问题排查的时间,减少了操作步骤。

项目地址:https://github.com/bergerx/kubectl-status

安装

$ kubectl krew install status
$ kubectl status --help

示例

Kubectl Plugin 推荐(一)| 可观测性篇_github_03PodKubectl Plugin 推荐(一)| 可观测性篇_nginx_04StatefulSet

view-allocations

kubectl-view-allocations 可以非常方便的展示 CPU、内存、GPU 等资源的分布情况,并可以对 namespace、node、pod 等维度进行展示。

项目地址:https://github.com/davidB/kubectl-view-allocations

安装

脚本安装

$ curl https://raw.githubusercontent.com/davidB/kubectl-view-allocations/master/scripts/getLatest.sh | bash

krew

$ kubectl krew install view-allocations

cargo

$ cargo install kubectl-view-allocations

示例

展示 GPU 的分配情况

$ kubectl-view-allocations -r gpu

Resource Requested Limit Allocatable Free
nvidia.com/gpu (71%) 10.0 (71%) 10.0 14.0 4.0
├─ node-gpu1 (0%) 0.0 (0%) 0.0 2.0 2.0
├─ node-gpu2 (0%) 0.0 (0%) 0.0 2.0 2.0
├─ node-gpu3 (100%) 2.0 (100%) 2.0 2.0 0.0
│ └─ fah-gpu-cpu-d29sc 2.0 2.0
├─ node-gpu4 (100%) 2.0 (100%) 2.0 2.0 0.0
│ └─ fah-gpu-cpu-hkg59 2.0 2.0
├─ node-gpu5 (100%) 2.0 (100%) 2.0 2.0 0.0
│ └─ fah-gpu-cpu-nw9fc 2.0 2.0
├─ node-gpu6 (100%) 2.0 (100%) 2.0 2.0 0.0
│ └─ fah-gpu-cpu-gtwsf 2.0 2.0
└─ node-gpu7 (100%) 2.0 (100%) 2.0 2.0 0.0
└─ fah-gpu-cpu-x7zfb 2.0 2.0


展示 namespace 维度资源的分配情况

$ kubectl-view-allocations -g namespace

Resource Requested Limit Allocatable Free
cpu (21%) 56.7 (65%) 176.1 272.0 95.9
├─ default 42.1 57.4
├─ dev 5.3 102.1
├─ dns-external 200.0m 0.0
├─ docs 150.0m 600.0m
├─ ingress-nginx 200.0m 1.0
├─ kube-system 2.1 1.4
├─ loki 1.2 2.4
├─ monitoring 3.5 7.0
├─ sharelatex 700.0m 2.4
└─ weave 1.3 1.8
ephemeral-storage (0%) 0.0 (0%) 0.0 38.4T 38.4T
memory (8%) 52.7Gi (15%) 101.3Gi 675.6Gi 574.3Gi
├─ default 34.6Gi 60.0Gi
├─ dev 5.3Gi 22.1Gi
├─ dns-external 140.0Mi 340.0Mi
├─ docs 448.0Mi 768.0Mi
├─ ingress-nginx 256.0Mi 1.0Gi
├─ kube-system 840.0Mi 1.0Gi
├─ loki 1.5Gi 1.6Gi
├─ monitoring 5.9Gi 5.7Gi
├─ sharelatex 2.5Gi 7.0Gi
└─ weave 1.3Gi 1.8Gi
nvidia.com/gpu (71%) 10.0 (71%) 10.0 14.0 4.0
└─ dev 10.0 10.0
pods (9%) 147.0 (9%) 147.0 1.6k 1.5k
├─ cert-manager 3.0 3.0
├─ default 13.0 13.0
├─ dev 9.0 9.0
├─ dns-external 2.0 2.0
├─ docs 8.0 8.0
├─ ingress-nginx 2.0 2.0
├─ kube-system 43.0 43.0
├─ loki 12.0 12.0
├─ monitoring 38.0 38.0
├─ sharelatex 3.0 3.0
└─ weave 14.0 14.0

images

kubectl-images 可以展示集群中正在使用的镜像,并对 namespace 进行一个简单的统计。使用这个插件可以非常方面的查看 namespace 中使用了哪些镜像,尤其在排查问题需要查看镜像版本时非常有用。

项目地址:https://github.com/chenjiandongx/kubectl-images

安装

$ kubectl krew install images
$ kubectl images --help

示例

Kubectl Plugin 推荐(一)| 可观测性篇_nginx_05kubectl-images

结语

有了 plugin 的加持,可以轻松为 kubectl 打造出一整套适合自己操作习惯的工具体系。如果这些插件都不符合要求,大可以自己开发一款插件,这样做可以大大提升工作效率,将自己从重复的劳动中解放出来!这也是笔者不常加班的原因之一

- END -