1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-04-15 16:56:56 +00:00

fix: add missing config controller to reports and background controllers (#6663)

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
This commit is contained in:
Charles-Edouard Brétéché 2023-03-23 16:15:20 +01:00 committed by GitHub
parent 5c686c4f45
commit 437d908fb8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 70 additions and 9 deletions

View file

@ -19,6 +19,7 @@ import (
kubeclient "github.com/kyverno/kyverno/pkg/clients/kube"
kyvernoclient "github.com/kyverno/kyverno/pkg/clients/kyverno"
"github.com/kyverno/kyverno/pkg/config"
configcontroller "github.com/kyverno/kyverno/pkg/controllers/config"
policymetricscontroller "github.com/kyverno/kyverno/pkg/controllers/metrics/policy"
"github.com/kyverno/kyverno/pkg/cosign"
"github.com/kyverno/kyverno/pkg/engine"
@ -94,7 +95,6 @@ func createrLeaderControllers(
if err != nil {
return nil, err
}
backgroundController := background.NewController(
kyvernoClient,
dynamicClient,
@ -113,6 +113,20 @@ func createrLeaderControllers(
}, err
}
func createNonLeaderControllers(
configuration config.Configuration,
kubeKyvernoInformer kubeinformers.SharedInformerFactory,
) ([]internal.Controller, func() error) {
configurationController := configcontroller.NewController(
configuration,
kubeKyvernoInformer.Core().V1().ConfigMaps(),
)
return []internal.Controller{
internal.NewController(configcontroller.ControllerName, configurationController, configcontroller.Workers),
},
nil
}
func main() {
var (
genWorkers int
@ -221,11 +235,23 @@ func main() {
// TODO: do we need exceptions here ?
nil,
)
// create non leader controllers
nonLeaderControllers, nonLeaderBootstrap := createNonLeaderControllers(
configuration,
kubeKyvernoInformer,
)
// start informers and wait for cache sync
if !internal.StartInformersAndWaitForCacheSync(signalCtx, logger, kyvernoInformer, kubeKyvernoInformer, cacheInformer) {
logger.Error(errors.New("failed to wait for cache sync"), "failed to wait for cache sync")
os.Exit(1)
}
// bootstrap non leader controllers
if nonLeaderBootstrap != nil {
if err := nonLeaderBootstrap(); err != nil {
logger.Error(err, "failed to bootstrap non leader controllers")
os.Exit(1)
}
}
// start event generator
go eventGenerator.Run(signalCtx, 3, &wg)
// setup leader election
@ -278,6 +304,10 @@ func main() {
logger.Error(err, "failed to initialize leader election")
os.Exit(1)
}
// start non leader controllers
for _, controller := range nonLeaderControllers {
controller.Run(signalCtx, logger.WithName("controllers"), &wg)
}
// start leader election
for {
select {

View file

@ -19,6 +19,7 @@ import (
kyvernoclient "github.com/kyverno/kyverno/pkg/clients/kyverno"
metadataclient "github.com/kyverno/kyverno/pkg/clients/metadata"
"github.com/kyverno/kyverno/pkg/config"
configcontroller "github.com/kyverno/kyverno/pkg/controllers/config"
admissionreportcontroller "github.com/kyverno/kyverno/pkg/controllers/report/admission"
aggregatereportcontroller "github.com/kyverno/kyverno/pkg/controllers/report/aggregate"
backgroundscancontroller "github.com/kyverno/kyverno/pkg/controllers/report/background"
@ -191,6 +192,20 @@ func createrLeaderControllers(
return reportControllers, warmup, nil
}
func createNonLeaderControllers(
configuration config.Configuration,
kubeKyvernoInformer kubeinformers.SharedInformerFactory,
) ([]internal.Controller, func() error) {
configurationController := configcontroller.NewController(
configuration,
kubeKyvernoInformer.Core().V1().ConfigMaps(),
)
return []internal.Controller{
internal.NewController(configcontroller.ControllerName, configurationController, configcontroller.Workers),
},
nil
}
func main() {
var (
leaderElectionRetryPeriod time.Duration
@ -304,14 +319,6 @@ func main() {
exceptionsLister = lister
}
}
// start informers and wait for cache sync
if !internal.StartInformersAndWaitForCacheSync(ctx, logger, kyvernoInformer, kubeKyvernoInformer, cacheInformer) {
logger.Error(errors.New("failed to wait for cache sync"), "failed to wait for cache sync")
os.Exit(1)
}
// start event generator
var wg sync.WaitGroup
go eventGenerator.Run(ctx, 3, &wg)
eng := engine.NewEngine(
configuration,
dClient,
@ -319,6 +326,26 @@ func main() {
engineapi.DefaultContextLoaderFactory(configMapResolver),
exceptionsLister,
)
// create non leader controllers
nonLeaderControllers, nonLeaderBootstrap := createNonLeaderControllers(
configuration,
kubeKyvernoInformer,
)
// start informers and wait for cache sync
if !internal.StartInformersAndWaitForCacheSync(ctx, logger, kyvernoInformer, kubeKyvernoInformer, cacheInformer) {
logger.Error(errors.New("failed to wait for cache sync"), "failed to wait for cache sync")
os.Exit(1)
}
// bootstrap non leader controllers
if nonLeaderBootstrap != nil {
if err := nonLeaderBootstrap(); err != nil {
logger.Error(err, "failed to bootstrap non leader controllers")
os.Exit(1)
}
}
// start event generator
var wg sync.WaitGroup
go eventGenerator.Run(ctx, 3, &wg)
// setup leader election
le, err := leaderelection.New(
logger.WithName("leader-election"),
@ -384,6 +411,10 @@ func main() {
logger.Error(err, "failed to initialize leader election")
os.Exit(1)
}
// start non leader controllers
for _, controller := range nonLeaderControllers {
controller.Run(ctx, logger.WithName("controllers"), &wg)
}
for {
select {
case <-ctx.Done():