你如何干净地列出kubernetes pod中的所有容器?

时间:2015-11-25 18:44:47

标签: kubernetes

我希望在运行测试后收集日志的脚本中列出pod中的所有容器。 kubectl describe pods -l k8s-app=kube-dns会返回很多信息,但我只是想寻找一个返回信息:

etcd
kube2sky
skydns

我没有看到格式化描述输出的简单方法。还有另一个命令吗? (我猜最糟糕的情况是总是解析describe的输出。)

11 个答案:

答案 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的大量详细信息。使用jsonjq处理器,您可以轻松选择或过滤您感兴趣的某些部分。

要列出容器的容器,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