From a3712554fe0ad16b063d1d2e0d943336b6995557 Mon Sep 17 00:00:00 2001 From: Igor Velichkovich Date: Thu, 13 Feb 2025 10:21:57 -0800 Subject: [PATCH] config file for informerPageSize --- cmd/nfd-master/main.go | 4 ++-- .../helm/node-feature-discovery/values.yaml | 1 + docs/reference/master-configuration-reference.md | 15 +++++++++++++++ pkg/nfd-master/nfd-master.go | 9 +++++++-- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/cmd/nfd-master/main.go b/cmd/nfd-master/main.go index 8de28337f..e55211bba 100644 --- a/cmd/nfd-master/main.go +++ b/cmd/nfd-master/main.go @@ -117,8 +117,6 @@ func initFlags(flagset *flag.FlagSet) (*master.Args, *master.ConfigOverrideArgs) "in the same format as in the config file (i.e. json or yaml). These options") flagset.BoolVar(&args.EnableLeaderElection, "enable-leader-election", false, "Enables a leader election. Enable this when running more than one replica on nfd master.") - flagset.Int64Var(&args.ListSize, "informer-page-size", 200, - "The list size to use when listing NodeFeature objects to sync informer cache.") args.Klog = klogutils.InitKlogFlags(flagset) @@ -142,6 +140,8 @@ func initFlags(flagset *flag.FlagSet) (*master.Args, *master.ConfigOverrideArgs) flagset.Var(overrides.ResyncPeriod, "resync-period", "Specify the NFD API controller resync period.") overrides.NfdApiParallelism = flagset.Int("nfd-api-parallelism", 10, "Defines the maximum number of goroutines responsible of updating nodes. "+ "Can be used for the throttling mechanism.") + overrides.InformerPageSize = flagset.Int64("informer-page-size", 200, + "The list size to use when listing NodeFeature objects to sync informer cache.") return args, overrides } diff --git a/deployment/helm/node-feature-discovery/values.yaml b/deployment/helm/node-feature-discovery/values.yaml index d71b7bb5b..93abcc715 100644 --- a/deployment/helm/node-feature-discovery/values.yaml +++ b/deployment/helm/node-feature-discovery/values.yaml @@ -66,6 +66,7 @@ master: # # this value has to be greater than 0 # retryPeriod: 2s # nfdApiParallelism: 10 + # informerPageSize: 50 ### port: 8080 instance: diff --git a/docs/reference/master-configuration-reference.md b/docs/reference/master-configuration-reference.md index 5ade9a3ea..0fa791153 100644 --- a/docs/reference/master-configuration-reference.md +++ b/docs/reference/master-configuration-reference.md @@ -216,6 +216,21 @@ Example: nfdApiParallelism: 1 ``` +## informerPageSize + +The `informerPageSize` option is used to control pagination +during informer cache sync on nfd-master startup. +This is useful to control load on api-server/etcd as listing +NodeFeature objects can be expensive, especially in large clusters. + +Default: 200 + +Example: + +```yaml +informerPageSize: 50 +``` + ## klog The following options specify the logger configuration. Most of which can be diff --git a/pkg/nfd-master/nfd-master.go b/pkg/nfd-master/nfd-master.go index 0de556ea2..767cc18b8 100644 --- a/pkg/nfd-master/nfd-master.go +++ b/pkg/nfd-master/nfd-master.go @@ -91,6 +91,7 @@ type NFDConfig struct { NfdApiParallelism int Klog klogutils.KlogConfigOpts Restrictions Restrictions + InformerPageSize int64 } // LeaderElectionConfig contains the configuration for leader election @@ -109,6 +110,7 @@ type ConfigOverrideArgs struct { NoPublish *bool ResyncPeriod *utils.DurationVal NfdApiParallelism *int + InformerPageSize *int64 } // Args holds command line arguments @@ -122,7 +124,6 @@ type Args struct { Options string EnableLeaderElection bool MetricsPort int - ListSize int64 Overrides ConfigOverrideArgs } @@ -243,6 +244,7 @@ func newDefaultConfig() *NFDConfig { NfdApiParallelism: 10, EnableTaints: false, ResyncPeriod: utils.DurationVal{Duration: time.Duration(1) * time.Hour}, + InformerPageSize: 200, LeaderElection: LeaderElectionConfig{ LeaseDuration: utils.DurationVal{Duration: time.Duration(15) * time.Second}, RetryPeriod: utils.DurationVal{Duration: time.Duration(2) * time.Second}, @@ -1191,6 +1193,9 @@ func (m *nfdMaster) configure(filepath string, overrides string) error { if m.args.Overrides.NfdApiParallelism != nil { c.NfdApiParallelism = *m.args.Overrides.NfdApiParallelism } + if m.args.Overrides.InformerPageSize != nil { + c.InformerPageSize = *m.args.Overrides.InformerPageSize + } if c.NfdApiParallelism <= 0 { return fmt.Errorf("the maximum number of concurrent labelers should be a non-zero positive number") @@ -1296,7 +1301,7 @@ func (m *nfdMaster) startNfdApiController() error { ResyncPeriod: m.config.ResyncPeriod.Duration, K8sClient: m.k8sClient, NodeFeatureNamespaceSelector: m.config.Restrictions.NodeFeatureNamespaceSelector, - ListSize: m.args.ListSize, + ListSize: m.config.InformerPageSize, }) if err != nil { return fmt.Errorf("failed to initialize CRD controller: %w", err)