mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 22:17:14 +00:00
Remove finalizer when orphaned
Change-Id: Id88a28755660812a274dffab2693cb8a0ef4235c
This commit is contained in:
parent
211e33d93f
commit
8776931abb
@ -236,7 +236,7 @@ func (jm *Controller) resolveControllerRef(namespace string, controllerRef *meta
|
|||||||
return job
|
return job
|
||||||
}
|
}
|
||||||
|
|
||||||
// When a pod is created, enqueue the controller that manages it and update it's expectations.
|
// When a pod is created, enqueue the controller that manages it and update its expectations.
|
||||||
func (jm *Controller) addPod(obj interface{}) {
|
func (jm *Controller) addPod(obj interface{}) {
|
||||||
pod := obj.(*v1.Pod)
|
pod := obj.(*v1.Pod)
|
||||||
if pod.DeletionTimestamp != nil {
|
if pod.DeletionTimestamp != nil {
|
||||||
@ -261,7 +261,12 @@ func (jm *Controller) addPod(obj interface{}) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, it's an orphan. Get a list of all matching controllers and sync
|
// Otherwise, it's an orphan.
|
||||||
|
// Clean the finalizer.
|
||||||
|
if hasJobTrackingFinalizer(pod) {
|
||||||
|
jm.enqueueOrphanPod(pod)
|
||||||
|
}
|
||||||
|
// Get a list of all matching controllers and sync
|
||||||
// them to see if anyone wants to adopt it.
|
// them to see if anyone wants to adopt it.
|
||||||
// DO NOT observe creation because no controller should be waiting for an
|
// DO NOT observe creation because no controller should be waiting for an
|
||||||
// orphan.
|
// orphan.
|
||||||
@ -331,7 +336,12 @@ func (jm *Controller) updatePod(old, cur interface{}) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, it's an orphan. If anything changed, sync matching controllers
|
// Otherwise, it's an orphan.
|
||||||
|
// Clean the finalizer.
|
||||||
|
if hasJobTrackingFinalizer(curPod) {
|
||||||
|
jm.enqueueOrphanPod(curPod)
|
||||||
|
}
|
||||||
|
// If anything changed, sync matching controllers
|
||||||
// to see if anyone wants to adopt it now.
|
// to see if anyone wants to adopt it now.
|
||||||
labelChanged := !reflect.DeepEqual(curPod.Labels, oldPod.Labels)
|
labelChanged := !reflect.DeepEqual(curPod.Labels, oldPod.Labels)
|
||||||
if labelChanged || controllerRefChanged {
|
if labelChanged || controllerRefChanged {
|
||||||
@ -364,17 +374,18 @@ func (jm *Controller) deletePod(obj interface{}, final bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
controllerRef := metav1.GetControllerOf(pod)
|
controllerRef := metav1.GetControllerOf(pod)
|
||||||
|
hasFinalizer := hasJobTrackingFinalizer(pod)
|
||||||
if controllerRef == nil {
|
if controllerRef == nil {
|
||||||
// No controller should care about orphans being deleted.
|
// No controller should care about orphans being deleted.
|
||||||
// But this pod might have belonged to a Job and the GC removed the reference.
|
// But this pod might have belonged to a Job and the GC removed the reference.
|
||||||
if hasJobTrackingFinalizer(pod) {
|
if hasFinalizer {
|
||||||
jm.enqueueOrphanPod(pod)
|
jm.enqueueOrphanPod(pod)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
job := jm.resolveControllerRef(pod.Namespace, controllerRef)
|
job := jm.resolveControllerRef(pod.Namespace, controllerRef)
|
||||||
if job == nil {
|
if job == nil {
|
||||||
if hasJobTrackingFinalizer(pod) {
|
if hasFinalizer {
|
||||||
jm.enqueueOrphanPod(pod)
|
jm.enqueueOrphanPod(pod)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
@ -387,7 +398,7 @@ func (jm *Controller) deletePod(obj interface{}, final bool) {
|
|||||||
|
|
||||||
// Consider the finalizer removed if this is the final delete. Otherwise,
|
// Consider the finalizer removed if this is the final delete. Otherwise,
|
||||||
// it's an update for the deletion timestamp, then check finalizer.
|
// it's an update for the deletion timestamp, then check finalizer.
|
||||||
if final || !hasJobTrackingFinalizer(pod) {
|
if final || !hasFinalizer {
|
||||||
jm.finalizerExpectations.finalizerRemovalObserved(jobKey, string(pod.UID))
|
jm.finalizerExpectations.finalizerRemovalObserved(jobKey, string(pod.UID))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -441,10 +452,14 @@ func (jm *Controller) deleteJob(obj interface{}) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Listing pods shouldn't really fail, as we are just querying the informer cache.
|
// Listing pods shouldn't really fail, as we are just querying the informer cache.
|
||||||
pods, _ := jm.podStore.Pods(jobObj.Namespace).List(labels.Everything())
|
selector, err := metav1.LabelSelectorAsSelector(jobObj.Spec.Selector)
|
||||||
|
if err != nil {
|
||||||
|
utilruntime.HandleError(fmt.Errorf("parsing deleted job selector: %v", err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
pods, _ := jm.podStore.Pods(jobObj.Namespace).List(selector)
|
||||||
for _, pod := range pods {
|
for _, pod := range pods {
|
||||||
controllerRef := metav1.GetControllerOf(pod)
|
if metav1.IsControlledBy(pod, jobObj) && hasJobTrackingFinalizer(pod) {
|
||||||
if (controllerRef == nil || controllerRef.UID == jobObj.UID) && hasJobTrackingFinalizer(pod) {
|
|
||||||
jm.enqueueOrphanPod(pod)
|
jm.enqueueOrphanPod(pod)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -567,6 +582,14 @@ func (jm Controller) syncOrphanPod(ctx context.Context, key string) error {
|
|||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
// Make sure the pod is still orphaned.
|
||||||
|
if controllerRef := metav1.GetControllerOf(sharedPod); controllerRef != nil {
|
||||||
|
job := jm.resolveControllerRef(sharedPod.Namespace, controllerRef)
|
||||||
|
if job != nil {
|
||||||
|
// The pod was adopted. Do not remove finalizer.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
if patch := removeTrackingFinalizerPatch(sharedPod); patch != nil {
|
if patch := removeTrackingFinalizerPatch(sharedPod); patch != nil {
|
||||||
if err := jm.podControl.PatchPod(ctx, ns, name, patch); err != nil && !apierrors.IsNotFound(err) {
|
if err := jm.podControl.PatchPod(ctx, ns, name, patch); err != nil && !apierrors.IsNotFound(err) {
|
||||||
return err
|
return err
|
||||||
|
Loading…
Reference in New Issue
Block a user