如何使用 Kubectl 隐藏列

How to hide a column with Kubectl

我使用 tmuxinator 生成一个 tmux window 来监视一些 kubectl 命令的输出,例如:

watch -n 5 kubectl get pods/rc/svc/pv/pvc

但有时 Kubectl 的输出会变得太宽,即滚动更新后的选择器列,我不想在我的设置中显示它。我如何单独使用 kubectl 来做到这一点?

awk 或 cut 也可以完成这项工作,但我想不出一种在不丢失 table 格式的情况下执行此操作的方法。

在 kubectl 中没有明确支持选择列的子集,但有几种方法可以实现这一点。您已经提到 awk 可以与 column -t 配对以获得漂亮的 table 格式:

$ kubectl get pods --all-namespaces | awk {'print " " '} | column -t
NAMESPACE    NAME
kube-system  fluentd-cloud-logging-k8s-stclair-minion-wnzd
kube-system  kube-dns-v10-fo6gl
kube-system  kube-proxy-k8s-stclair-minion-wnzd
...

或者,您可以使用 kubectl 的 go-template 输出来创建自定义输出(您也可以将其与列配对),例如打印 pod 名称和 UID 的前 8 个字符:

$ kubectl get pods --all-namespaces -o=go-template='{{println "NAME UID"}}{{range .items}}{{.metadata.name}} {{printf "%.8s\n" .metadata.uid}}{{end}}' | column -t
NAME                                           UID
fluentd-cloud-logging-k8s-stclair-minion-wnzd  8bcb7129
kube-dns-v10-fo6gl                             90bce35e
kube-proxy-k8s-stclair-minion-wnzd             8bc752c8
kubernetes-dashboard-v0.1.0-cptxn              90d18852
l7-lb-controller-v0.5.2-n6i23                  90daf833

有关 go-templates 的更多信息 here. A variant of JSONpath 也受支持。

而不是像 awk 和列那样使用第二个 tool/binary。你可以这样使用标志 -o=custom-columnskubectl get pods --all-namespaces -o=custom-columns=NAME:.metadata.name,Namespace:.metadata.namespace

这也是一种比 go-templates 或 jsonpath 更简单的输出自定义列的方法!