我希望在运行测试后收集日志的脚本中列出pod中的所有容器. kubectl describe pods -l k8s-app=kube-dns返回了很多信息,但我只是想寻找一个回报:
etcd
kube2sky
skydns
Run Code Online (Sandbox Code Playgroud)
我没有看到格式化描述输出的简单方法.还有另一个命令吗?(我猜最糟糕的情况是总是解析describe的输出).
jan*_*kuo 46
您可以使用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/
Cor*_*ein 40
kubectl get pods POD_NAME_HERE -o jsonpath='{.spec.containers[*].name}'
Run Code Online (Sandbox Code Playgroud)
这将获取表示pod的JSON对象.然后,它使用kubectl的JSONpath从pod中提取每个容器的名称.
Paw*_*ski 24
如何列出所有 pod 的 init 和非 init 容器
kubectl get pod -o="custom-columns=NAME:.metadata.name,INIT-CONTAINERS:.spec.initContainers[*].name,CONTAINERS:.spec.containers[*].name"
Run Code Online (Sandbox Code Playgroud)
输出看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
Bor*_*ard 17
快速入侵以避免为单个pod构建JSONpath查询:
$ kubectl logs mypod-123
a container name must be specified for pod mypod-123, choose one of: [etcd kubesky skydns]
Run Code Online (Sandbox Code Playgroud)
小智 13
我将一些想法汇总为以下内容:
简单线:
kubectl get po -o jsonpath='{range .items[*]}{"pod: "}{.metadata.name}{"\n"}{range .spec.containers[*]}{"\tname: "}{.name}{"\n\timage: "}{.image}{"\n"}{end}'
Run Code Online (Sandbox Code Playgroud)
拆分(为了可读性):
kubectl get po -o jsonpath='
{range .items[*]}
{"pod: "}
{.metadata.name}
{"\n"}{range .spec.containers[*]}
{"\tname: "}
{.name}
{"\n\timage: "}
{.image}
{"\n"}
{end}'
Run Code Online (Sandbox Code Playgroud)
Bin*_*lin 11
要在单独的行中获取输出(初始化和非初始化容器):
kubectl get pods POD_NAME_HERE -o jsonpath='{range .spec.initContainers[*]}{.name}{"\n"}{end}{range .spec.containers[*]}{.name}{"\n"}{end}'
Run Code Online (Sandbox Code Playgroud)
输出:基础容器
sidecar-0
sidecar-1
sidecar-2
如果您想清楚地输出每个Pod中的哪些容器
kubectl get po -l k8s-app=kube-dns \
-o=custom-columns=NAME:.metadata.name,CONTAINERS:.spec.containers[*].name
Run Code Online (Sandbox Code Playgroud)
使用以下命令:
kubectl get pods -o=custom-columns=PodName:.metadata.name,Containers:.spec.containers[*].name,Image:.spec.containers[*].image
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45881 次 |
| 最近记录: |