mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Merge pull request #54593 from dashpole/fix_pending
Automatic merge from submit-queue (batch tested with PRs 54593, 54607, 54539, 54105). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Removed containers are not always waiting fixes #54499 The issue was that a container that is removed (during pod deletion, for example), is assumed to be in a "waiting" state. Instead, we should use the previous container state. Fetching the most recent status is required to ensure that we accurately reflect the previous state. The status attached to a pod object is often stale. I verified this by looking through the kubelet logs during a deletion, and verifying that the status updates do not transition from terminated -> pending. cc @kubernetes/sig-node-bugs @sjenning @smarterclayton @derekwaynecarr @dchen1107 ```release-note Fix an issue where pods were briefly transitioned to a "Pending" state during the deletion process. ```
This commit is contained in:
commit
ccd1703b49
@ -1348,16 +1348,21 @@ func (kl *Kubelet) convertStatusToAPIStatus(pod *v1.Pod, podStatus *kubecontaine
|
|||||||
// set status for Pods created on versions of kube older than 1.6
|
// set status for Pods created on versions of kube older than 1.6
|
||||||
apiPodStatus.QOSClass = v1qos.GetPodQOS(pod)
|
apiPodStatus.QOSClass = v1qos.GetPodQOS(pod)
|
||||||
|
|
||||||
|
oldPodStatus, found := kl.statusManager.GetPodStatus(pod.UID)
|
||||||
|
if !found {
|
||||||
|
oldPodStatus = pod.Status
|
||||||
|
}
|
||||||
|
|
||||||
apiPodStatus.ContainerStatuses = kl.convertToAPIContainerStatuses(
|
apiPodStatus.ContainerStatuses = kl.convertToAPIContainerStatuses(
|
||||||
pod, podStatus,
|
pod, podStatus,
|
||||||
pod.Status.ContainerStatuses,
|
oldPodStatus.ContainerStatuses,
|
||||||
pod.Spec.Containers,
|
pod.Spec.Containers,
|
||||||
len(pod.Spec.InitContainers) > 0,
|
len(pod.Spec.InitContainers) > 0,
|
||||||
false,
|
false,
|
||||||
)
|
)
|
||||||
apiPodStatus.InitContainerStatuses = kl.convertToAPIContainerStatuses(
|
apiPodStatus.InitContainerStatuses = kl.convertToAPIContainerStatuses(
|
||||||
pod, podStatus,
|
pod, podStatus,
|
||||||
pod.Status.InitContainerStatuses,
|
oldPodStatus.InitContainerStatuses,
|
||||||
pod.Spec.InitContainers,
|
pod.Spec.InitContainers,
|
||||||
len(pod.Spec.InitContainers) > 0,
|
len(pod.Spec.InitContainers) > 0,
|
||||||
true,
|
true,
|
||||||
@ -1424,7 +1429,7 @@ func (kl *Kubelet) convertToAPIContainerStatuses(pod *v1.Pod, podStatus *kubecon
|
|||||||
}
|
}
|
||||||
oldStatus, found := oldStatuses[container.Name]
|
oldStatus, found := oldStatuses[container.Name]
|
||||||
if found {
|
if found {
|
||||||
if isInitContainer && oldStatus.State.Terminated != nil {
|
if oldStatus.State.Terminated != nil {
|
||||||
// Do not update status on terminated init containers as
|
// Do not update status on terminated init containers as
|
||||||
// they be removed at any time.
|
// they be removed at any time.
|
||||||
status = &oldStatus
|
status = &oldStatus
|
||||||
|
Loading…
Reference in New Issue
Block a user