我有一个部署在K8S上的Rails应用程序。在我的网络应用程序中,每天晚上8点运行一个cronjob,这需要6个小时才能完成。我注意到从cronjob启动几个小时后发生OOMkilled
错误。我还增加了Pod的内存,但错误仍然发生。
这是我的yaml
文件:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: sync-data
spec:
schedule: "0 20 * * *" # At 20:00:00pm every day
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 5
failedJobsHistoryLimit: 5
jobTemplate:
spec:
ttlSecondsAfterFinished: 100
template:
spec:
serviceAccountName: sync-data
containers:
- name: sync-data
resources:
requests:
memory: 2024Mi # OOMKilled
cpu: 1000m
limits:
memory: 2024Mi # OOMKilled
cpu: 1000m
image: xxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/path
imagePullPolicy: IfNotPresent
command:
- "/bin/sh"
- "-c"
- |
rake xxx:yyyy # Will take ~6 hours to finish
restartPolicy: Never
是否有最佳实践在K8S上运行耗时的cronjob?欢迎任何帮助!
最佳答案
OOM被杀死可能有两个原因。
您应该进行监视,以实际确定这样做的原因。适当的监视将向您显示哪些Pod的性能符合预期,而哪些效果不理想。您还可以将节点选择器用于长时间运行的Pod,并设置优先级类别,这将首先删除非cron Pod。
关于kubernetes - Kubernetes Cron工作惨淡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63752358/