我有一个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
答案 0 :(得分:1)
我认为您可能会错过初始化容器的预期行为。 规则是在initContainers失败的情况下,如果将restartPolicy设置为“从不”,则Pod将不会重新启动,否则Kubernetes将继续重新启动它,直到成功为止。
也:
如果init容器失败,则主容器中的Pod永远不会 开始,并无限期停留在“ PodInitializing”中。
在所有初始化容器都成功之前,Pod不能准备就绪。的 初始化容器上的端口未在服务下聚合。豆荚 正在初始化的状态为Pending,但应该有一个 条件初始化设置为true。
*我可以看到您尝试更改此行为,但是我不确定您是否可以使用CronJob进行此操作,我看到了Jobs的示例。但是,我只是在理论上,如果这篇文章不能帮助您解决问题,我可以尝试在实验室环境中重新创建。
答案 1 :(得分:1)
由于您已经知道initcontainer可以成功完成。如果您不能摆脱init容器,在这种情况下,我要做的就是确保init容器始终成功结束。可以将init容器的结果写在emptydir卷中,该文件类似于状态文件,由您的init容器和工作容器共享。 我会将工作容器的责任委托给工作容器,以防init容器未成功结束。
答案 2 :(得分:0)
要弄清楚这一点,我将运行以下命令:
kubectl get pods
-根据需要添加名称空间参数。
然后复制吊舱名称并运行:
kubectl describe pod {POD_NAME}
这应该为您提供一些有关为何卡在初始化状态的信息。