Merge pull request #104268 from rphillips/fixes_terminating_pod_race

kubelet: fix sandbox creation error suppression when pods are quickly deleted
This commit is contained in:
Kubernetes Prow Robot 2021-08-10 13:02:52 -07:00 committed by GitHub
commit 24a09c3ade
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 2 deletions

View File

@ -67,6 +67,11 @@ func newFakePodStateProvider() *fakePodStateProvider {
}
}
func (f *fakePodStateProvider) IsPodTerminationRequested(uid types.UID) bool {
_, found := f.removed[uid]
return found
}
func (f *fakePodStateProvider) ShouldPodRuntimeBeRemoved(uid types.UID) bool {
_, found := f.terminated[uid]
return found

View File

@ -78,6 +78,7 @@ var (
// podStateProvider can determine if none of the elements are necessary to retain (pod content)
// or if none of the runtime elements are necessary to retain (containers)
type podStateProvider interface {
IsPodTerminationRequested(kubetypes.UID) bool
ShouldPodContentBeRemoved(kubetypes.UID) bool
ShouldPodRuntimeBeRemoved(kubetypes.UID) bool
}
@ -805,8 +806,10 @@ func (m *kubeGenericRuntimeManager) SyncPod(pod *v1.Pod, podStatus *kubecontaine
// or CRI if the Pod has been deleted while the POD is
// being created. If the pod has been deleted then it's
// not a real error.
// TODO: this is probably not needed now that termination is part of the sync loop
if m.podStateProvider.ShouldPodContentBeRemoved(pod.UID) {
//
// SyncPod can still be running when we get here, which
// means the PodWorker has not acked the deletion.
if m.podStateProvider.IsPodTerminationRequested(pod.UID) {
klog.V(4).InfoS("Pod was deleted and sandbox failed to be created", "pod", klog.KObj(pod), "podUID", pod.UID)
return
}