我正在寻找在运行测试后收集日志的脚本中列出吊舱中的所有容器。  kubectl describe pods -l k8s-app=kube-dns返回很多信息,但是我只是在寻找像这样的返回:
etcd
kube2sky
skydns
我看不到格式化描述输出的简单方法。还有其他命令吗?(我猜想最坏的情况是总是解析describe的输出)。
Answers:
您可以使用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/
kubectl get pods kube-dns-q2oh6  -o jsonpath={.spec.containers[*].name}
                    快速破解,避免为单个pod构造JSONpath查询:
$ kubectl logs mypod-123
a container name must be specified for pod mypod-123, choose one of: [etcd kubesky skydns]
containers和init containers
                    init containers在v1.18.8上看不到这种方式:(
                    我将一些想法汇总如下:
简单行:
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}'
less或传送到vi:COMMAND | less  或vi<(COMMAND)
                    如果您将其json用作输出格式,则kubectl get可以获得的大量详细信息pod。使用json类似的处理器,jq您可以轻松选择或过滤您感兴趣的某些零件。
要列出容器的容器,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")'
我用它来显示豆荚上的图像版本。
kubectl get pods  -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{end}{end}' && printf '\n'
这只是对脚本的一小部分修改,添加了新行以在新行上开始下一个控制台命令,在每行末尾删除了逗号,仅列出了我的Pod,没有服务Pod(例如,--all-namespaces选项被删除)。
kubectl get pods -o json。