我从Kubernetes开始,实现了一个运行Java jar的CronJob,它运行得很好,但我观察到,如果由于某种原因(例如,错误的密钥)容器没有启动,pod将无限期地处于错误状态:创建容器配置错误。
当这种情况发生时,有没有办法自动杀死吊舱?
我尝试使用启动探测器,如下面的代码所示,但探测器甚至没有运行。
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不支持探测吗?还是我做错了什么?
是否有其他方法可以杀死一段时间后无法启动的容器?
2条答案
按热度按时间jjjwad0x1#
我有同样的问题,kubernetes v1. 23. 14似乎kubernetes有一个错误与cronjobs probs
事件:
kubelet说"停止容器",但它仍然工作
因此,我看到pod已成功,一切正常,没有警报。但实际上作业执行失败,我们已经陷入火灾
2o7dmzc52#
如果Pod中的容器无法启动,则可以使用活动探测器自动终止Pod。活动探测器会不断检查容器是否正在运行,如果检测到容器出现故障,则会重新启动容器。
以下是如何将活动探测器添加到pod定义的示例:
在上例中,liveness probe exec命令检查文件/tmp/pod/app-started是否存在。如果在初始延迟5秒后该文件不存在,则探测器将每10秒检查一次,直到达到失败阈值30。此时,将终止容器并重新启动。