【发布时间】:2020-08-04 22:05:02
【问题描述】:
我有一个在 GKE 上运行并运行 Cucumber JVM 测试的 Kubernetes Cronjob。如果由于断言失败、某些资源不可用等原因导致 Step 失败,Cucumber 会正确抛出异常,导致 Cronjob 作业失败,并且 Kubernetes pod 的状态更改为ERROR。这会导致创建一个新的 pod,它会尝试再次运行相同的 Cucumber 测试,但会再次失败并再次重试。
我不希望发生任何这些重试。如果 Cronjob 作业失败,我希望它保持失败状态并且根本不重试。基于this,我已经尝试将backoffLimit: 0 与restartPolicy: Never 与concurrencyPolicy: Forbid 结合使用,但它仍然通过创建新的pod 并再次运行测试来重试。
我错过了什么?这是我的 Cronjob 的 kube 清单:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: quality-apatha
namespace: default
labels:
app: quality-apatha
spec:
schedule: "*/1 * * * *"
concurrencyPolicy: Forbid
jobTemplate:
spec:
backoffLimit: 0
template:
spec:
containers:
- name: quality-apatha
image: FOO-IMAGE-PATH
imagePullPolicy: "Always"
resources:
limits:
cpu: 500m
memory: 512Mi
env:
- name: FOO
value: BAR
volumeMounts:
- name: FOO
mountPath: BAR
args:
- java
- -cp
- qe_java.job.jar:qe_java-1.0-SNAPSHOT-tests.jar
- org.junit.runner.JUnitCore
- com.liveramp.qe_java.RunCucumberTest
restartPolicy: Never
volumes:
- name: FOO
secret:
secretName: BAR
还有其他 Kubernetes Kind 可以用来停止重试吗?
谢谢!
【问题讨论】:
-
yaml 看起来不错。我假设您正在使用该时间表进行测试?新 pod 多久创建一次?
-
我误解了 pod 重试的合法时间表:-|
标签: kubernetes google-kubernetes-engine cucumber-jvm kubernetes-pod kubernetes-cronjob