diff --git a/vendor/k8s.io/kubernetes/pkg/controller/endpoint/endpoints_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/endpoint/endpoints_controller.go index fabab5b20f19..054ca9821143 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/endpoint/endpoints_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/endpoint/endpoints_controller.go @@ -206,6 +206,10 @@ func podToEndpointAddress(pod *v1.Pod) *v1.EndpointAddress { } func podChanged(oldPod, newPod *v1.Pod) bool { + // If the pod's deletion timestamp is set, remove endpoint from ready address. + if newPod.DeletionTimestamp != oldPod.DeletionTimestamp { + return true + } // If the pod's readiness has changed, the associated endpoint address // will move from the unready endpoints set to the ready endpoints. // So for the purposes of an endpoint, a readiness change on a pod diff --git a/vendor/k8s.io/kubernetes/pkg/controller/endpoint/endpoints_controller_test.go b/vendor/k8s.io/kubernetes/pkg/controller/endpoint/endpoints_controller_test.go index 153101fa18c4..2b9f5774c86d 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/endpoint/endpoints_controller_test.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/endpoint/endpoints_controller_test.go @@ -774,6 +774,14 @@ func TestPodChanged(t *testing.T) { t.Errorf("Expected pod to be changed with pod readiness change") } oldPod.Status.Conditions = saveConditions + + oldTimestamp := newPod.ObjectMeta.DeletionTimestamp + now := metav1.NewTime(time.Now().UTC()) + newPod.ObjectMeta.DeletionTimestamp = &now + if !podChanged(oldPod, newPod) { + t.Errorf("Expected pod to be changed with DeletionTimestamp change") + } + newPod.ObjectMeta.DeletionTimestamp = oldTimestamp } func TestDetermineNeededServiceUpdates(t *testing.T) {