我有一个部署在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占用的内存超出了他们的请求,那么Kubernetes将杀死一些Pod以释放空间。在这种情况下,您可以赋予此 Pane 更高的优先级。

  • 您应该进行监视,以实际确定这样做的原因。适当的监视将向您显示哪些Pod的性能符合预期,而哪些效果不理想。您还可以将节点选择器用于长时间运行的Pod,并设置优先级类别,这将首先删除非cron Pod。

    关于kubernetes - Kubernetes Cron工作惨淡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63752358/

    10-11 22:25
    查看更多