在kubectl中使用自定义列或jsonpath组合多个列输出



这是custom-columns

的输出
$ kubectl -n web get pod -ocustom-columns="Name:.metadata.name,Image:.spec.containers[0].image"
Name      Image
mysql-0   myrepo.mydomain.com/mysql:5.7
mysql-1   myrepo.mydomain.com/mysql:5.7
mysql-2   myrepo.mydomain.com/mysql:5.7

这是单个pod

使用jsonpath的输出
$ kubectl -n web get pod -o jsonpath="{..metadata.name}:{..spec.containers[0].image}" mysql-0
mysql-0:myrepo.mydomain.com/mysql:5.7

这是多个pod使用jsonpath的输出

$ kubectl -n web get pod -o jsonpath="{..metadata.name}:{..spec.containers[0].image}"
mysql-0 mysql-1 mysql-2:myrepo.mydomain.com/mysql:5.7 myrepo.mydomain.com/mysql:5.7 myrepo.mydomain.com/mysql:5.7

现在如何使用-ocustom-columns-ojsonpath将这些组合成单个列或单词,就像这样

mysql-0=myrepo.mydomain.com/mysql:5.7
mysql-1=myrepo.mydomain.com/mysql:5.7
mysql-2=myrepo.mydomain.com/mysql:5.7

使用kubectl使用纯jsonpath:

kubectl get pod -n <namespace> -o jsonpath='{range .items[*]}{.metadata.name}={.spec.containers[*].image}{"n"}{end}'

的例子:

kubectl get pod -n default -o jsonpath='{range .items[*]}{.metadata.name}={.spec.containers[*].image}{"n"}{end}'
nginx-0=nginx
nginx-1=nginx
nginx-2=nginx

这里range特性用于遍历所有pod:

{range items[*]} ...<LOGIC HERE>... {end}

在范围块之间(如上所述),使用jsonpath,注意=符号是根据我们的要求使用的。

{.metadata.name}={.spec.containers[*].image}{"n"}

最新更新