kubectl输出的格式一般是设置好的 写死的 也就是各个资源的列表头的定义都是写死的 具体代码在
github.com/kubernetes/kubernetes/-/blob/pkg/printers/internalversion/printers.go
验证: 当我们输入
1 | kubectl describe pod xxx -v=10 |
可以看到kubectl的输出是转换成了table这种type形式输出的
如果kubectl无法解析成table的话, 他会自己解析成一个 no-Table Object 也就是说只显示NAME和AGE
下面是个例子
1 | .... |
总之 想显示自定义的列的话 先构造一个metav1.Table
那Table的type长什么样子呢
1 | type Table struct { |
可以看到 我们要做的就是把 ColumnDefinitions 去填充自己定义的想打印的列
ColumnDefinitions的定义如下
1 | type TableColumnDefinition struct { |
至于想定义那些列 你可以自己去定义 , 下面给个源码中kubectl输出deployment资源的列的定义
可以参考下deployment是怎么定义的
1 | .... |
table的Kind固定为”Table” 里面的metav1.TableColumnDefinition
里面的东西自己去自定义格式
之后定义完了格式之后 就可以填充数据了 填充数据的话 用的就是Table
中的Rows
上面的例子的填充的地方在
1 | for i,item:=range v.Items{ |
就是构造出一个
1 | metav1.TableRow{ |