From a44fe04beff9508e1c7ead8299ddb8174db76d6a Mon Sep 17 00:00:00 2001 From: Yusuke Kuoka Date: Tue, 21 Feb 2023 08:18:59 +0900 Subject: [PATCH] Fix manager crashloopback for ARC deployments without scaleset-related controllers (#2293) --- main.go | 126 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 68 insertions(+), 58 deletions(-) diff --git a/main.go b/main.go index 754c1cbb..6cdd4ef7 100644 --- a/main.go +++ b/main.go @@ -317,71 +317,81 @@ func main() { } } + // We use this environment avariable to turn on the ScaleSet related controllers. + // Otherwise ARC's legacy chart is unable to deploy a working ARC controller-manager pod, + // due to that the chart does not contain new actions.* CRDs while ARC requires those CRDs. + // + // We might have used a more explicitly named environment variable for this, + // e.g. "CONTROLLER_MANAGER_ENABLE_SCALE_SET" to explicitly enable the new controllers, + // or "CONTROLLER_MANAGER_DISABLE_SCALE_SET" to explicitly disable the new controllers. + // However, doing so would affect either private ARC testers or current ARC users + // who run ARC without those variabls. mgrPodName := os.Getenv("CONTROLLER_MANAGER_POD_NAME") - mgrPodNamespace := os.Getenv("CONTROLLER_MANAGER_POD_NAMESPACE") - var mgrPod corev1.Pod - err = mgr.GetAPIReader().Get(context.Background(), types.NamespacedName{Namespace: mgrPodNamespace, Name: mgrPodName}, &mgrPod) - if err != nil { - log.Error(err, fmt.Sprintf("unable to obtain manager pod: %s (%s)", mgrPodName, mgrPodNamespace)) - os.Exit(1) - } - - var mgrContainer *corev1.Container - for _, container := range mgrPod.Spec.Containers { - if container.Name == "manager" { - mgrContainer = &container - break + if mgrPodName != "" { + mgrPodNamespace := os.Getenv("CONTROLLER_MANAGER_POD_NAMESPACE") + var mgrPod corev1.Pod + err = mgr.GetAPIReader().Get(context.Background(), types.NamespacedName{Namespace: mgrPodNamespace, Name: mgrPodName}, &mgrPod) + if err != nil { + log.Error(err, fmt.Sprintf("unable to obtain manager pod: %s (%s)", mgrPodName, mgrPodNamespace)) + os.Exit(1) } - } - if mgrContainer != nil { - log.Info("Detected manager container", "image", mgrContainer.Image) - } else { - log.Error(err, "unable to obtain manager container image") - os.Exit(1) - } + var mgrContainer *corev1.Container + for _, container := range mgrPod.Spec.Containers { + if container.Name == "manager" { + mgrContainer = &container + break + } + } - if err = (&actionsgithubcom.AutoscalingRunnerSetReconciler{ - Client: mgr.GetClient(), - Log: log.WithName("AutoscalingRunnerSet"), - Scheme: mgr.GetScheme(), - ControllerNamespace: mgrPodNamespace, - DefaultRunnerScaleSetListenerImage: mgrContainer.Image, - ActionsClient: actionsMultiClient, - DefaultRunnerScaleSetListenerImagePullSecrets: autoScalerImagePullSecrets, - }).SetupWithManager(mgr); err != nil { - log.Error(err, "unable to create controller", "controller", "AutoscalingRunnerSet") - os.Exit(1) - } + if mgrContainer != nil { + log.Info("Detected manager container", "image", mgrContainer.Image) + } else { + log.Error(err, "unable to obtain manager container image") + os.Exit(1) + } + if err = (&actionsgithubcom.AutoscalingRunnerSetReconciler{ + Client: mgr.GetClient(), + Log: log.WithName("AutoscalingRunnerSet"), + Scheme: mgr.GetScheme(), + ControllerNamespace: mgrPodNamespace, + DefaultRunnerScaleSetListenerImage: mgrContainer.Image, + ActionsClient: actionsMultiClient, + DefaultRunnerScaleSetListenerImagePullSecrets: autoScalerImagePullSecrets, + }).SetupWithManager(mgr); err != nil { + log.Error(err, "unable to create controller", "controller", "AutoscalingRunnerSet") + os.Exit(1) + } - if err = (&actionsgithubcom.EphemeralRunnerReconciler{ - Client: mgr.GetClient(), - Log: log.WithName("EphemeralRunner"), - Scheme: mgr.GetScheme(), - ActionsClient: actionsMultiClient, - }).SetupWithManager(mgr); err != nil { - log.Error(err, "unable to create controller", "controller", "EphemeralRunner") - os.Exit(1) - } + if err = (&actionsgithubcom.EphemeralRunnerReconciler{ + Client: mgr.GetClient(), + Log: log.WithName("EphemeralRunner"), + Scheme: mgr.GetScheme(), + ActionsClient: actionsMultiClient, + }).SetupWithManager(mgr); err != nil { + log.Error(err, "unable to create controller", "controller", "EphemeralRunner") + os.Exit(1) + } - if err = (&actionsgithubcom.EphemeralRunnerSetReconciler{ - Client: mgr.GetClient(), - Log: log.WithName("EphemeralRunnerSet"), - Scheme: mgr.GetScheme(), - ActionsClient: actionsMultiClient, - }).SetupWithManager(mgr); err != nil { - log.Error(err, "unable to create controller", "controller", "EphemeralRunnerSet") - os.Exit(1) + if err = (&actionsgithubcom.EphemeralRunnerSetReconciler{ + Client: mgr.GetClient(), + Log: log.WithName("EphemeralRunnerSet"), + Scheme: mgr.GetScheme(), + ActionsClient: actionsMultiClient, + }).SetupWithManager(mgr); err != nil { + log.Error(err, "unable to create controller", "controller", "EphemeralRunnerSet") + os.Exit(1) + } + if err = (&actionsgithubcom.AutoscalingListenerReconciler{ + Client: mgr.GetClient(), + Log: log.WithName("AutoscalingListener"), + Scheme: mgr.GetScheme(), + }).SetupWithManager(mgr); err != nil { + log.Error(err, "unable to create controller", "controller", "AutoscalingListener") + os.Exit(1) + } + // +kubebuilder:scaffold:builder } - if err = (&actionsgithubcom.AutoscalingListenerReconciler{ - Client: mgr.GetClient(), - Log: log.WithName("AutoscalingListener"), - Scheme: mgr.GetScheme(), - }).SetupWithManager(mgr); err != nil { - log.Error(err, "unable to create controller", "controller", "AutoscalingListener") - os.Exit(1) - } - // +kubebuilder:scaffold:builder if !disableAdmissionWebhook && !autoScalingRunnerSetOnly { injector := &actionssummerwindnet.PodRunnerTokenInjector{