【发布时间】:2023-02-02 19:53:48
【问题描述】:
我从 Kubernetes 开始,我实现了一个运行 Java jar 的 CronJob。 它工作正常,但我观察到的是,如果由于某种原因(例如,错误的密钥)容器没有启动,pod 将无限期地坐在那里,并显示错误状态:CreateContainerConfigError。
发生这种情况时有没有办法自动杀死吊舱?
我按照下面的代码尝试使用启动探测器,但探测器甚至没有运行。
apiVersion: batch/v1
kind: CronJob
metadata:
name: appName
namespace: appNamespace
labels:
app: appName
release: production
tiers: backend
spec:
jobTemplate:
spec:
backoffLimit: 2
template:
spec:
volumes:
- name: tmp-pod
emptyDir: {}
containers:
- name: appName
image: docker-image
command: ["/bin/bash", "-c"]
args:
- |
touch /tmp/pod/app-started;
java -XX:MaxRAMPercentage=75.0 -Djava.security.egd=file:/dev/urandom -jar /app.jar;
volumeMounts:
- mountPath: /tmp/pod
name: tmp-pod
env:
- name: env_var
value: value
# if app is not started within 5m (30 * 10 = 300s), container will be killed.
startupProbe:
exec:
command:
- cat
- /tmp/pod/app-started
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 30
resources:
requests:
memory: "2200Mi"
cpu: "750m"
limits:
memory: "2200Mi"
restartPolicy: OnFailure
schedule: "0 12 * * *"
concurrencyPolicy: Forbid
CronJob 不支持探测吗? 或者我做错了什么?
是否有另一种方法可以杀死一段时间后无法启动的容器?
【问题讨论】:
-
不幸的是,Cron 作业不会删除处于错误状态的 pod。它会一直部署新的 pod,直到作业成功。您可以试试TTLconnectors,它将在工作完成后立即清理工作及其资源。当你说杀死容器时,这是否意味着你想删除作业仍在运行时由作业创建的 pod?
标签: kubernetes