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

时间:2017-11-02 10:32:23

标签: kubernetes

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

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

[edit]正如svenwltr所说,在Kubernete 1.6.0或更高版本中,可以使用kubectl get pods POD_NAME_HERE -o jsonpath={.spec.initContainers[*].name}检索init容器,并且可以使用kubectl get pod POD_NAME_HERE -o jsonpath="{.spec['containers','initContainers'][*].name}"检索所有容器。但是,对于尚未实现.spec.initContainers的较低版本的Kubernetes,这不是一个有效的解决方法。

2 个答案:

答案 0 :(得分:3)

init容器存储在spec.initContainers

kubectl get pods POD_NAME_HERE -o jsonpath={.spec.initContainers[*].name}

您可以使用JSONPath magic

显示两者
kubectl get pod POD_NAME_HERE -o jsonpath="{.spec['containers','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容器连接成一个命令看起来有点困难。

答案 1 :(得分:1)

另一种方法是使用kubectl describe pod <POD_NAME_HERE>。这将在与容器的常规容器分开的单独部分中打印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)
[...]