我希望在运行测试后收集日志的脚本中列出pod中的所有容器。 kubectl describe pods -l k8s-app=kube-dns
会返回很多信息,但我只是想寻找一个返回信息:
etcd
kube2sky
skydns
我没有看到格式化描述输出的简单方法。还有另一个命令吗? (我猜最糟糕的情况是总是解析describe的输出。)
答案 0 :(得分:39)
您可以使用get
并选择一个支持的输出模板,其中包含--output
(-o
)标记。
以jsonpath
为例,
kubectl get pods -l k8s-app=kube-dns -o jsonpath={.items[*].spec.containers[*].name}
为您提供etcd kube2sky skydns
。
其他支持的输出输出模板是go-template,go-template-file,jsonpath-file。有关如何使用jsonpath模板,请参阅http://kubernetes.io/docs/user-guide/jsonpath/。有关如何使用go模板的信息,请参阅https://golang.org/pkg/text/template/#pkg-overview。
更新:检查此文档以获取列出容器图像的其他示例命令:https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/
答案 1 :(得分:28)
kubectl get pods POD_NAME_HERE -o jsonpath='{.spec.containers[*].name}'
这将获取表示pod的JSON对象。然后,它使用kubectl的JSONpath从pod中提取每个容器的名称。
答案 2 :(得分:9)
快速破解以避免为单个pod构建JSONpath查询:
$ kubectl logs mypod-123
a container name must be specified for pod mypod-123, choose one of: [etcd kubesky skydns]
答案 3 :(得分:4)
如果你想要清楚地输出每个Pod的容器
kubectl get po -l k8s-app=kube-dns \
-o=custom-columns=NAME:.metadata.name,CONTAINERS:.spec.containers[*].name
答案 4 :(得分:1)
使用以下命令:
kubectl get pods -o=custom-columns=PodName:.metadata.name,Containers:.spec.containers[*].name,Image:.spec.containers[*].image
答案 5 :(得分:0)
如果您使用json
作为kubectl get
的输出格式,则会获得pod
的大量详细信息。使用json
等jq
处理器,您可以轻松选择或过滤您感兴趣的某些部分。
要列出容器的容器,kubectl get --all-namespaces --selector k8s-app=kube-dns --output json pods \
| jq --raw-output '.items[].spec.containers[].name'
查询如下所示:
kubectl get --all-namespaces --selector k8s-app=kube-dns --output json pods \
| jq '.items[].spec.containers[] | select(.name=="etcd")'
如果您想查看有关某个特定容器的所有详细信息,请尝试以下操作:
class
答案 6 :(得分:0)
我用它来显示豆荚上的图像版本。
kubectl get pods -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{end}{end}' && printf '\n'
这只是对here的脚本的小修改,添加了新行以在新行上开始下一个控制台命令,删除了每行末尾的逗号,仅列出了我的Pod,没有服务Pod(例如--all-namespaces
选项已删除)。
答案 7 :(得分:0)
我将一些想法汇总如下:
简单行:
kubectl get po -o jsonpath='{range .items[*]}{"pod: "}{.metadata.name}{"\n"}{range .spec.containers[*]}{"\tname: "}{.name}{"\n\timage: "}{.image}{"\n"}{end}'
分割(出于可读性):
kubectl get po -o jsonpath='
{range .items[*]}
{"pod: "}
{.metadata.name}
{"\n"}{range .spec.containers[*]}
{"\tname: "}
{.name}
{"\n\timage: "}
{.image}
{"\n"}
{end}'
答案 8 :(得分:0)
使用以下命令查看特定吊舱的所有信息
kubectl get pod <pod name> -n <namespace name> -o yaml
答案 9 :(得分:0)
要查看详细信息以及特定容器中所有容器的配置图,请使用以下命令:
kubectl describe pod/<pod name> -n <namespace name>
答案 10 :(得分:0)
了解容器中容器的最简单方法:
kubectl日志-c -n