Kubernetes 如何列出pod中运行的所有容器,包括init容器?

Kubernetes 如何列出pod中运行的所有容器,包括init容器?,kubernetes,Kubernetes,检索pod中运行的所有容器的解决方案是在此处运行kubectl get pods pod_NAME_-o jsonpath={.spec.containers[*].NAME},但是此命令行不提供init containers 有没有办法干净地检索pod中运行的所有容器,包括init容器 [编辑]正如svenwltr所指出的,在Kubernete 1.6.0或更高版本上,可以使用kubectl get pods POD_NAME_HERE-o jsonpath={.spec.initContai

检索pod中运行的所有容器的解决方案是在此处运行
kubectl get pods pod_NAME_-o jsonpath={.spec.containers[*].NAME}
,但是此命令行不提供init containers

有没有办法干净地检索pod中运行的所有容器,包括init容器


[编辑]正如svenwltr所指出的,在Kubernete 1.6.0或更高版本上,可以使用
kubectl get pods POD_NAME_HERE-o jsonpath={.spec.initContainers[*].NAME}
检索init容器,并且可以使用
kubectl get POD_NAME_HERE-o jsonpath=“{.spec['containers','initContainers'[*].NAME}”检索所有容器。但是,对于尚未实现
.spec.initContainers
的Kubernetes较低版本,这不是有效的解决方法。

init容器存储在
spec.initContainers
中:

kubectl get pods POD_NAME_HERE -o jsonpath={.spec.initContainers[*].name}
您可以通过以下方式显示两者:


在Kubernetes 1.6之前,init容器存储在
.metadata.annotations.pod.beta.Kubernetes.io/init containers“
中。因此,应该可以通过以下方式获得:

kubectl get pods POD_NAME_HERE -o jsonpath='{metadata.annotations."pod.beta.kubernetes.io/init-containers".[*].name}'

不幸的是,我无法测试它,因为我没有具有此版本的集群。同样,将容器和init容器连接到一个命令中看起来有点困难。

另一种方法是使用
kubectl descripe pod
。这将在pod的常规容器的单独部分中打印Init容器

例如:

$ kubectl describe pod myapp-pod
Name:       myapp-pod
Namespace:  default
[...]
Init Containers:
  init-myservice:
    Container ID:   docker://87c2601c9f18b4e9d63f995e03d83338e1321e016e76798243257d3e682256c2
    Image:      busybox
    Image ID:       docker-pullable://busybox@sha256:3841678eb5ddd5b62fec74d7f530fe633ee7cf11d4e3827c0b74e2e4c2a2466f
    Port:       <none>
    Command:
      sh
      -c
      until nslookup myservice; do echo waiting for myservice; sleep 2; done;
    State:      Running
      Started:      Thu, 02 Nov 2017 10:54:01 -0400
    Ready:      False
    Restart Count:  0
    Requests:
      cpu:      100m
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-38lv5 (ro)
  init-mydb:
    Container ID:
    Image:      busybox
    Image ID:
    Port:       <none>
    Command:
      sh
      -c
      until nslookup mydb; do echo waiting for mydb; sleep 2; done;
    State:      Waiting
      Reason:       PodInitializing
    Ready:      False
    Restart Count:  0
    Requests:
      cpu:      100m
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-38lv5 (ro)
Containers:
  myapp-container:
    Container ID:
    Image:      busybox
    Image ID:
    Port:       <none>
    Command:
      sh
      -c
      echo The app is running! && sleep 3600
    State:      Waiting
      Reason:       PodInitializing
    Ready:      False
    Restart Count:  0
    Requests:
      cpu:      100m
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-38lv5 (ro)
[...]
$kubectl描述pod myapp pod
名称:myapp pod
名称空间:默认值
[...]
初始化容器:
init myservice:
容器ID:docker://87c2601c9f18b4e9d63f995e03d83338e1321e016e76798243257d3e682256c2
图片:busybox
图像ID:docker-pullable://busybox@sha256:3841678eb5ddd5b62fec74d7f530fe633ee7cf11d4e3827c0b74e2e4c2a2466f
端口:
命令:
嘘
-c
直到找到我的服务;不要等待我的服务;睡眠2;完成;
状态:正在运行
开始时间:2017年11月2日星期四10:54:01-0400
就绪:错误
重新启动计数:0
请求:
中央处理器:100米
环境:
挂载:
/来自default-token-38lv5(ro)的var/run/secrets/kubernetes.io/serviceCount
初始化mydb:
容器ID:
图片:busybox
图像ID:
端口:
命令:
嘘
-c
直到我的数据库;不要等待mydb;睡眠2;完成;
国家:等待
原因:领奖台初始化
就绪:错误
重新启动计数:0
请求:
中央处理器:100米
环境:
挂载:
/来自default-token-38lv5(ro)的var/run/secrets/kubernetes.io/serviceCount
容器:
myapp容器:
容器ID:
图片:busybox
图像ID:
端口:
命令:
嘘
-c
回显应用程序正在运行!&&睡眠3600
国家:等待
原因:领奖台初始化
就绪:错误
重新启动计数:0
请求:
中央处理器:100米
环境:
挂载:
/来自default-token-38lv5(ro)的var/run/secrets/kubernetes.io/serviceCount
[...]

这是Kubernetes 1.6.0及更高版本的正确答案,尽管它对Kubernetes的早期版本不起作用。我更新了答案,但不幸的是,我这里没有这样的群集来测试它。我有一个群集-我可以稍后再试,并通知您它是否有效。这非常有效,可以与按标签查找POD名称相结合,ie
POD\u NAME\u HERE=$(kubectl get POD-l“app=MYAPP”--所有名称空间-o jsonpath='{.items[0].metadata.NAME}')
我什么都没有,所以我使用
kubectl descripe POD
查看所有者。
$ kubectl describe pod myapp-pod
Name:       myapp-pod
Namespace:  default
[...]
Init Containers:
  init-myservice:
    Container ID:   docker://87c2601c9f18b4e9d63f995e03d83338e1321e016e76798243257d3e682256c2
    Image:      busybox
    Image ID:       docker-pullable://busybox@sha256:3841678eb5ddd5b62fec74d7f530fe633ee7cf11d4e3827c0b74e2e4c2a2466f
    Port:       <none>
    Command:
      sh
      -c
      until nslookup myservice; do echo waiting for myservice; sleep 2; done;
    State:      Running
      Started:      Thu, 02 Nov 2017 10:54:01 -0400
    Ready:      False
    Restart Count:  0
    Requests:
      cpu:      100m
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-38lv5 (ro)
  init-mydb:
    Container ID:
    Image:      busybox
    Image ID:
    Port:       <none>
    Command:
      sh
      -c
      until nslookup mydb; do echo waiting for mydb; sleep 2; done;
    State:      Waiting
      Reason:       PodInitializing
    Ready:      False
    Restart Count:  0
    Requests:
      cpu:      100m
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-38lv5 (ro)
Containers:
  myapp-container:
    Container ID:
    Image:      busybox
    Image ID:
    Port:       <none>
    Command:
      sh
      -c
      echo The app is running! && sleep 3600
    State:      Waiting
      Reason:       PodInitializing
    Ready:      False
    Restart Count:  0
    Requests:
      cpu:      100m
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-38lv5 (ro)
[...]