mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-12-24 12:23:11 +00:00
Automatic merge from submit-queue [GarbageCollector] Let the RC manager set/remove ControllerRef What's done: * RC manager sets Controller Ref when creating new pods * RC manager sets Controller Ref when adopting pods with matching labels but having no controller * RC manager clears Controller Ref when pod labels change * RC manager clears pods' Controller Ref when rc's selector changes * RC manager stops adoption/creating/deleting pods when rc's DeletionTimestamp is set * RC manager bumps up ObservedGeneration: The [original code](https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/replication/replication_controller_utils.go#L36) will do this. * Integration tests: * verifies that changing RC's selector or Pod's Labels triggers adoption/abandoning * e2e tests (separated to #27151): * verifies GC deletes the pods created by RC if DeleteOptions.OrphanDependents=false, and orphans the pods if DeleteOptions.OrphanDependents=true. TODO: - [x] we need to be able to select Pods that have a specific ControllerRef. Then each time we sync the RC, we will iterate through all the Pods that has a controllerRef pointing the RC, event if the labels of the Pod doesn't match the selector of RC anymore. This will prevent a Pod from stuck with a stale controllerRef, which could be caused by the race between abandoner (the goroutine that removes controllerRef) and worker the goroutine that add controllerRef to pods). - [ ] use controllerRef instead of calling `getPodController`. This might be carried out by the control-plane team. - [ ] according to the controllerRef proposal (#25256): "For debugging purposes we want to add an adoptionTime annotation prefixed with kubernetes.io/ which will keep the time of last controller ownership transfer." This might be carried out by the control-plane team. cc @lavalamp @gmarek