你如何清楚地列出 kubernetes pod 中的所有容器?
How do you cleanly list all the containers in a kubernetes pod?
我希望在 运行 测试后收集日志的脚本中列出 pod 中的所有容器。 kubectl describe pods -l k8s-app=kube-dns
return 有很多信息,但我只是在寻找 return 比如:
etcd
kube2sky
skydns
我没有看到格式化描述输出的简单方法。还有其他命令吗? (我想最坏的情况总是解析 describe 的输出)。
您可以使用 get
并选择带有 --output
(-o
) 标志的受支持输出模板之一。
以jsonpath
为例,
kubectl get pods -l k8s-app=kube-dns -o jsonpath={.items[*].spec.containers[*].name}
给你 etcd kube2sky skydns
。
其他支持的output输出模板有go-template、go-template-file、jsonpath-file。请参阅 http://kubernetes.io/docs/user-guide/jsonpath/ for how to use jsonpath template. See https://golang.org/pkg/text/template/#pkg-overview 了解如何使用 go 模板。
更新:查看此文档以获取其他示例命令以列出容器映像:https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/
如果您使用 json
作为 kubectl get
you get plenty details of a pod
. With json
processors like jq
的输出格式,则很容易 select 或过滤您感兴趣的某些部分。
要列出 pod 的容器,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")'
如果您想要清楚地输出每个 Pod 中有哪些容器
kubectl get po -l k8s-app=kube-dns \
-o=custom-columns=NAME:.metadata.name,CONTAINERS:.spec.containers[*].name
回答
kubectl get pods POD_NAME_HERE -o jsonpath='{.spec.containers[*].name}'
说明
这会获取表示广告连播的 JSON 对象。然后它使用 kubectl 的 JSONpath 从 pod 中提取每个容器的名称。
避免为单个 pod 构造 JSONpath 查询的快速技巧:
$ kubectl logs mypod-123
a container name must be specified for pod mypod-123, choose one of: [etcd kubesky skydns]
我用它来显示 pods 上的图像版本。
kubectl get pods -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{end}{end}' && printf '\n'
这只是对 here 脚本的一个小修改,添加了新行以在新行上启动下一个控制台命令,删除了每行末尾的逗号并仅列出了我的 pods , 没有服务 pods(例如 --all-namespaces
选项被删除)。
我把一些想法归纳如下:
简单的行:
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}'
使用以下命令查看特定 pod 的所有信息
kubectl get pod <pod name> -n <namespace name> -o yaml
要查看详细信息以及特定 pod 中所有容器的配置映射,请使用以下命令:
kubectl describe pod/<pod name> -n <namespace name>
使用以下命令:
kubectl get pods -o=custom-columns=PodName:.metadata.name,Containers:.spec.containers[*].name,Image:.spec.containers[*].image
了解 pod 中容器的最简单方法:
kubectl logs -c -n
如何列出所有 pods
的初始容器和非初始容器
kubectl get pod -o="custom-columns=NAME:.metadata.name,INIT-CONTAINERS:.spec.initContainers[*].name,CONTAINERS:.spec.containers[*].name"
输出如下所示:
NAME INIT-CONTAINERS CONTAINERS
helm-install-traefik-sjts9 <none> helm
metrics-server-86cbb8457f-dkpqm <none> metrics-server
local-path-provisioner-5ff76fc89d-vjs6l <none> local-path-provisioner
coredns-6488c6fcc6-zp9gv <none> coredns
svclb-traefik-f5wwh <none> lb-port-80,lb-port-443
traefik-6f9cbd9bd4-pcbmz <none> traefik
dc-postgresql-0 init-chmod-data dc-postgresql
backend-5c4bf48d6f-7c8c6 wait-for-db backend
要在单独的行中获取输出:
kubectl get pods POD_NAME_HERE -o jsonpath='{range .spec.containers[*]}{.name}{"\n"}{end}'
输出:
base-container
sidecar-0
sidecar-1
sidecar-2
有关 pod 的整体详细信息,请尝试使用以下命令来获取容器详细信息
kubectl describe pod <podname>
我希望在 运行 测试后收集日志的脚本中列出 pod 中的所有容器。 kubectl describe pods -l k8s-app=kube-dns
return 有很多信息,但我只是在寻找 return 比如:
etcd
kube2sky
skydns
我没有看到格式化描述输出的简单方法。还有其他命令吗? (我想最坏的情况总是解析 describe 的输出)。
您可以使用 get
并选择带有 --output
(-o
) 标志的受支持输出模板之一。
以jsonpath
为例,
kubectl get pods -l k8s-app=kube-dns -o jsonpath={.items[*].spec.containers[*].name}
给你 etcd kube2sky skydns
。
其他支持的output输出模板有go-template、go-template-file、jsonpath-file。请参阅 http://kubernetes.io/docs/user-guide/jsonpath/ for how to use jsonpath template. See https://golang.org/pkg/text/template/#pkg-overview 了解如何使用 go 模板。
更新:查看此文档以获取其他示例命令以列出容器映像:https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/
如果您使用 json
作为 kubectl get
you get plenty details of a pod
. With json
processors like jq
的输出格式,则很容易 select 或过滤您感兴趣的某些部分。
要列出 pod 的容器,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")'
如果您想要清楚地输出每个 Pod 中有哪些容器
kubectl get po -l k8s-app=kube-dns \
-o=custom-columns=NAME:.metadata.name,CONTAINERS:.spec.containers[*].name
回答
kubectl get pods POD_NAME_HERE -o jsonpath='{.spec.containers[*].name}'
说明
这会获取表示广告连播的 JSON 对象。然后它使用 kubectl 的 JSONpath 从 pod 中提取每个容器的名称。
避免为单个 pod 构造 JSONpath 查询的快速技巧:
$ kubectl logs mypod-123
a container name must be specified for pod mypod-123, choose one of: [etcd kubesky skydns]
我用它来显示 pods 上的图像版本。
kubectl get pods -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{end}{end}' && printf '\n'
这只是对 here 脚本的一个小修改,添加了新行以在新行上启动下一个控制台命令,删除了每行末尾的逗号并仅列出了我的 pods , 没有服务 pods(例如 --all-namespaces
选项被删除)。
我把一些想法归纳如下:
简单的行:
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}'
使用以下命令查看特定 pod 的所有信息
kubectl get pod <pod name> -n <namespace name> -o yaml
要查看详细信息以及特定 pod 中所有容器的配置映射,请使用以下命令:
kubectl describe pod/<pod name> -n <namespace name>
使用以下命令:
kubectl get pods -o=custom-columns=PodName:.metadata.name,Containers:.spec.containers[*].name,Image:.spec.containers[*].image
了解 pod 中容器的最简单方法:
kubectl logs -c -n
如何列出所有 pods
的初始容器和非初始容器kubectl get pod -o="custom-columns=NAME:.metadata.name,INIT-CONTAINERS:.spec.initContainers[*].name,CONTAINERS:.spec.containers[*].name"
输出如下所示:
NAME INIT-CONTAINERS CONTAINERS
helm-install-traefik-sjts9 <none> helm
metrics-server-86cbb8457f-dkpqm <none> metrics-server
local-path-provisioner-5ff76fc89d-vjs6l <none> local-path-provisioner
coredns-6488c6fcc6-zp9gv <none> coredns
svclb-traefik-f5wwh <none> lb-port-80,lb-port-443
traefik-6f9cbd9bd4-pcbmz <none> traefik
dc-postgresql-0 init-chmod-data dc-postgresql
backend-5c4bf48d6f-7c8c6 wait-for-db backend
要在单独的行中获取输出:
kubectl get pods POD_NAME_HERE -o jsonpath='{range .spec.containers[*]}{.name}{"\n"}{end}'
输出:
base-container
sidecar-0
sidecar-1
sidecar-2
有关 pod 的整体详细信息,请尝试使用以下命令来获取容器详细信息
kubectl describe pod <podname>