From e7ea942aacf57a30126f83eda96c1f3dceeec030 Mon Sep 17 00:00:00 2001 From: Hardy Simpson Date: Mon, 8 May 2017 17:16:33 +0800 Subject: [PATCH] fix endpoints controller del lead-election endpoints --- pkg/controller/endpoint/BUILD | 1 + pkg/controller/endpoint/endpoints_controller.go | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/pkg/controller/endpoint/BUILD b/pkg/controller/endpoint/BUILD index 3a29722a1ef..6310752b25f 100644 --- a/pkg/controller/endpoint/BUILD +++ b/pkg/controller/endpoint/BUILD @@ -21,6 +21,7 @@ go_library( "//pkg/api/v1/pod:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/informers/informers_generated/externalversions/core/v1:go_default_library", + "//pkg/client/leaderelection/resourcelock:go_default_library", "//pkg/client/listers/core/v1:go_default_library", "//pkg/controller:go_default_library", "//pkg/util/metrics:go_default_library", diff --git a/pkg/controller/endpoint/endpoints_controller.go b/pkg/controller/endpoint/endpoints_controller.go index 1570ffdfad4..d24bc6130d6 100644 --- a/pkg/controller/endpoint/endpoints_controller.go +++ b/pkg/controller/endpoint/endpoints_controller.go @@ -35,6 +35,7 @@ import ( podutil "k8s.io/kubernetes/pkg/api/v1/pod" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" coreinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/core/v1" + "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" corelisters "k8s.io/kubernetes/pkg/client/listers/core/v1" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/util/metrics" @@ -461,6 +462,14 @@ func (e *EndpointController) checkLeftoverEndpoints() { } for i := range list.Items { ep := &list.Items[i] + if _, ok := ep.Annotations[resourcelock.LeaderElectionRecordAnnotationKey]; ok { + // when there are multiple controller-manager instances, + // we observe that it will delete leader-election endpoints after 5min + // and cause re-election + // so skip the delete here + // as leader-election only have endpoints without service + continue + } key, err := keyFunc(ep) if err != nil { utilruntime.HandleError(fmt.Errorf("Unable to get key for endpoint %#v", ep))