From d6e2d50ac16881f8e1f8cc8c8168f9bb5f34165d Mon Sep 17 00:00:00 2001 From: Patryk Matuszak <305846+pmtk@users.noreply.github.com> Date: Fri, 8 Sep 2023 09:35:18 +0200 Subject: [PATCH 1/3] make KCM use context we give to command By using cmd.Context(), KCM will use a context MicroShift passes down through all the components. When using context.Background() it won't ever stop, because it's never cancelled, and result in blocking ServiceManager which waits for all components to stop and make MicroShift use its whole internal gracefulShutdownTimer. --- .../0030-kube-controller-manager-command-context.patch | 2 +- .../cmd/kube-controller-manager/app/controllermanager.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/auto-rebase/rebase_patches/0030-kube-controller-manager-command-context.patch b/scripts/auto-rebase/rebase_patches/0030-kube-controller-manager-command-context.patch index e75b2134f9..0647a577cb 100644 --- a/scripts/auto-rebase/rebase_patches/0030-kube-controller-manager-command-context.patch +++ b/scripts/auto-rebase/rebase_patches/0030-kube-controller-manager-command-context.patch @@ -16,7 +16,7 @@ index 087b5f50b..092a1bdb5 100644 - stopCh := server.SetupSignalHandler() - return Run(context.Background(), c.Complete(), stopCh) -+ return Run(context.Background(), c.Complete(), cmd.Context().Done()) ++ return Run(cmd.Context(), c.Complete(), cmd.Context().Done()) }, Args: func(cmd *cobra.Command, args []string) error { for _, arg := range args { diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/controllermanager.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/controllermanager.go index 092a1bdb5e..4a175abd91 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/controllermanager.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/controllermanager.go @@ -155,7 +155,7 @@ controller, and serviceaccounts controller.`, // add feature enablement metrics utilfeature.DefaultMutableFeatureGate.AddMetrics() - return Run(context.Background(), c.Complete(), cmd.Context().Done()) + return Run(cmd.Context(), c.Complete(), cmd.Context().Done()) }, Args: func(cmd *cobra.Command, args []string) error { for _, arg := range args { From ba79f993070111ae3b6e35c3abb3141e95901874 Mon Sep 17 00:00:00 2001 From: Patryk Matuszak <305846+pmtk@users.noreply.github.com> Date: Fri, 8 Sep 2023 09:56:40 +0200 Subject: [PATCH 2/3] override KAS' shutdown-delay-duration to 5s shutdown-delay-duration tells KAS how long to serve after receiving a stop signal. Its value is provided to time.Sleep(), so it's used in full; there is not short-circuit mechanism that would let KAS exit earlier. --- pkg/controllers/kube-apiserver.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/controllers/kube-apiserver.go b/pkg/controllers/kube-apiserver.go index 46b4563e20..8e6182862e 100644 --- a/pkg/controllers/kube-apiserver.go +++ b/pkg/controllers/kube-apiserver.go @@ -160,6 +160,7 @@ func (s *KubeAPIServer) configure(cfg *config.Config) error { }, "enable-admission-plugins": {}, "send-retry-after-while-not-ready-once": {"true"}, + "shutdown-delay-duration": {"5s"}, }, GenericAPIServerConfig: configv1.GenericAPIServerConfig{ AdmissionConfig: configv1.AdmissionConfig{ From 0454f2836b8b2be1af2586b907fb867dcf5de205 Mon Sep 17 00:00:00 2001 From: Patryk Matuszak <305846+pmtk@users.noreply.github.com> Date: Fri, 8 Sep 2023 10:00:45 +0200 Subject: [PATCH 3/3] add missing closure of stopped channel to microshift controllers --- pkg/controllers/infra-services-controller.go | 1 + pkg/controllers/openshift-default-scc-manager.go | 1 + 2 files changed, 2 insertions(+) diff --git a/pkg/controllers/infra-services-controller.go b/pkg/controllers/infra-services-controller.go index de55af062a..9d1e23f516 100644 --- a/pkg/controllers/infra-services-controller.go +++ b/pkg/controllers/infra-services-controller.go @@ -41,6 +41,7 @@ func (s *InfrastructureServicesManager) Dependencies() []string { } func (s *InfrastructureServicesManager) Run(ctx context.Context, ready chan<- struct{}, stopped chan<- struct{}) error { + defer close(stopped) defer close(ready) if err := applyDefaultRBACs(ctx, s.cfg); err != nil { diff --git a/pkg/controllers/openshift-default-scc-manager.go b/pkg/controllers/openshift-default-scc-manager.go index 5570a07523..a77fb1a027 100644 --- a/pkg/controllers/openshift-default-scc-manager.go +++ b/pkg/controllers/openshift-default-scc-manager.go @@ -41,6 +41,7 @@ func (s *OpenShiftDefaultSCCManager) Dependencies() []string { } func (s *OpenShiftDefaultSCCManager) Run(ctx context.Context, ready chan<- struct{}, stopped chan<- struct{}) error { + defer close(stopped) defer close(ready) // TO-DO add readiness check if err := ApplyDefaultSCCs(ctx, s.cfg); err != nil {