为什么用exitCode 0完成后busybox pod继续重启

时间:2019-08-29 23:00:42

标签: kubernetes

使用以下命令创建广告连播

 kubectl run bb --image=busybox --generator=run-pod/v1 --command -- sh -c "echo hi"

要重复创建Pod

bb    1/1   Running             1     7s
bb    0/1   Completed           1     8s
bb    0/1   CrashLoopBackOff    1     9s
bb    0/1   Completed           2     22s
bb    0/1   CrashLoopBackOff    2     23s
bb    0/1   Completed           3     53s

退出代码为0

k describe pod bb

...

    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Thu, 29 Aug 2019 22:58:36 +0000
      Finished:     Thu, 29 Aug 2019 22:58:36 +0000
    Ready:          False
    Restart Count:  7

谢谢

2 个答案:

答案 0 :(得分:1)

kubectl run默认将"restart policy"设置为“始终”。在这种情况下,它还会设置一个Deployment来管理容器。

--restart='Always': The restart policy for this Pod.  Legal values
 [Always, OnFailure, Never].  If set to 'Always' a deployment is created,
 if set to 'OnFailure' a job is created, if set to 'Never', a regular pod
 is created. For the latter two --replicas must be 1.  Default 'Always',
 for CronJobs `Never`.

如果将命令更改为:

kubectl run bb \
  --image=busybox \
  --generator=run-pod/v1 \
  --restart=Never \
  --command -- sh -c "echo hi"

将设置一个作业,并且不会重新启动Pod。

kubectl run之外

所有pod specs都将包含一个restartPolicy,其默认值为Always,因此如果您想要其他行为,则必须指定它。

spec:
  template:
    spec:
      containers:
      - name: something
      restartPolicy: Never

如果您希望运行任务以完成任务,请尝试使用Job

答案 1 :(得分:0)

请查看“完成”的“上一个状态”原因。

  

已终止:表示容器已完成执行并已停止运行。当容器成功完成执行或由于某种原因而失败时,容器将进入容器。无论如何,都会显示原因和退出代码,以及容器的开始和结束时间。在容器进入“已终止”之前,执行preStop挂钩(如果有)。

...
  State:          Terminated
    Reason:       Completed
    Exit Code:    0
    Started:      Wed, 30 Jan 2019 11:45:26 +0530
    Finished:     Wed, 30 Jan 2019 11:45:26 +0530
...

请查看更多详细信息here。您可以尝试执行类似操作以显示差异。

kubectl run bb --image=busybox --generator=run-pod/v1 --command -- sh -c "sleep 1000"