Skip to content

Commit

Permalink
Disable Build and DeploymentConfig Informers if their caps are disabled
Browse files Browse the repository at this point in the history
We don't run Build and DeploymentConfig controllers, if their
capabilities are disabled. Whereas, ImageTrigger controller also relies
on these resources in the form of informers and these informers are
getting cached timeout error and causing the controller-manager
being restarted multiple times.

This commit disables build and deploymentconfig informers, in cases
where their caps are disabled to let imagetrigger can work properly.
  • Loading branch information
ardaguclu authored and openshift-cherrypick-robot committed Sep 14, 2023
1 parent 66b6169 commit 64bdab1
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 23 deletions.
42 changes: 22 additions & 20 deletions pkg/cmd/controller/image.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema"
kclientsetexternal "k8s.io/client-go/kubernetes"

openshiftcontrolplanev1 "github.com/openshift/api/openshiftcontrolplane/v1"
triggerutil "github.com/openshift/library-go/pkg/image/trigger"
imagecontroller "github.com/openshift/openshift-controller-manager/pkg/image/controller"
imagesignaturecontroller "github.com/openshift/openshift-controller-manager/pkg/image/controller/signature"
Expand All @@ -27,37 +28,38 @@ import (

func RunImageTriggerController(ctx *ControllerContext) (bool, error) {
informer := ctx.ImageInformers.Image().V1().ImageStreams()

buildClient, err := ctx.ClientBuilder.OpenshiftBuildClient(infraImageTriggerControllerServiceAccountName)
if err != nil {
return true, err
}

appsClient, err := ctx.ClientBuilder.OpenshiftAppsClient(infraImageTriggerControllerServiceAccountName)
if err != nil {
return true, err
}
kclient := ctx.ClientBuilder.ClientOrDie(infraImageTriggerControllerServiceAccountName)

updater := podSpecUpdater{kclient}
broadcaster := imagetriggercontroller.NewTriggerEventBroadcaster(kclient.CoreV1())

sources := []imagetriggercontroller.TriggerSource{
{
var sources []imagetriggercontroller.TriggerSource
if ctx.IsControllerEnabled(string(openshiftcontrolplanev1.OpenshiftDeploymentConfigController)) {
appsClient, err := ctx.ClientBuilder.OpenshiftAppsClient(infraImageTriggerControllerServiceAccountName)
if err != nil {
return true, err
}
sources = append(sources, imagetriggercontroller.TriggerSource{
Resource: schema.GroupResource{Group: "apps.openshift.io", Resource: "deploymentconfigs"},
Informer: ctx.AppsInformers.Apps().V1().DeploymentConfigs().Informer(),
Store: ctx.AppsInformers.Apps().V1().DeploymentConfigs().Informer().GetIndexer(),
TriggerFn: triggerdeploymentconfigs.NewDeploymentConfigTriggerIndexer,
Reactor: &triggerdeploymentconfigs.DeploymentConfigReactor{Client: appsClient.AppsV1()},
},
})
}
if ctx.IsControllerEnabled(string(openshiftcontrolplanev1.OpenshiftBuildController)) {
buildClient, err := ctx.ClientBuilder.OpenshiftBuildClient(infraImageTriggerControllerServiceAccountName)
if err != nil {
return true, err
}
sources = append(sources, imagetriggercontroller.TriggerSource{
Resource: schema.GroupResource{Group: "build.openshift.io", Resource: "buildconfigs"},
Informer: ctx.BuildInformers.Build().V1().BuildConfigs().Informer(),
Store: ctx.BuildInformers.Build().V1().BuildConfigs().Informer().GetIndexer(),
TriggerFn: triggerbuildconfigs.NewBuildConfigTriggerIndexer,
Reactor: triggerbuildconfigs.NewBuildConfigReactor(buildClient.BuildV1(), kclient.CoreV1().RESTClient()),
})
}
sources = append(sources, imagetriggercontroller.TriggerSource{
Resource: schema.GroupResource{Group: "build.openshift.io", Resource: "buildconfigs"},
Informer: ctx.BuildInformers.Build().V1().BuildConfigs().Informer(),
Store: ctx.BuildInformers.Build().V1().BuildConfigs().Informer().GetIndexer(),
TriggerFn: triggerbuildconfigs.NewBuildConfigTriggerIndexer,
Reactor: triggerbuildconfigs.NewBuildConfigReactor(buildClient.BuildV1(), kclient.CoreV1().RESTClient()),
})
sources = append(sources, imagetriggercontroller.TriggerSource{
Resource: schema.GroupResource{Group: "apps", Resource: "deployments"},
Informer: ctx.KubernetesInformers.Apps().V1().Deployments().Informer(),
Expand Down
8 changes: 6 additions & 2 deletions pkg/cmd/controller/interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,12 @@ func (c *ControllerContext) StartInformers(stopCh <-chan struct{}) {
c.OpenshiftConfigKubernetesInformers.Start(stopCh)
c.ControllerManagerKubeInformers.Start(stopCh)

c.AppsInformers.Start(stopCh)
c.BuildInformers.Start(stopCh)
if c.IsControllerEnabled(string(openshiftcontrolplanev1.OpenshiftDeploymentConfigController)) {
c.AppsInformers.Start(stopCh)
}
if c.IsControllerEnabled(string(openshiftcontrolplanev1.OpenshiftBuildController)) {
c.BuildInformers.Start(stopCh)
}
c.ConfigInformers.Start(stopCh)
c.ImageInformers.Start(stopCh)

Expand Down
9 changes: 8 additions & 1 deletion pkg/cmd/controller/template.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package controller

import (
openshiftcontrolplanev1 "github.com/openshift/api/openshiftcontrolplane/v1"
buildv1client "github.com/openshift/client-go/build/clientset/versioned"
templatecontroller "github.com/openshift/openshift-controller-manager/pkg/template/controller"
"k8s.io/client-go/dynamic"
)
Expand All @@ -17,12 +19,17 @@ func RunTemplateInstanceController(ctx *ControllerContext) (bool, error) {
return true, err
}

var buildClient buildv1client.Interface
if ctx.IsControllerEnabled(string(openshiftcontrolplanev1.OpenshiftBuildController)) {
buildClient = ctx.ClientBuilder.OpenshiftBuildClientOrDie(saName)
}

go templatecontroller.NewTemplateInstanceController(
ctx.RestMapper,
dynamicClient,
ctx.ClientBuilder.ClientOrDie(saName).AuthorizationV1(),
ctx.ClientBuilder.ClientOrDie(saName),
ctx.ClientBuilder.OpenshiftBuildClientOrDie(saName),
buildClient,
ctx.ClientBuilder.OpenshiftTemplateClientOrDie(saName).TemplateV1(),
ctx.TemplateInformers.Template().V1().TemplateInstances(),
).Run(5, ctx.Stop)
Expand Down
3 changes: 3 additions & 0 deletions pkg/template/controller/readiness.go
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,9 @@ func CheckReadiness(oc buildv1client.Interface, ref corev1.ObjectReference, obj

switch ref.GroupVersionKind() {
case groupVersionKind(buildv1.GroupVersion, "BuildConfig"), schema.GroupVersionKind{Group: "", Version: "v1", Kind: "BuildConfig"}:
if oc == nil {
return false, false, nil
}
return checkBuildConfigReadiness(oc, castObj)
}

Expand Down

0 comments on commit 64bdab1

Please sign in to comment.