Re-run initContainers in a Deployment when containers exit on errorΒ #3676
Description
I'm copying this issue from kubernetes/kubernetes#52345 because it seems that this is the appropriate repo for it.
Is this a BUG REPORT or FEATURE REQUEST?:
/kind feature
What happened: Container in a Deployment exits on error, container is restarted without first re-running the initContainer.
What you expected to happen: Container in a Deployment exits on error, initContainer is re-run before restarting the container.
How to reproduce it (as minimally and precisely as possible):
Sample spec:
kind: "Deployment"
apiVersion: "extensions/v1beta1"
metadata:
name: "test"
labels:
name: "test"
spec:
replicas: 1
selector:
matchLabels:
name: "test"
template:
metadata:
name: "test"
labels:
name: "test"
spec:
initContainers:
- name: sleep
image: debian:stretch
imagePullPolicy: IfNotPresent
command:
- sleep
- 1s
containers:
- name: test
image: debian:stretch
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- exit 1
Implementation Context:
I have an initContainer that waits for a service running in Kubernetes to detect its existence via pod annotations, and send it an HTTP request, upon which it writes this value to disk. The main container then reads this value upon startup and "unwraps" it via another service, upon which it stores the unwrapped value in memory.
The value that is written to disk by the initContainer is a one-time read value, in that once it is used the value is then expired. The problem is that if the main container ever restarts due to fatal error, it loses that unwrapped value and upon startup tries to unwrap the expired value again, leading to an infinite crashing loop until I manually delete the pod, upon which a new pod is created, the initContainer runs, and all is again well.
I desire a feature that restarts the entire pod upon container error so that this workflow can function properly.
Enhancement Description
- One-line enhancement description (can be used as a release note):
- Kubernetes Enhancement Proposal:
- Discussion Link:
- Primary contact (assignee):
- Responsible SIGs:
- Enhancement target (which target equals to which milestone):
- Alpha release target (x.y):
- Beta release target (x.y):
- Stable release target (x.y):
- Alpha
- KEP (
k/enhancements
) update PR(s): - Code (
k/k
) update PR(s): - Docs (
k/website
) update PR(s):
- KEP (
Please keep this description up to date. This will help the Enhancement Team to track the evolution of the enhancement efficiently.