我有一个装有多个容器的吊舱,其中一个(containerA)退出时出现错误:
Containers:
containerA:
......
State: Terminated
Reason: Error
Exit Code: 1
Started: Fri, 27 Sep 2019 16:21:53 -0700
Finished: Fri, 27 Sep 2019 16:21:53 -0700
Ready: False
Restart Count: 0
containerB:
......
State: Terminated
Reason: Completed
Exit Code: 0
Started: Fri, 27 Sep 2019 16:21:54 -0700
Finished: Fri, 27 Sep 2019 16:21:59 -0700
Ready: False
Restart Count: 0
containerC:
......
State: Terminated
Reason: Completed
Exit Code: 0
Started: Fri, 27 Sep 2019 16:21:54 -0700
Finished: Fri, 27 Sep 2019 16:21:58 -0700
Ready: False
Restart Count: 0
此广告连播具有restartPolicy: Never
。并且由backoffLimit: 9
的Job控制。在所有尝试期间,广告连播状态显示为:
NAME READY STATUS RESTARTS AGE
my-pod-2scsn 0/4 Completed 0 3d18h
my-pod-8z7qq 0/4 Completed 0 3d18h
my-pod-9cjnc 0/4 Completed 0 3d18h
my-pod-f6hxr 0/4 Completed 0 3d18h
my-pod-fz7hk 0/4 Completed 0 3d18h
.....
此Completed
在这里令人困惑(其中一个容器因错误退出)。为什么这里的广告连播状态为Completed
?
答案 0 :(得分:0)
根据官方的Kubernetes documentation,一旦所有容器中的任何一个容器退出且退出代码为非零或检测到某些资源超出限制,Job就会将Pod视为失败。由于这个事实,就一般Pod生命周期而言,Pod phase实际上是主要指标,向初始Job告知最近的Pod状态。
但是,据我观察,kubectl get pod
输出STATUS
列不显示Pod阶段状态,而是检索Pod内特定容器的值并使用.status.containerStatuses.state.terminated.reason
字段以显示STATUS
列数据。
实际上,您甚至可以获得更多信息,向标准的kubectl
命令行工具提供自定义列:
$ kubectl get po -o=custom-columns=NAME:.metadata.name,PHASE:.status.phase,CONTAINERS:.spec.containers[*].name,STATUS:.status.containerStatuses[*].state.terminated.reason
由于作业达到backoffLimit: 9
个计数,它将以BackoffLimitExceeded
条警告消息终止:
警告BackoffLimit超过5400万个作业控制器作业已达到 指定的退避限制