此方法之前由mWatney提到,因此我在此处添加了一些额外的细节:
使用此方法可以从Pod返回退出代码0-255(超过255后重新开始,256==0)。
-it
和--restart=Never
是必需的,--rm
是可选的,但有助于删除失败的Pod。
--restart=Never
告诉生成器创建一个Pod对象而不是Deployment。
$ kubectl run -it --rm exitcode --image=nginx --restart=Never -- bash -c "exit 0"
pod "exitcode" deleted
$ echo $?
0
$ kubectl run -it --rm exitcode --image=nginx --restart=Never -- bash -c "exit 1"
pod "exitcode" deleted
pod default/exitcode terminated (Error)
$ echo $?
1
$ kubectl run -it --rm exitcode --image=nginx --restart=Never -- bash -c "exit 8"
pod "exitcode" deleted
pod default/exitcode terminated (Error)
$ echo $?
8
$ kubectl run -it --rm exitcode --image=nginx --restart=Never -- bash -c "exit 250"
pod "exitcode" deleted
pod default/exitcode terminated (Error)
$ echo $?
250
$ kubectl run -it --rm exitcode --image=nginx --restart=Never -- bash -c "exit 255"
pod "exitcode" deleted
pod default/exitcode terminated (Error)
$ echo $?
255
$ kubectl run -it --rm exitcode --image=nginx --restart=Never -- bash -c "exit 256"
pod "exitcode" deleted
$ echo $?
0
$ kubectl run -it --rm exitcode --image=nginx --restart=Never -- bash -c "exit 255" ; a=$? && echo $a
pod "exitcode" deleted
pod default/exitcode terminated (Error)
255
为 LoganMzz 进行更新:
$ kubectl run -it --rm --image=busybox --restart=Never foobar -- ash -c 'exit 10'; echo rc=$?
pod "foobar" deleted
pod default/foobar terminated (Error)
rc=10
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.5", GitCommit:"e6503f8d8f769ace2f338794c914a96fc335df0f", GitTreeState:"clean", BuildDate:"2020-06-26T03:47:41Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.5", GitCommit:"e6503f8d8f769ace2f338794c914a96fc335df0f", GitTreeState:"clean", BuildDate:"2020-06-26T03:39:24Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
10.10.0.21 Ready master 2d1h v1.18.5 10.10.0.21 <none> Ubuntu 16.04.6 LTS 4.4.0-184-generic docker://18.9.7
10.10.0.22 Ready <none> 2d1h v1.18.5 10.10.0.22 <none> Ubuntu 16.04.6 LTS 4.4.0-184-generic docker://18.9.7
kubectl run --image=busybox --attach=true --restart=Never sleep -- /bin/sh -c "sleep 10"
,然后再运行echo $?
,将返回0
,它指的是 pod 的执行。如果您运行kubectl run --image=busybox --attach=true --restart=Never sleep -- /bin/sh -c "none"
,然后运行echo $?
将返回127
(命令未找到)。如果这对您有帮助,请告诉我,我可以更新我的答案,包括关于此的文档参考。 - Mark Watney