豆荚无限期陷入PodInitializing状态

时间:2018-11-15 07:59:02

标签: kubernetes kubernetes-pod kubernetes-cronjob kubernetes-jobs

我有一个k8s cronjob,它由一个初始化容器和一个pod容器组成。如果init容器失败,则主容器中的Pod将永远不会启动,并且会无限期地停留在“ PodInitializing”中。

我的意图是如果初始化容器失败,则作业失败。

RegEx

卡在豆荚上的kubectl导致:

---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: job-name
  namespace: default
  labels:
    run: job-name
spec:
  schedule: "15 23 * * *"
  startingDeadlineSeconds: 60
  concurrencyPolicy: "Forbid"
  successfulJobsHistoryLimit: 30
  failedJobsHistoryLimit: 10
  jobTemplate:
    spec:
      # only try twice
      backoffLimit: 2
      activeDeadlineSeconds: 60
      template:
        spec:
          initContainers:
          - name: init-name
            image: init-image:1.0
          restartPolicy: Never
          containers:
          - name: some-name
            image: someimage:1.0
          restartPolicy: Never

3 个答案:

答案 0 :(得分:1)

我认为您可能会错过初始化容器的预期行为。 规则是在initContainers失败的情况下,如果将restartPolicy设置为“从不”,则Pod将不会重新启动,否则Kubernetes将继续重新启动它,直到成功为止。

也:

  

如果init容器失败,则主容器中的Pod永远不会   开始,并无限期停留在“ PodInitializing”中。

根据documentation:

  

在所有初始化容器都成功之前,Pod不能准备就绪。的   初始化容器上的端口未在服务下聚合。豆荚   正在初始化的状态为Pending,但应该有一个   条件初始化设置为true。

*我可以看到您尝试更改此行为,但是我不确定您是否可以使用CronJob进行此操作,我看到了Jobs的示例。但是,我只是在理论上,如果这篇文章不能帮助您解决问题,我可以尝试在实验室环境中重新创建。

答案 1 :(得分:1)

由于您已经知道initcontainer可以成功完成。如果您不能摆脱init容器,在这种情况下,我要做的就是确保init容器始终成功结束。可以将init容器的结果写在emptydir卷中,该文件类似于状态文件,由您的init容器和工作容器共享。  我会将工作容器的责任委托给工作容器,以防init容器未成功结束。

答案 2 :(得分:0)

要弄清楚这一点,我将运行以下命令:

kubectl get pods-根据需要添加名称空间参数。

然后复制吊舱名称并运行:

kubectl describe pod {POD_NAME}

这应该为您提供一些有关为何卡在初始化状态的信息。