如何使用Kubectl隐藏列

CES*_*SCO 3 kubernetes

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

watch -n 5 kubectl get pods/rc/svc/pv/pvc
Run Code Online (Sandbox Code Playgroud)

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

awk或cut也可以完成这项工作,但是我无法在不失去表格格式的情况下找到解决方法。

Tim*_*air 6

没有明确支持在kubectl中选择列的子集,但是有几种方法可以实现这一点。您已经提到awk可以将其删除column -t以得到良好的表格格式:

$ kubectl get pods --all-namespaces | awk {'print $1" " $2'} | 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
...
Run Code Online (Sandbox Code Playgroud)

另外,您可以使用kubectl的go-template输出来创建自定义输出(您也可以将其与列配对),例如打印窗格名称和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
Run Code Online (Sandbox Code Playgroud)

更多关于go-templates的信息。还支持JSONpath的变体。


gar*_*ium 6

而不是使用第二个工具/二进制文件,如awk和column。您可以通过-o=custom-columns以下方式使用标志: kubectl get pods --all-namespaces -o=custom-columns=NAME:.metadata.name,Namespace:.metadata.namespace

与go-templates或jsonpath相比,这也是输出自定义列的另一种简便方法!

  • 这是自定义列的另一个有用示例:显示服务的群集IP和端口:`kubectl get svc my-service -o = custom-columns = NAME:.metadata.name,IP:.spec.clusterIP,PORT:。 spec.ports [*]。targetPort` (2认同)
  • 这是一个更好的答案!谢谢@NoamManos 提供的附加示例来显示数组数据类型。在 Zshell 上,我注意到我们应该用单引号将查询 expr 括起来,以避免 shell 语法错误: `kubectl get svc my-service -o=custom-columns='NAME:.metadata.name,IP:.spec.clusterIP,端口:.spec.ports[*].targetPort'` (2认同)