From 4ffbc358ef1b7bf9d7ae6fac76ea99219c13080d Mon Sep 17 00:00:00 2001 From: Seth Jennings Date: Mon, 12 Feb 2018 17:30:32 -0600 Subject: [PATCH] UPSTREAM: 59767: kubelet: check for illegal phase transition --- vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go index 71c3a3a5b03c..888f7e589c25 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go @@ -1379,6 +1379,15 @@ func (kl *Kubelet) generateAPIPodStatus(pod *v1.Pod, podStatus *kubecontainer.Po spec := &pod.Spec allStatus := append(append([]v1.ContainerStatus{}, s.ContainerStatuses...), s.InitContainerStatuses...) s.Phase = GetPhase(spec, allStatus) + // Check for illegal phase transition + if pod.Status.Phase == v1.PodFailed || pod.Status.Phase == v1.PodSucceeded { + // API server shows terminal phase; transitions are not allowed + if s.Phase != pod.Status.Phase { + glog.Errorf("Pod attempted illegal phase transition from %s to %s: %v", pod.Status.Phase, s.Phase, s) + // Force back to phase from the API server + s.Phase = pod.Status.Phase + } + } kl.probeManager.UpdatePodStatus(pod.UID, s) s.Conditions = append(s.Conditions, status.GeneratePodInitializedCondition(spec, s.InitContainerStatuses, s.Phase)) s.Conditions = append(s.Conditions, status.GeneratePodReadyCondition(spec, s.ContainerStatuses, s.Phase))