豆荚停留在PodInitializing状态无限期(Pods stuck in PodInitial

2019-11-05 08:01发布

我有一个K8S的cronjob是由一个起始容器和一个吊舱容器。 如果起始容器出现故障,波德主容器永远不会被启动,并在“PodInitializing”停留下去。

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

---
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

对在卡住结果的盒中kubectl:

Name:               job-name-1542237120-rgvzl
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               my-node-98afffbf-0psc/10.0.0.0
Start Time:         Wed, 14 Nov 2018 23:12:16 +0000
Labels:             controller-uid=ID
                    job-name=job-name-1542237120
Annotations:        kubernetes.io/limit-ranger:
                      LimitRanger plugin set: cpu request for container elasticsearch-metrics; cpu request for init container elasticsearch-repo-setup; cpu requ...
Status:             Failed
IP:                 10.0.0.0
Controlled By:      Job/job-1542237120
Init Containers:
init-container-name:
    Container ID:  docker://ID
    Image:         init-image:1.0
    Image ID:      init-imageID
    Port:          <none>
    Host Port:     <none>
    State:          Terminated
      Reason:       Error
      Exit Code:    1
      Started:      Wed, 14 Nov 2018 23:12:21 +0000
      Finished:     Wed, 14 Nov 2018 23:12:32 +0000
    Ready:          False
    Restart Count:  0
    Requests:
      cpu:        100m
    Environment:  <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-wwl5n (ro)
Containers:
  some-name:
    Container ID:  
    Image:         someimage:1.0
    Image ID:      
    Port:          <none>
    Host Port:     <none>
    State:          Waiting
      Reason:       PodInitializing
    Ready:          False
    Restart Count:  0
    Requests:
      cpu:        100m
    Environment:  <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-wwl5n (ro)
Conditions:
  Type              Status
  Initialized       False 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True

Answer 1:

我想你可能会错过它是init容器的预期行为。 该规则是,在initContainers失败的情况下,如果restartPolicy设置为从不否则Kubernetes将继续重新启动它,直到它成功分离舱将不会重启。

也:

如果起始容器出现故障,波德主容器永远不会被启动,并在“PodInitializing”停留下去。

根据文档:

吊舱可没有准备好,直到所有初始化容器已经成功了。 上的初始容器的端口不是服务项下的汇总。 被初始化吊舱处于待定状态,但应该有一个条件正在初始化设置为true。

*我可以看到你试图改变这种行为,但我不知道,如果你可以做到这一点的cronjob,我看到了乔布斯的例子。 但我只是理论化,而如果这个职位没有帮助您解决您的问题,我可以尝试重建它在实验室环境中。



Answer 2:

既然你已经想通了,initcontainers是为了完成运行,成功。 如果你无法摆脱的init的容器,我将尽在这种情况下是要确保起始容器端成功的所有时间。 在起始容器的结果可以写成一个emptydir量,像一个状态文件,双方你的起始容器和你的工作容器共享。 我会委托的工作容器决定什么情况下做的起始容器结束失败的责任。



Answer 3:

尝试算出这个我会运行以下命令:

kubectl get pods -如果需要添加命名空间PARAM。

然后复制荚名称和运行:

kubectl describe pod {POD_NAME}

这应该给你一些信息,为什么它卡在初始化的状态。



文章来源: Pods stuck in PodInitializing state indefinitely