Skip to content

Commit 7851a25

Browse files
committed
Register DRA reconciler with manager
Wire the DRA reconciler into the operator manager: - Add resourcev1.AddToScheme to register the DRA resource API - Construct and register DRAReconciler via SetupWithManager - Add RBAC annotation for resource.k8s.io/deviceclasses - Add DRA module count to the existing metrics sweep - Regenerate RBAC manifests and metrics mock
1 parent 6028ad1 commit 7851a25

7 files changed

Lines changed: 71 additions & 11 deletions

File tree

cmd/manager/main.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import (
4242
"github.com/kubernetes-sigs/kernel-module-management/internal/metrics"
4343
"github.com/kubernetes-sigs/kernel-module-management/internal/module"
4444
"github.com/kubernetes-sigs/kernel-module-management/internal/nmc"
45+
resourcev1 "k8s.io/api/resource/v1"
4546
"k8s.io/apimachinery/pkg/runtime"
4647
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
4748
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
@@ -62,6 +63,7 @@ func init() {
6263
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
6364
utilruntime.Must(v1beta1.AddToScheme(scheme))
6465
utilruntime.Must(v1beta2.AddToScheme(scheme))
66+
utilruntime.Must(resourcev1.AddToScheme(scheme))
6567
//+kubebuilder:scaffold:scheme
6668
}
6769

@@ -168,6 +170,11 @@ func main() {
168170
cmd.FatalError(setupLogger, err, "unable to create controller", "name", controllers.DevicePluginPodReconcilerName)
169171
}
170172

173+
drac := controllers.NewDRAReconciler(client, nodeAPI, scheme)
174+
if err = drac.SetupWithManager(mgr); err != nil {
175+
cmd.FatalError(setupLogger, err, "unable to create controller", "name", controllers.DRAReconcilerName)
176+
}
177+
171178
if err = controllers.NewNodeLabelModuleVersionReconciler(client).SetupWithManager(mgr); err != nil {
172179
cmd.FatalError(setupLogger, err, "unable to create controller", "name", controllers.NodeLabelModuleVersionReconcilerName)
173180
}

config/rbac/role.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,15 @@ rules:
117117
- nodemodulesconfigs/status
118118
verbs:
119119
- patch
120+
- apiGroups:
121+
- resource.k8s.io
122+
resources:
123+
- deviceclasses
124+
verbs:
125+
- create
126+
- delete
127+
- get
128+
- list
129+
- patch
130+
- update
131+
- watch

internal/controllers/device_plugin_reconciler.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,10 +323,14 @@ func (dprh *devicePluginReconcilerHelper) setKMMOMetrics(ctx context.Context) {
323323
numModulesWithBuild := 0
324324
numModulesWithSign := 0
325325
numModulesWithDevicePlugin := 0
326+
numModulesWithDRA := 0
326327
for _, mod := range mods.Items {
327328
if mod.Spec.DevicePlugin != nil {
328329
numModulesWithDevicePlugin += 1
329330
}
331+
if mod.Spec.DRA != nil {
332+
numModulesWithDRA += 1
333+
}
330334
if mod.Spec.ModuleLoader != nil {
331335
buildCapable, signCapable := isModuleBuildAndSignCapable(&mod)
332336
if buildCapable {
@@ -349,6 +353,7 @@ func (dprh *devicePluginReconcilerHelper) setKMMOMetrics(ctx context.Context) {
349353
dprh.metricsAPI.SetKMMInClusterBuildNum(numModulesWithBuild)
350354
dprh.metricsAPI.SetKMMInClusterSignNum(numModulesWithSign)
351355
dprh.metricsAPI.SetKMMDevicePluginNum(numModulesWithDevicePlugin)
356+
dprh.metricsAPI.SetKMMDRANum(numModulesWithDRA)
352357
}
353358

354359
func (dprh *devicePluginReconcilerHelper) moduleUpdateDevicePluginStatus(ctx context.Context,

internal/controllers/device_plugin_reconciler_test.go

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ var _ = Describe("DevicePluginReconciler_setKMMOMetrics", func() {
444444
dprh.setKMMOMetrics(ctx)
445445
})
446446

447-
DescribeTable("getting metrics data", func(buildInContainer, buildInKM, signInContainer, signInKM, devicePlugin bool, modprobeArg, modprobeRawArg []string) {
447+
DescribeTable("getting metrics data", func(buildInContainer, buildInKM, signInContainer, signInKM, devicePlugin, dra bool, modprobeArg, modprobeRawArg []string) {
448448
km := kmmv1beta1.KernelMapping{}
449449
mod1 := kmmv1beta1.Module{
450450
ObjectMeta: metav1.ObjectMeta{
@@ -468,6 +468,7 @@ var _ = Describe("DevicePluginReconciler_setKMMOMetrics", func() {
468468
numBuild := 0
469469
numSign := 0
470470
numDevicePlugin := 0
471+
numDRA := 0
471472
if buildInContainer {
472473
mod1.Spec.ModuleLoader.Container.Build = &kmmv1beta1.Build{}
473474
numBuild = 1
@@ -488,6 +489,10 @@ var _ = Describe("DevicePluginReconciler_setKMMOMetrics", func() {
488489
mod1.Spec.DevicePlugin = &kmmv1beta1.DevicePluginSpec{}
489490
numDevicePlugin = 1
490491
}
492+
if dra {
493+
mod1.Spec.DRA = &kmmv1beta1.DRASpec{}
494+
numDRA = 1
495+
}
491496
if modprobeArg != nil {
492497
mod1.Spec.ModuleLoader.Container.Modprobe.Args = &kmmv1beta1.ModprobeArgs{Load: modprobeArg}
493498
}
@@ -514,19 +519,21 @@ var _ = Describe("DevicePluginReconciler_setKMMOMetrics", func() {
514519
mockMetrics.EXPECT().SetKMMInClusterBuildNum(numBuild)
515520
mockMetrics.EXPECT().SetKMMInClusterSignNum(numSign)
516521
mockMetrics.EXPECT().SetKMMDevicePluginNum(numDevicePlugin)
522+
mockMetrics.EXPECT().SetKMMDRANum(numDRA)
517523

518524
dprh.setKMMOMetrics(ctx)
519525
},
520-
Entry("build in container", true, false, false, false, false, nil, nil),
521-
Entry("build in KM", false, true, false, false, false, nil, nil),
522-
Entry("build in container and KM", true, true, false, false, false, nil, nil),
523-
Entry("sign in container", false, false, true, false, false, nil, nil),
524-
Entry("sign in KM", false, false, false, true, false, nil, nil),
525-
Entry("sign in container and KM", false, false, true, true, false, nil, nil),
526-
Entry("device plugin", false, false, false, false, true, nil, nil),
527-
Entry("modprobe args", false, false, false, false, false, []string{"param1", "param2"}, nil),
528-
Entry("modprobe raw args", false, false, false, false, false, nil, []string{"rawparam1", "rawparam2"}),
529-
Entry("altogether", true, true, true, true, true, []string{"param1", "param2"}, []string{"rawparam1", "rawparam2"}),
526+
Entry("build in container", true, false, false, false, false, false, nil, nil),
527+
Entry("build in KM", false, true, false, false, false, false, nil, nil),
528+
Entry("build in container and KM", true, true, false, false, false, false, nil, nil),
529+
Entry("sign in container", false, false, true, false, false, false, nil, nil),
530+
Entry("sign in KM", false, false, false, true, false, false, nil, nil),
531+
Entry("sign in container and KM", false, false, true, true, false, false, nil, nil),
532+
Entry("device plugin", false, false, false, false, true, false, nil, nil),
533+
Entry("dra", false, false, false, false, false, true, nil, nil),
534+
Entry("modprobe args", false, false, false, false, false, false, []string{"param1", "param2"}, nil),
535+
Entry("modprobe raw args", false, false, false, false, false, false, nil, []string{"rawparam1", "rawparam2"}),
536+
Entry("altogether", true, true, true, true, true, true, []string{"param1", "param2"}, []string{"rawparam1", "rawparam2"}),
530537
)
531538
})
532539

internal/controllers/module_reconciler.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import (
5151
//+kubebuilder:rbac:groups=kmm.sigs.x-k8s.io,resources=nodemodulesconfigs/status,verbs=patch
5252
//+kubebuilder:rbac:groups=kmm.sigs.x-k8s.io,resources=preflightvalidations,verbs=get;list;watch;create;update;patch;delete
5353
//+kubebuilder:rbac:groups=kmm.sigs.x-k8s.io,resources=preflightvalidations/status,verbs=get;update;patch
54+
//+kubebuilder:rbac:groups=resource.k8s.io,resources=deviceclasses,verbs=get;list;watch;create;update;patch;delete
5455

5556
const (
5657
ModuleReconcilerName = "ModuleReconciler"

internal/metrics/metrics.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const (
1111
kmmInClusterBuildQuery = "kmm_in_cluster_build_num"
1212
kmmInClusterSignQuery = "kmm_in_cluster_sign_num"
1313
kmmDevicePluginQuery = "kmm_device_plugin_num"
14+
kmmDRAQuery = "kmm_dra_num"
1415
kmmPreflightQuery = "kmm_preflight_num"
1516
kmmModprobeArgsQuery = "kmm_modprobe_args"
1617
kmmModprobeRawArgsQuery = "kmm_modprobe_raw_args"
@@ -25,6 +26,7 @@ type Metrics interface {
2526
SetKMMInClusterBuildNum(value int)
2627
SetKMMInClusterSignNum(value int)
2728
SetKMMDevicePluginNum(value int)
29+
SetKMMDRANum(value int)
2830
SetKMMPreflightsNum(value int)
2931
SetKMMModprobeArgs(modName, namespace, modprobeArgs string)
3032
SetKMMModprobeRawArgs(modName, namespace, modprobeArgs string)
@@ -35,6 +37,7 @@ type metrics struct {
3537
kmmInClusterBuildNum prometheus.Gauge
3638
kmmInClusterSignNum prometheus.Gauge
3739
kmmDevicePluginResourcesNum prometheus.Gauge
40+
kmmDRAResourcesNum prometheus.Gauge
3841
kmmPreflightResourceNum prometheus.Gauge
3942
kmmModprobeArgs *prometheus.GaugeVec
4043
kmmModprobeRawArgs *prometheus.GaugeVec
@@ -70,6 +73,13 @@ func New() Metrics {
7073
},
7174
)
7275

76+
kmmDRAResourcesNum := prometheus.NewGauge(
77+
prometheus.GaugeOpts{
78+
Name: kmmDRAQuery,
79+
Help: "Number of existing KMMO Modules with DRA defined",
80+
},
81+
)
82+
7383
kmmPreflightResourceNum := prometheus.NewGauge(
7484
prometheus.GaugeOpts{
7585
Name: kmmPreflightQuery,
@@ -98,6 +108,7 @@ func New() Metrics {
98108
kmmInClusterBuildNum: kmmInClusterBuildNum,
99109
kmmInClusterSignNum: kmmInClusterSignNum,
100110
kmmDevicePluginResourcesNum: kmmDevicePluginResourcesNum,
111+
kmmDRAResourcesNum: kmmDRAResourcesNum,
101112
kmmPreflightResourceNum: kmmPreflightResourceNum,
102113
kmmModprobeArgs: kmmModprobeArgs,
103114
kmmModprobeRawArgs: kmmModprobeRawArgs,
@@ -110,6 +121,7 @@ func (m *metrics) Register() {
110121
m.kmmInClusterBuildNum,
111122
m.kmmInClusterSignNum,
112123
m.kmmDevicePluginResourcesNum,
124+
m.kmmDRAResourcesNum,
113125
m.kmmPreflightResourceNum,
114126
m.kmmModprobeArgs,
115127
)
@@ -131,6 +143,10 @@ func (m *metrics) SetKMMDevicePluginNum(value int) {
131143
m.kmmDevicePluginResourcesNum.Set(float64(value))
132144
}
133145

146+
func (m *metrics) SetKMMDRANum(value int) {
147+
m.kmmDRAResourcesNum.Set(float64(value))
148+
}
149+
134150
func (m *metrics) SetKMMPreflightsNum(value int) {
135151
m.kmmPreflightResourceNum.Set(float64(value))
136152
}

internal/metrics/mock_metrics_api.go

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)