diff --git a/cmd/nfd-master/main.go b/cmd/nfd-master/main.go index dba7da4f1b..d56032e37b 100644 --- a/cmd/nfd-master/main.go +++ b/cmd/nfd-master/main.go @@ -68,7 +68,7 @@ func main() { args.Overrides.EnableTaints = overrides.EnableTaints case "no-publish": args.Overrides.NoPublish = overrides.NoPublish - case "-resync-period": + case "resync-period": args.Overrides.ResyncPeriod = overrides.ResyncPeriod } }) diff --git a/pkg/nfd-master/nfd-api-controller.go b/pkg/nfd-master/nfd-api-controller.go index 714037afb9..1ce7fe07ed 100644 --- a/pkg/nfd-master/nfd-api-controller.go +++ b/pkg/nfd-master/nfd-api-controller.go @@ -29,6 +29,7 @@ import ( nfdscheme "sigs.k8s.io/node-feature-discovery/pkg/generated/clientset/versioned/scheme" nfdinformers "sigs.k8s.io/node-feature-discovery/pkg/generated/informers/externalversions" nfdlisters "sigs.k8s.io/node-feature-discovery/pkg/generated/listers/nfd/v1alpha1" + "sigs.k8s.io/node-feature-discovery/pkg/utils" ) type nfdController struct { @@ -54,6 +55,8 @@ func newNfdController(config *restclient.Config, nfdApiControllerOptions nfdApiC } nfdClient := nfdclientset.NewForConfigOrDie(config) + utils.KlogDump(2, "NFD API controller options:", " ", nfdApiControllerOptions) + informerFactory := nfdinformers.NewSharedInformerFactory(nfdClient, nfdApiControllerOptions.resyncPeriod) // Add informer for NodeFeature objects @@ -117,7 +120,6 @@ func newNfdController(config *restclient.Config, nfdApiControllerOptions nfdApiC informerFactory.Start(c.stopChan) utilruntime.Must(nfdv1alpha1.AddToScheme(nfdscheme.Scheme)) - return c, nil } diff --git a/pkg/nfd-master/nfd-master.go b/pkg/nfd-master/nfd-master.go index df5cd6c28e..632f910e59 100644 --- a/pkg/nfd-master/nfd-master.go +++ b/pkg/nfd-master/nfd-master.go @@ -98,7 +98,6 @@ type Args struct { Prune bool VerifyNodeName bool Options string - ResyncPeriod utils.DurationVal Overrides ConfigOverrideArgs } @@ -163,7 +162,6 @@ func NewNfdMaster(args *Args) (NfdMaster, error) { if args.ConfigFile != "" { nfd.configFilePath = filepath.Clean(args.ConfigFile) } - return nfd, nil } @@ -199,18 +197,10 @@ func (m *nfdMaster) Run() error { } if m.args.CrdController { - kubeconfig, err := m.getKubeconfig() + err := m.startNfdControllerApi() if err != nil { return err } - klog.Info("starting nfd api controller") - m.nfdController, err = newNfdController(kubeconfig, nfdApiControllerOptions{ - disableNodeFeature: !m.args.EnableNodeFeatureApi, - resyncPeriod: m.args.ResyncPeriod.Duration, - }) - if err != nil { - return fmt.Errorf("failed to initialize CRD controller: %w", err) - } } // Create watcher for config file @@ -249,6 +239,17 @@ func (m *nfdMaster) Run() error { if err := m.configure(m.configFilePath, m.args.Options); err != nil { return err } + + // restart NFD API controller + if m.nfdController != nil { + m.nfdController.stop() + } + if m.args.CrdController { + err := m.startNfdControllerApi() + if err != nil { + return nil + } + } // Update all nodes when the configuration changes if m.nfdController != nil { m.nfdController.updateAllNodesChan <- struct{}{} @@ -1152,6 +1153,7 @@ func (m *nfdMaster) configure(filepath string, overrides string) error { } m.apihelper = apihelper.K8sHelpers{Kubeconfig: kubeconfig} } + // Pre-process DenyLabelNS into 2 lists: one for normal ns, and the other for wildcard ns normalDeniedNs, wildcardDeniedNs := preProcessDeniedNamespaces(c.DenyLabelNs) m.deniedNs.normal = normalDeniedNs @@ -1219,3 +1221,19 @@ func (m *nfdMaster) instanceAnnotation(name string) string { } return m.args.Instance + "." + name } + +func (m *nfdMaster) startNfdControllerApi() error { + kubeconfig, err := m.getKubeconfig() + if err != nil { + return err + } + klog.Info("starting nfd api controller") + m.nfdController, err = newNfdController(kubeconfig, nfdApiControllerOptions{ + disableNodeFeature: !m.args.EnableNodeFeatureApi, + resyncPeriod: m.config.ResyncPeriod.Duration, + }) + if err != nil { + return fmt.Errorf("failed to initialize CRD controller: %w", err) + } + return nil +}