diff --git a/pkg/controller/petset/pet.go b/pkg/controller/petset/pet.go index 65c4816bc9c..0ca7e69325b 100644 --- a/pkg/controller/petset/pet.go +++ b/pkg/controller/petset/pet.go @@ -96,7 +96,13 @@ func (p *petSyncer) Sync(pet *pcb) error { if err := p.SyncPVCs(pet); err != nil { return err } - if exists { + // if pet was evicted - we need to remove old one because of consistent naming + if exists && isEvicted(realPet.pod) { + glog.V(4).Infof("Delete evicted pod %v", realPet.pod.Name) + if err := p.petClient.Delete(realPet); err != nil { + return err + } + } else if exists { if !p.isHealthy(realPet.pod) { glog.Infof("PetSet %v waiting on unhealthy pet %v", pet.parent.Name, realPet.pod.Name) } @@ -311,3 +317,7 @@ func (d *defaultPetHealthChecker) isHealthy(pod *api.Pod) bool { func (d *defaultPetHealthChecker) isDying(pod *api.Pod) bool { return pod != nil && pod.DeletionTimestamp != nil } + +func isEvicted(pod *api.Pod) bool { + return pod != nil && pod.Status.Phase == api.PodFailed && pod.Status.Reason == "Evicted" +}