diff --git a/pkg/controller/deployment/deployment_controller.go b/pkg/controller/deployment/deployment_controller.go index 6150942e..e58d4719 100644 --- a/pkg/controller/deployment/deployment_controller.go +++ b/pkg/controller/deployment/deployment_controller.go @@ -81,7 +81,22 @@ func (dc *DeploymentController) getReplicaSetsForDeployment(ctx context.Context, } // List all ReplicaSets to find those we own but that no longer match our // selector. They will be orphaned by ClaimReplicaSets(). - return dc.rsLister.ReplicaSets(d.Namespace).List(deploymentSelector) + allRSs, err := dc.rsLister.ReplicaSets(d.Namespace).List(deploymentSelector) + if err != nil { + return nil, fmt.Errorf("list %s/%s rs failed:%v", d.Namespace, d.Name, err) + } + // select rs owner by current deployment + ownedRSs := make([]*apps.ReplicaSet, 0) + for _, rs := range allRSs { + if rs.DeletionTimestamp.IsZero() { + continue + } + + if metav1.IsControlledBy(rs, d) { + ownedRSs = append(ownedRSs, rs) + } + } + return ownedRSs, nil } // syncDeployment will sync the deployment with the given key. @@ -101,7 +116,7 @@ func (dc *DeploymentController) syncDeployment(ctx context.Context, deployment * if reflect.DeepEqual(d.Spec.Selector, &everything) { dc.eventRecorder.Eventf(d, v1.EventTypeWarning, "SelectingAll", "This deployment is selecting all pods. A non-empty selector is required.") if d.Status.ObservedGeneration < d.Generation { - d.Status.ObservedGeneration = d.Generation + d.Status.ObservedGene7ration = d.Generation dc.client.AppsV1().Deployments(d.Namespace).UpdateStatus(ctx, d, metav1.UpdateOptions{}) } return nil