Skip to content

Commit 04d0c1c

Browse files
authored
Add the NodeModulesConfig controller (#513)
Reconcile NodeModulesConfig resources by creating and monitoring worker Pods. Use the NodeModulesConfig status to maintain the state of modules on nodes.
1 parent 118431b commit 04d0c1c

14 files changed

+1848
-8
lines changed

api/v1beta1/nodemodulesconfig_types.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@ type ModuleConfig struct {
3131
}
3232

3333
type NodeModuleSpec struct {
34-
Name string `json:"name"`
35-
Namespace string `json:"namespace"`
36-
Config ModuleConfig `json:"config"`
34+
Name string `json:"name"`
35+
Namespace string `json:"namespace"`
36+
Config ModuleConfig `json:"config"`
37+
ServiceAccountName string `json:"serviceAccountName"`
3738
}
3839

3940
// NodeModulesConfigSpec describes the desired state of modules on the node

cmd/manager/main.go

+15-3
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ import (
2222
"os"
2323
"strconv"
2424

25-
"github.com/kubernetes-sigs/kernel-module-management/internal/build/pod"
26-
"github.com/kubernetes-sigs/kernel-module-management/internal/config"
2725
"k8s.io/apimachinery/pkg/runtime"
2826
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
2927
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
@@ -40,7 +38,9 @@ import (
4038
v1beta12 "github.com/kubernetes-sigs/kernel-module-management/api/v1beta1"
4139
"github.com/kubernetes-sigs/kernel-module-management/controllers"
4240
"github.com/kubernetes-sigs/kernel-module-management/internal/build"
41+
"github.com/kubernetes-sigs/kernel-module-management/internal/build/pod"
4342
"github.com/kubernetes-sigs/kernel-module-management/internal/cmd"
43+
"github.com/kubernetes-sigs/kernel-module-management/internal/config"
4444
"github.com/kubernetes-sigs/kernel-module-management/internal/constants"
4545
"github.com/kubernetes-sigs/kernel-module-management/internal/daemonset"
4646
"github.com/kubernetes-sigs/kernel-module-management/internal/filter"
@@ -86,6 +86,7 @@ func main() {
8686
}
8787

8888
operatorNamespace := cmd.GetEnvOrFatalError(constants.OperatorNamespaceEnvVar, setupLogger)
89+
workerImage := cmd.GetEnvOrFatalError("RELATED_IMAGES_WORKER", setupLogger)
8990

9091
managed, err := GetBoolEnv("KMM_MANAGED")
9192
if err != nil {
@@ -163,6 +164,17 @@ func main() {
163164
cmd.FatalError(setupLogger, err, "unable to create controller", "name", controllers.ModuleNMCReconcilerName)
164165
}
165166

167+
workerHelper := controllers.NewWorkerHelper(
168+
client,
169+
controllers.NewPodManager(client, workerImage, scheme),
170+
)
171+
172+
ctx := ctrl.SetupSignalHandler()
173+
174+
if err = controllers.NewNodeModulesConfigReconciler(client, workerHelper).SetupWithManager(ctx, mgr); err != nil {
175+
cmd.FatalError(setupLogger, err, "unable to create controller", "name", controllers.NodeModulesConfigReconcilerName)
176+
}
177+
166178
nodeKernelReconciler := controllers.NewNodeKernelReconciler(client, constants.KernelLabel, filterAPI)
167179

168180
if err = nodeKernelReconciler.SetupWithManager(mgr); err != nil {
@@ -210,7 +222,7 @@ func main() {
210222
}
211223

212224
setupLogger.Info("starting manager")
213-
if err = mgr.Start(ctrl.SetupSignalHandler()); err != nil {
225+
if err = mgr.Start(ctx); err != nil {
214226
cmd.FatalError(setupLogger, err, "problem running manager")
215227
}
216228
}

config/crd/bases/kmm.sigs.x-k8s.io_nodemodulesconfigs.yaml

+3
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,13 @@ spec:
149149
type: string
150150
namespace:
151151
type: string
152+
serviceAccountName:
153+
type: string
152154
required:
153155
- config
154156
- name
155157
- namespace
158+
- serviceAccountName
156159
type: object
157160
type: array
158161
type: object

config/manager/kustomization.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,16 @@ kind: Kustomization
44
resources:
55
- ../manager-base
66

7+
patches:
8+
- path: manager_worker_image_patch.yaml
9+
710
images:
811
- name: controller
912
newName: gcr.io/k8s-staging-kmm/kernel-module-management-operator
1013
newTag: latest
14+
- name: worker
15+
newName: gcr.io/k8s-staging-kmm/kernel-module-management-worker
16+
newTag: latest
1117

1218
configMapGenerator:
1319
- files:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: controller-manager
5+
namespace: system
6+
spec:
7+
template:
8+
spec:
9+
containers:
10+
- name: manager
11+
env:
12+
- name: RELATED_IMAGES_WORKER
13+
value: worker

config/rbac/role.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@ rules:
9898
- list
9999
- patch
100100
- watch
101+
- apiGroups:
102+
- kmm.sigs.x-k8s.io
103+
resources:
104+
- nodemodulesconfigs/status
105+
verbs:
106+
- patch
101107
- apiGroups:
102108
- kmm.sigs.x-k8s.io
103109
resources:

controllers/mock_nodemodulesconfig_reconciler.go

+174
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

controllers/module_nmc_reconciler.go

+4
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,10 @@ func (mnrh *moduleNMCReconcilerHelper) enableModuleOnNode(ctx context.Context, m
231231
Modprobe: mld.Modprobe,
232232
}
233233

234+
if tls := mld.RegistryTLS; tls != nil {
235+
moduleConfig.InsecurePull = tls.Insecure || tls.InsecureSkipTLSVerify
236+
}
237+
234238
nmc := &kmmv1beta1.NodeModulesConfig{
235239
ObjectMeta: metav1.ObjectMeta{Name: nodeName},
236240
}

0 commit comments

Comments
 (0)