The activeDeadlineSeconds property on a Pod definition

3 min read | by Jordi Prats

If we take a look all the possible properties for a Pod definition we might notice that there's one to limit the time a Pod can be running:

apiVersion: v1 kind: Pod metadata:  name: test spec:  activeDeadlineSeconds: 10  containers:  - args:  - sleep  - 24h  image: alpine  name: test 

If we give it a try it will work as expected for a single Pod:

$ kubectl get pods --watch NAME READY STATUS RESTARTS AGE test 0/1 DeadlineExceeded 0 39s 

For objects such a Job (or a CronJob) that we might want to be able to cancel if a Pod runs for too long it makes perfect sense:

apiVersion: batch/v1 kind: CronJob metadata:  name: democron-sitemapgen spec:  schedule: '* * * * *'  successfulJobsHistoryLimit: 1  failedJobsHistoryLimit: 1  jobTemplate:  metadata:  name: democron-sitemapgen  spec:  template:  spec:  restartPolicy: OnFailure  activeDeadlineSeconds: 40  containers:  - name: democron-sitemapgen  image: alpine:latest  command:  - sleep  - 24h 

Trying this out we will be able to see how it kills the Pod once the activeDeadlineSeconds is reached:

$ kubectl get pods --watch NAME READY STATUS RESTARTS AGE democron-sitemapgen-27440182--1-mcldv 0/1 Pending 0 0s democron-sitemapgen-27440182--1-mcldv 0/1 Pending 0 0s democron-sitemapgen-27440182--1-mcldv 0/1 ContainerCreating 0 1s democron-sitemapgen-27440182--1-mcldv 1/1 Running 0 12s democron-sitemapgen-27440182--1-mcldv 1/1 DeadlineExceeded 0 40s democron-sitemapgen-27440182--1-t874q 0/1 Pending 0 0s democron-sitemapgen-27440182--1-t874q 0/1 Pending 0 0s democron-sitemapgen-27440182--1-t874q 0/1 ContainerCreating 0 1s democron-sitemapgen-27440182--1-t874q 1/1 Running 0 12s democron-sitemapgen-27440182--1-mcldv 0/1 Error 0 77s democron-sitemapgen-27440182--1-t874q 1/1 DeadlineExceeded 0 40s democron-sitemapgen-27440182--1-cjbzw 0/1 Pending 0 0s democron-sitemapgen-27440182--1-cjbzw 0/1 Pending 0 0s democron-sitemapgen-27440182--1-cjbzw 0/1 ContainerCreating 0 0s democron-sitemapgen-27440182--1-cjbzw 1/1 Running 0 12s (...) 

But if we try to the same on a Deployment like this:

apiVersion: apps/v1 kind: Deployment metadata:  name: test-deploy  labels:  demo: test spec:  replicas: 1  selector:  matchLabels:  demo: test  template:  metadata:  labels:  demo: test  spec:  activeDeadlineSeconds: 10  containers:  - args:  - sleep  - 24h  image: alpine  name: test 

It won't allow us to have it on the Pod template:

$ kubectl apply -f test.yaml  The Deployment "test-deploy" is invalid: spec.template.spec.activeDeadlineSeconds: Forbidden: activeDeadlineSeconds in ReplicaSet is not Supported 

A deployment is intended for workloads that are supposed to be running perpetually, so the activeDeadlineSeconds doesn't make sense for that use case. If we want to be able to refresh the Pods on a Deployment (or a StatefulSet) we can use the bestby controller. With it we can use a label to defined how often Pods need to be refreshed


Posted on 07/03/2022