检索在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,这不是一个有效的解决方法。
答案 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)
[...]