diff --git a/apis/apps/pub/lifecycle.go b/apis/apps/pub/lifecycle.go index 44aec77572..1f14f8149e 100644 --- a/apis/apps/pub/lifecycle.go +++ b/apis/apps/pub/lifecycle.go @@ -32,7 +32,7 @@ const ( // It will translate to Updated state if the in-place update of the Pod is done. LifecycleStateUpdating LifecycleStateType = "Updating" // LifecycleStateUpdated means the Pod is updated, but unavailable. - // It will translate to Normal state if Lifecycle.InPlaceUpdate is hooked. + // It will translate to Normal state if Lifecycle.InPlaceUpdate is hooked and pod condition ContainerReady is true. LifecycleStateUpdated LifecycleStateType = "Updated" // LifecycleStatePreparingDelete means the Pod is prepared to delete. // The Pod will be deleted by workload if Lifecycle.PreDelete is Not hooked. diff --git a/pkg/controller/cloneset/sync/cloneset_update.go b/pkg/controller/cloneset/sync/cloneset_update.go index a3e1cc7343..1675f6fea9 100644 --- a/pkg/controller/cloneset/sync/cloneset_update.go +++ b/pkg/controller/cloneset/sync/cloneset_update.go @@ -183,24 +183,22 @@ func (c *realControl) refreshPodState(cs *appsv1alpha1.CloneSet, coreControl clo // then rollback, do not need update pod inplace since it is the update revision, // so just update pod lifecycle state. ref: https://github.com/openkruise/kruise/issues/1156 if clonesetutils.EqualToRevisionHash("", pod, updateRevision) { - if cs.Spec.Lifecycle != nil && !lifecycle.IsPodAllHooked(cs.Spec.Lifecycle.InPlaceUpdate, pod) { - state = appspub.LifecycleStateUpdated - } else { + if util.IsRunningAndContainerReady(pod) && lifecycle.IsInPlaceUpdateHookNilOrAllHooked(cs.Spec.Lifecycle, pod) { state = appspub.LifecycleStateNormal + } else { + state = appspub.LifecycleStateUpdated } } case appspub.LifecycleStateUpdating: if opts.CheckPodUpdateCompleted(pod) == nil { - if cs.Spec.Lifecycle != nil && !lifecycle.IsPodAllHooked(cs.Spec.Lifecycle.InPlaceUpdate, pod) { - state = appspub.LifecycleStateUpdated - } else { + if util.IsRunningAndContainerReady(pod) && lifecycle.IsInPlaceUpdateHookNilOrAllHooked(cs.Spec.Lifecycle, pod) { state = appspub.LifecycleStateNormal + } else { + state = appspub.LifecycleStateUpdated } } case appspub.LifecycleStateUpdated: - if cs.Spec.Lifecycle == nil || - cs.Spec.Lifecycle.InPlaceUpdate == nil || - lifecycle.IsPodAllHooked(cs.Spec.Lifecycle.InPlaceUpdate, pod) { + if util.IsRunningAndContainerReady(pod) && lifecycle.IsInPlaceUpdateHookNilOrAllHooked(cs.Spec.Lifecycle, pod) { state = appspub.LifecycleStateNormal } }