首页 > 解决方案 > Kubernetes Job 和 Pod 中 activeDeadlineSeconds 的区别

问题描述

Kubernetes 为两者提供了一个activeDeadlineSeconds字段JobSpecPodSpec

两者有什么区别?我已经完成了一项activeDeadlineSeconds设置为 20 的小工作,在其 Pod 定义中我将activeDeadlineSeconds字段设置为 45。这些有点随意,但意味着要间隔开。当我创建/应用作业然后运行kubectl get pods -a --watch时,我可以看到 20 截止日期没有任何影响,但第二个截止日期是(我看到了DeadlineExceeded输出)。

为了更加确定,我terminationGracePeriodSeconds: 10在 PodSpec 中添加并看到了同样的东西。

工作中的目的是什么activeDeadlineSeconds?它似乎没有向我的容器发送任何信号。

注意:我只是在图像上运行sleep命令。ubuntu当接收到 Kubernetes 发送的 TERM 信号时,该命令应该退出(所以我预计 20 秒后会有一个 TERM 信号,然后 Pod 很快就会死掉)

精简 YAML 定义:

apiVersion: batch/v2alpha1  # K8s 1.7.x
kind: CronJob
spec:
  schedule: "*/1 * * * *"
  concurrencyPolicy: Allow
  jobTemplate:
    spec:  # JobSpec
      activeDeadlineSeconds: 20   # This needs to be shorter than the cron interval  ## TODO - NOT WORKING!
      parallelism: 1
      template:  # PodTemplateSpec
        spec:
          activeDeadlineSeconds: 45
          terminationGracePeriodSeconds: 10
          containers:
          - name: ubuntu-container
            image: ubuntu
            command: ['bash', '-c', 'sleep 500000']

参考:

标签: kubernetes

解决方案


未来的社区维基答案:

根据@Clorichel,此问题已在 k8s v1.8 https://github.com/kubernetes/kubernetes/issues/32149中修复

我的建议是将您的集群升级到最新版本,如果可以访问最新的功能和错误修复。


推荐阅读