mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-13 13:55:41 +00:00
Restart the init container to not be stuck in created state
The main sync loop should have created and started the container in one step. If the init container is in the 'created' state, it's likely that the container runtime failed to start it. To prevent the container from getting stuck in the 'created' state, restart it.
This commit is contained in:
parent
e33ca0de16
commit
cd83ff032c
@ -1055,7 +1055,12 @@ func (m *kubeGenericRuntimeManager) computeInitContainerActions(pod *v1.Pod, pod
|
||||
|
||||
switch status.State {
|
||||
case kubecontainer.ContainerStateCreated:
|
||||
// nothing to do but wait for it to start
|
||||
// The main sync loop should have created and started the container
|
||||
// in one step. If the init container is in the 'created' state,
|
||||
// it is likely that the container runtime failed to start it. To
|
||||
// prevent the container from getting stuck in the 'created' state,
|
||||
// restart it.
|
||||
changes.InitContainersToStart = append(changes.InitContainersToStart, i)
|
||||
|
||||
case kubecontainer.ContainerStateRunning:
|
||||
if !types.IsRestartableInitContainer(container) {
|
||||
|
@ -1168,6 +1168,17 @@ func TestComputePodActions(t *testing.T) {
|
||||
ContainersToStart: []int{1},
|
||||
},
|
||||
},
|
||||
"Restart the container if the container is in created state": {
|
||||
mutatePodFn: func(pod *v1.Pod) { pod.Spec.RestartPolicy = v1.RestartPolicyNever },
|
||||
mutateStatusFn: func(status *kubecontainer.PodStatus) {
|
||||
status.ContainerStatuses[1].State = kubecontainer.ContainerStateCreated
|
||||
},
|
||||
actions: podActions{
|
||||
SandboxID: baseStatus.SandboxStatuses[0].Id,
|
||||
ContainersToKill: map[kubecontainer.ContainerID]containerToKillInfo{},
|
||||
ContainersToStart: []int{1},
|
||||
},
|
||||
},
|
||||
} {
|
||||
pod, status := makeBasePodAndStatus()
|
||||
if test.mutatePodFn != nil {
|
||||
@ -1525,12 +1536,17 @@ func TestComputePodActionsWithRestartableInitContainers(t *testing.T) {
|
||||
ContainersToKill: getKillMapWithInitContainers(basePod, baseStatus, []int{}),
|
||||
},
|
||||
},
|
||||
"initialization in progress; do nothing": {
|
||||
"an init container is stuck in the created state; restart it": {
|
||||
mutatePodFn: func(pod *v1.Pod) { pod.Spec.RestartPolicy = v1.RestartPolicyAlways },
|
||||
mutateStatusFn: func(pod *v1.Pod, status *kubecontainer.PodStatus) {
|
||||
status.ContainerStatuses[2].State = kubecontainer.ContainerStateCreated
|
||||
},
|
||||
actions: noAction,
|
||||
actions: podActions{
|
||||
SandboxID: baseStatus.SandboxStatuses[0].Id,
|
||||
InitContainersToStart: []int{2},
|
||||
ContainersToStart: []int{},
|
||||
ContainersToKill: getKillMapWithInitContainers(basePod, baseStatus, []int{}),
|
||||
},
|
||||
},
|
||||
"restartable init container has started; start the next": {
|
||||
mutatePodFn: func(pod *v1.Pod) { pod.Spec.RestartPolicy = v1.RestartPolicyAlways },
|
||||
|
Loading…
Reference in New Issue
Block a user