From 0af5a73bfeb10fc4ccdf20b8d696731ab01ca945 Mon Sep 17 00:00:00 2001 From: Shivkumar Ople Date: Wed, 17 Jun 2026 23:05:27 +0530 Subject: [PATCH] Apply resources to managed init containers Signed-off-by: Shivkumar Ople --- controllers/object_controls.go | 36 ++-- controllers/transforms_test.go | 173 +++++++++++++++++- internal/state/driver_test.go | 30 +++ .../golden/driver-additional-configs.yaml | 7 + .../testdata/golden/driver-full-spec.yaml | 7 + .../golden/driver-gdrcopy-openshift.yaml | 7 + .../state/testdata/golden/driver-gdrcopy.yaml | 7 + .../state/testdata/golden/driver-gds.yaml | 7 + .../testdata/golden/driver-hostnetwork.yaml | 7 + .../state/testdata/golden/driver-minimal.yaml | 7 + .../driver-openshift-drivertoolkit.yaml | 7 + .../testdata/golden/driver-precompiled.yaml | 7 + .../golden/driver-rdma-hostmofed.yaml | 7 + .../state/testdata/golden/driver-rdma.yaml | 7 + .../testdata/golden/driver-secret-env.yaml | 7 + .../driver-vgpu-host-manager-openshift.yaml | 7 + .../golden/driver-vgpu-host-manager.yaml | 7 + .../golden/driver-vgpu-licensing-secret.yaml | 7 + .../golden/driver-vgpu-licensing.yaml | 7 + manifests/state-driver/0500_daemonset.yaml | 3 + 20 files changed, 341 insertions(+), 13 deletions(-) diff --git a/controllers/object_controls.go b/controllers/object_controls.go index 74ebeec78..2713afb57 100644 --- a/controllers/object_controls.go +++ b/controllers/object_controls.go @@ -965,7 +965,7 @@ func TransformGPUDiscoveryPlugin(obj *appsv1.DaemonSet, config *gpuv1.ClusterPol } // apply plugin configuration through ConfigMap if one is provided - err = handleDevicePluginConfig(obj, config) + err = handleDevicePluginConfig(obj, config, config.GPUFeatureDiscovery.Resources) if err != nil { return err } @@ -1016,7 +1016,7 @@ func TransformDCGMExporterService(obj *corev1.Service, config *gpuv1.ClusterPoli // TransformDriver transforms Nvidia driver daemonset with required config as per ClusterPolicy func TransformDriver(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicySpec, n ClusterPolicyController) error { // update driver-manager initContainer - err := transformDriverManagerInitContainer(obj, &config.Driver.Manager, config.Driver.GPUDirectRDMA) + err := transformDriverManagerInitContainer(obj, &config.Driver.Manager, config.Driver.GPUDirectRDMA, config.Driver.Resources) if err != nil { return err } @@ -1094,7 +1094,7 @@ func TransformDriver(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicySpec, n C // TransformVGPUManager transforms NVIDIA vGPU Manager daemonset with required config as per ClusterPolicy func TransformVGPUManager(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicySpec, n ClusterPolicyController) error { // update k8s-driver-manager initContainer - err := transformDriverManagerInitContainer(obj, &config.VGPUManager.DriverManager, nil) + err := transformDriverManagerInitContainer(obj, &config.VGPUManager.DriverManager, nil, config.VGPUManager.Resources) if err != nil { return fmt.Errorf("failed to transform k8s-driver-manager initContainer for vGPU Manager: %v", err) } @@ -1594,7 +1594,7 @@ func TransformDevicePlugin(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicySpe } // apply plugin configuration through ConfigMap if one is provided - err = handleDevicePluginConfig(obj, config) + err = handleDevicePluginConfig(obj, config, config.DevicePlugin.Resources) if err != nil { return err } @@ -1653,6 +1653,7 @@ func TransformMPSControlDaemon(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolic if initCtr := findContainerByName(obj.Spec.Template.Spec.InitContainers, "mps-control-daemon-mounts"); initCtr != nil { initCtr.Image = image initCtr.ImagePullPolicy = imagePullPolicy + applyResourceRequirements(initCtr, config.DevicePlugin.Resources) } // update image path and imagePullPolicy for main container @@ -1678,7 +1679,7 @@ func TransformMPSControlDaemon(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolic } // apply plugin configuration through ConfigMap if one is provided - err = handleDevicePluginConfig(obj, config) + err = handleDevicePluginConfig(obj, config, config.DevicePlugin.Resources) if err != nil { return err } @@ -2101,7 +2102,7 @@ func TransformMIGManager(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicySpec, // TransformVFIOManager transforms VFIO-PCI Manager daemonset with required config as per ClusterPolicy func TransformVFIOManager(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicySpec, n ClusterPolicyController) error { // update k8s-driver-manager initContainer - err := transformDriverManagerInitContainer(obj, &config.VFIOManager.DriverManager, nil) + err := transformDriverManagerInitContainer(obj, &config.VFIOManager.DriverManager, nil, config.VFIOManager.Resources) if err != nil { return fmt.Errorf("failed to transform k8s-driver-manager initContainer for VFIO Manager: %v", err) } @@ -2279,6 +2280,14 @@ func transformValidatorSecurityContext(ctr *corev1.Container) { ctr.SecurityContext.RunAsUser = rootUID } +func applyResourceRequirements(ctr *corev1.Container, resources *gpuv1.ResourceRequirements) { + if resources == nil { + return + } + ctr.Resources.Requests = resources.Requests + ctr.Resources.Limits = resources.Limits +} + // TransformValidator transforms nvidia-operator-validator daemonset with required config as per ClusterPolicy func TransformValidator(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicySpec, n ClusterPolicyController) error { err := TransformValidatorShared(obj, config) @@ -2370,8 +2379,7 @@ func TransformValidatorShared(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicy if config.Validator.Resources != nil { // apply resource limits to all containers for i := range obj.Spec.Template.Spec.Containers { - obj.Spec.Template.Spec.Containers[i].Resources.Requests = config.Validator.Resources.Requests - obj.Spec.Template.Spec.Containers[i].Resources.Limits = config.Validator.Resources.Limits + applyResourceRequirements(&obj.Spec.Template.Spec.Containers[i], config.Validator.Resources) } } // set arguments if specified for validator container @@ -2407,6 +2415,7 @@ func TransformValidatorComponent(config *gpuv1.ClusterPolicySpec, podSpec *corev if config.Validator.ImagePullPolicy != "" { podSpec.InitContainers[i].ImagePullPolicy = gpuv1.ImagePullPolicy(config.Validator.ImagePullPolicy) } + applyResourceRequirements(&podSpec.InitContainers[i], config.Validator.Resources) // update the security context for the validator container transformValidatorSecurityContext(&podSpec.InitContainers[i]) @@ -2783,7 +2792,7 @@ func addSharedMountsForPluginConfig(container *corev1.Container, config *gpuv1.D } // apply spec changes to make custom configurations provided via a ConfigMap available to all containers -func handleDevicePluginConfig(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicySpec) error { +func handleDevicePluginConfig(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicySpec, resources *gpuv1.ResourceRequirements) error { if !isCustomPluginConfigSet(config.DevicePlugin.Config) { // remove config-manager-init container for i, initContainer := range obj.Spec.Template.Spec.InitContainers { @@ -2830,7 +2839,7 @@ func handleDevicePluginConfig(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicy obj.Spec.Template.Spec.Volumes = append(obj.Spec.Template.Spec.Volumes, createEmptyDirVolume("config")) // apply env/volume changes to initContainer - err := transformConfigManagerInitContainer(obj, config) + err := transformConfigManagerInitContainer(obj, config, resources) if err != nil { return err } @@ -2842,7 +2851,7 @@ func handleDevicePluginConfig(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicy return nil } -func transformConfigManagerInitContainer(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicySpec) error { +func transformConfigManagerInitContainer(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicySpec, resources *gpuv1.ResourceRequirements) error { initContainer := findContainerByName(obj.Spec.Template.Spec.InitContainers, "config-manager-init") if initContainer == nil { // config-manager-init container is not added to the spec, this is a no-op @@ -2856,6 +2865,7 @@ func transformConfigManagerInitContainer(obj *appsv1.DaemonSet, config *gpuv1.Cl if config.DevicePlugin.ImagePullPolicy != "" { initContainer.ImagePullPolicy = gpuv1.ImagePullPolicy(config.DevicePlugin.ImagePullPolicy) } + applyResourceRequirements(initContainer, resources) // setup env setContainerEnv(initContainer, "DEFAULT_CONFIG", config.DevicePlugin.Config.Default) setContainerEnv(initContainer, "FALLBACK_STRATEGIES", "empty") @@ -2894,7 +2904,7 @@ func transformConfigManagerSidecarContainer(obj *appsv1.DaemonSet, config *gpuv1 return nil } -func transformDriverManagerInitContainer(obj *appsv1.DaemonSet, driverManagerSpec *gpuv1.DriverManagerSpec, rdmaSpec *gpuv1.GPUDirectRDMASpec) error { +func transformDriverManagerInitContainer(obj *appsv1.DaemonSet, driverManagerSpec *gpuv1.DriverManagerSpec, rdmaSpec *gpuv1.GPUDirectRDMASpec, resources *gpuv1.ResourceRequirements) error { container := findContainerByName(obj.Spec.Template.Spec.InitContainers, "k8s-driver-manager") if container == nil { @@ -2910,6 +2920,7 @@ func transformDriverManagerInitContainer(obj *appsv1.DaemonSet, driverManagerSpe if driverManagerSpec.ImagePullPolicy != "" { container.ImagePullPolicy = gpuv1.ImagePullPolicy(driverManagerSpec.ImagePullPolicy) } + applyResourceRequirements(container, resources) if rdmaSpec != nil && rdmaSpec.IsEnabled() { setContainerEnv(container, GPUDirectRDMAEnabledEnvName, "true") @@ -3899,6 +3910,7 @@ func transformValidationInitContainer(obj *appsv1.DaemonSet, config *gpuv1.Clust if config.Validator.ImagePullPolicy != "" { obj.Spec.Template.Spec.InitContainers[i].ImagePullPolicy = gpuv1.ImagePullPolicy(config.Validator.ImagePullPolicy) } + applyResourceRequirements(&obj.Spec.Template.Spec.InitContainers[i], config.Validator.Resources) // update the security context for the validator container transformValidatorSecurityContext(&obj.Spec.Template.Spec.InitContainers[i]) } diff --git a/controllers/transforms_test.go b/controllers/transforms_test.go index 9a0881072..5c90420df 100644 --- a/controllers/transforms_test.go +++ b/controllers/transforms_test.go @@ -1220,6 +1220,17 @@ func TestTransformDevicePlugin(t *testing.T) { } func TestTransformMPSControlDaemon(t *testing.T) { + resources := corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("500m"), + corev1.ResourceMemory: resource.MustParse("200Mi"), + }, + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("100m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + }, + } + testCases := []struct { description string daemonset Daemonset @@ -1241,6 +1252,10 @@ func TestTransformMPSControlDaemon(t *testing.T) { ImagePullPolicy: string(corev1.PullAlways), ImagePullSecrets: []string{"secret"}, MPS: &gpuv1.MPSConfig{Root: "/var/mps"}, + Resources: &gpuv1.ResourceRequirements{ + Limits: resources.Limits, + Requests: resources.Requests, + }, }, }, expectedDaemonset: NewDaemonset(). @@ -1248,11 +1263,13 @@ func TestTransformMPSControlDaemon(t *testing.T) { Name: "mps-control-daemon-mounts", Image: "nvcr.io/mps:latest", ImagePullPolicy: corev1.PullAlways, + Resources: resources, }). WithContainer(corev1.Container{ Name: "mps-control-daemon-ctr", Image: "nvcr.io/mps:latest", ImagePullPolicy: corev1.PullAlways, + Resources: resources, Env: []corev1.EnvVar{ {Name: "NVIDIA_MIG_MONITOR_DEVICES", Value: "all"}, }, @@ -2074,6 +2091,7 @@ func TestTransformVFIOManager(t *testing.T) { Image: "nvcr.io/nvidia/cloud-native/k8s-driver-manager:v1.0.0", ImagePullPolicy: corev1.PullIfNotPresent, Env: mockEnvCore, + Resources: resources, }). WithPullSecret(secret), }, @@ -2227,6 +2245,17 @@ func TestTransformVGPUDeviceManager(t *testing.T) { } func TestTransformValidationInitContainer(t *testing.T) { + resources := corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("500m"), + corev1.ResourceMemory: resource.MustParse("200Mi"), + }, + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("100m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + }, + } + testCases := []struct { description string ds Daemonset @@ -2246,6 +2275,10 @@ func TestTransformValidationInitContainer(t *testing.T) { Version: "v1.0.0", ImagePullPolicy: "IfNotPresent", ImagePullSecrets: []string{"pull-secret"}, + Resources: &gpuv1.ResourceRequirements{ + Limits: resources.Limits, + Requests: resources.Requests, + }, Driver: gpuv1.DriverValidatorSpec{ Env: []gpuv1.EnvVar{{Name: "foo", Value: "bar"}}, }, @@ -2259,6 +2292,7 @@ func TestTransformValidationInitContainer(t *testing.T) { Image: "nvcr.io/nvidia/cloud-native/gpu-operator-validator:v1.0.0", ImagePullPolicy: corev1.PullIfNotPresent, Env: []corev1.EnvVar{{Name: "foo", Value: "bar"}}, + Resources: resources, SecurityContext: &corev1.SecurityContext{ RunAsUser: rootUID, }, @@ -2267,6 +2301,7 @@ func TestTransformValidationInitContainer(t *testing.T) { Image: "nvcr.io/nvidia/cloud-native/gpu-operator-validator:v1.0.0", ImagePullPolicy: corev1.PullIfNotPresent, Env: []corev1.EnvVar{{Name: "foo", Value: "bar"}}, + Resources: resources, SecurityContext: &corev1.SecurityContext{ RunAsUser: rootUID, }, @@ -2289,7 +2324,69 @@ func newBoolPtr(b bool) *bool { return boolPtr } +func TestTransformConfigManagerInitContainerWithResources(t *testing.T) { + resources := corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("500m"), + corev1.ResourceMemory: resource.MustParse("200Mi"), + }, + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("100m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + }, + } + ds := NewDaemonset(). + WithInitContainer(corev1.Container{Name: "config-manager-init"}). + WithInitContainer(corev1.Container{Name: "dummy"}) + cpSpec := &gpuv1.ClusterPolicySpec{ + DevicePlugin: gpuv1.DevicePluginSpec{ + Repository: "nvcr.io/nvidia", + Image: "k8s-device-plugin", + Version: "v1.0.0", + ImagePullPolicy: "IfNotPresent", + Config: &gpuv1.DevicePluginConfig{ + Name: "plugin-config", + Default: "default", + }, + }, + } + expectedDs := NewDaemonset(). + WithInitContainer(corev1.Container{ + Name: "config-manager-init", + Image: "nvcr.io/nvidia/k8s-device-plugin:v1.0.0", + ImagePullPolicy: corev1.PullIfNotPresent, + Resources: resources, + Env: []corev1.EnvVar{ + {Name: "DEFAULT_CONFIG", Value: "default"}, + {Name: "FALLBACK_STRATEGIES", Value: "empty"}, + }, + VolumeMounts: []corev1.VolumeMount{ + {Name: "config", MountPath: "/config"}, + {Name: "plugin-config", MountPath: "/available-configs"}, + }, + }). + WithInitContainer(corev1.Container{Name: "dummy"}) + + err := transformConfigManagerInitContainer(ds.DaemonSet, cpSpec, &gpuv1.ResourceRequirements{ + Limits: resources.Limits, + Requests: resources.Requests, + }) + require.NoError(t, err) + require.EqualValues(t, expectedDs, ds) +} + func TestTransformDriverManagerInitContainer(t *testing.T) { + resources := corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("500m"), + corev1.ResourceMemory: resource.MustParse("200Mi"), + }, + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("100m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + }, + } + testCases := []struct { description string ds Daemonset @@ -2315,6 +2412,10 @@ func TestTransformDriverManagerInitContainer(t *testing.T) { Enabled: newBoolPtr(true), UseHostMOFED: newBoolPtr(true), }, + Resources: &gpuv1.ResourceRequirements{ + Limits: resources.Limits, + Requests: resources.Requests, + }, }, }, expectedDs: NewDaemonset().WithInitContainer(corev1.Container{ @@ -2326,13 +2427,14 @@ func TestTransformDriverManagerInitContainer(t *testing.T) { {Name: UseHostMOFEDEnvName, Value: "true"}, {Name: "foo", Value: "bar"}, }, + Resources: resources, }).WithInitContainer(corev1.Container{Name: "dummy"}).WithPullSecret("pull-secret"), }, } for _, tc := range testCases { t.Run(tc.description, func(t *testing.T) { - err := transformDriverManagerInitContainer(tc.ds.DaemonSet, &tc.cpSpec.Driver.Manager, tc.cpSpec.Driver.GPUDirectRDMA) + err := transformDriverManagerInitContainer(tc.ds.DaemonSet, &tc.cpSpec.Driver.Manager, tc.cpSpec.Driver.GPUDirectRDMA, tc.cpSpec.Driver.Resources) require.NoError(t, err) require.EqualValues(t, tc.expectedDs, tc.ds) }) @@ -2709,6 +2811,52 @@ func TestTransformValidatorComponent(t *testing.T) { } } +func TestTransformValidatorComponentWithResources(t *testing.T) { + resources := corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("500m"), + corev1.ResourceMemory: resource.MustParse("200Mi"), + }, + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("500m"), + corev1.ResourceMemory: resource.MustParse("200Mi"), + }, + } + + cpSpec := &gpuv1.ClusterPolicySpec{ + Validator: gpuv1.ValidatorSpec{ + Repository: "nvcr.io/nvidia/cloud-native", + Image: "gpu-operator-validator", + Version: "v1.0.0", + ImagePullPolicy: "IfNotPresent", + Resources: &gpuv1.ResourceRequirements{ + Limits: resources.Limits, + Requests: resources.Requests, + }, + }, + } + + testCases := []struct { + component string + containerName string + }{ + {component: "driver", containerName: "driver-validation"}, + {component: "toolkit", containerName: "toolkit-validation"}, + {component: "cuda", containerName: "cuda-validation"}, + {component: "plugin", containerName: "plugin-validation"}, + } + + for _, tc := range testCases { + t.Run(tc.containerName, func(t *testing.T) { + pod := NewPod().WithInitContainer(corev1.Container{Name: tc.containerName}) + err := TransformValidatorComponent(cpSpec, &pod.Spec, tc.component) + require.NoError(t, err) + require.Len(t, pod.Spec.InitContainers, 1) + require.EqualValues(t, resources, pod.Spec.InitContainers[0].Resources) + }) + } +} + func TestTransformValidator(t *testing.T) { testCases := []struct { description string @@ -3667,6 +3815,10 @@ func TestTransformDriverWithResources(t *testing.T) { }).WithInitContainer(corev1.Container{ Name: "k8s-driver-manager", Image: "nvcr.io/nvidia/cloud-native/k8s-driver-manager:v0.8.0", + Resources: corev1.ResourceRequirements{ + Requests: resources.Requests, + Limits: resources.Limits, + }, Env: []corev1.EnvVar{ { Name: "DRIVER_CONFIG_DIGEST", @@ -4009,6 +4161,16 @@ func TestTransformVGPUManager(t *testing.T) { } mockClient := fake.NewFakeClient(node, kernelModuleConfigMap) + resources := corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("500m"), + corev1.ResourceMemory: resource.MustParse("200Mi"), + }, + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("100m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + }, + } testCases := []struct { description string @@ -4028,6 +4190,10 @@ func TestTransformVGPUManager(t *testing.T) { Image: "vgpu-manager", Version: "550.90.07", ImagePullPolicy: "IfNotPresent", + Resources: &gpuv1.ResourceRequirements{ + Limits: resources.Limits, + Requests: resources.Requests, + }, DriverManager: gpuv1.DriverManagerSpec{ Repository: "nvcr.io/nvidia/cloud-native", Image: "k8s-driver-manager", @@ -4061,6 +4227,7 @@ func TestTransformVGPUManager(t *testing.T) { container := findContainerByName(tc.daemonset.Spec.Template.Spec.Containers, "nvidia-vgpu-manager-ctr") require.NotNil(t, container) require.Len(t, container.VolumeMounts, 1) + require.EqualValues(t, resources, container.Resources) require.Equal(t, corev1.VolumeMount{ Name: "vgpu-kernel-module-config", ReadOnly: true, @@ -4085,6 +4252,10 @@ func TestTransformVGPUManager(t *testing.T) { }, }, }, tc.daemonset.Spec.Template.Spec.Volumes[0]) + + driverManager := findContainerByName(tc.daemonset.Spec.Template.Spec.InitContainers, "k8s-driver-manager") + require.NotNil(t, driverManager) + require.EqualValues(t, resources, driverManager.Resources) }) } } diff --git a/internal/state/driver_test.go b/internal/state/driver_test.go index 572f2c7a6..1da17e304 100644 --- a/internal/state/driver_test.go +++ b/internal/state/driver_test.go @@ -149,6 +149,36 @@ func TestDriverRenderMinimal(t *testing.T) { require.Equal(t, string(o), actual) } +func TestDriverManagerResources(t *testing.T) { + state, err := NewStateDriver(nil, "", nil, manifestDir) + require.NoError(t, err) + stateDriver, ok := state.(*stateDriver) + require.True(t, ok) + + renderData := getMinimalDriverRenderData() + objs, err := stateDriver.renderer.RenderObjects( + &render.TemplatingData{ + Data: renderData, + }) + require.NoError(t, err) + + ds, err := getDaemonsetFromObjects(objs) + require.NoError(t, err) + + var driverManager *corev1.Container + for i := range ds.Spec.Template.Spec.InitContainers { + if ds.Spec.Template.Spec.InitContainers[i].Name == "k8s-driver-manager" { + driverManager = &ds.Spec.Template.Spec.InitContainers[i] + break + } + } + require.NotNil(t, driverManager) + require.EqualValues(t, corev1.ResourceRequirements{ + Requests: renderData.Driver.Spec.Resources.Requests, + Limits: renderData.Driver.Spec.Resources.Limits, + }, driverManager.Resources) +} + func TestDriverHostSysDevicesSystemVolumeUsesStableParentDirectory(t *testing.T) { state, err := NewStateDriver(nil, "", nil, manifestDir) require.Nil(t, err) diff --git a/internal/state/testdata/golden/driver-additional-configs.yaml b/internal/state/testdata/golden/driver-additional-configs.yaml index ec1050d92..8ab73e825 100644 --- a/internal/state/testdata/golden/driver-additional-configs.yaml +++ b/internal/state/testdata/golden/driver-additional-configs.yaml @@ -297,6 +297,13 @@ spec: image: nvcr.io/nvidia/cloud-native/k8s-driver-manager:devel imagePullPolicy: IfNotPresent name: k8s-driver-manager + resources: + limits: + cpu: 500m + memory: 300Mi + requests: + cpu: 200m + memory: 100Mi securityContext: privileged: true volumeMounts: diff --git a/internal/state/testdata/golden/driver-full-spec.yaml b/internal/state/testdata/golden/driver-full-spec.yaml index 7400e6420..ac60cba8d 100644 --- a/internal/state/testdata/golden/driver-full-spec.yaml +++ b/internal/state/testdata/golden/driver-full-spec.yaml @@ -314,6 +314,13 @@ spec: image: nvcr.io/nvidia/cloud-native/k8s-driver-manager:devel imagePullPolicy: Always name: k8s-driver-manager + resources: + limits: + cpu: 500m + memory: 200Mi + requests: + cpu: 200m + memory: 100Mi securityContext: privileged: true volumeMounts: diff --git a/internal/state/testdata/golden/driver-gdrcopy-openshift.yaml b/internal/state/testdata/golden/driver-gdrcopy-openshift.yaml index 23e62a5d5..55333dfa9 100644 --- a/internal/state/testdata/golden/driver-gdrcopy-openshift.yaml +++ b/internal/state/testdata/golden/driver-gdrcopy-openshift.yaml @@ -470,6 +470,13 @@ spec: image: nvcr.io/nvidia/cloud-native/k8s-driver-manager:devel imagePullPolicy: IfNotPresent name: k8s-driver-manager + resources: + limits: + cpu: 500m + memory: 300Mi + requests: + cpu: 200m + memory: 100Mi securityContext: privileged: true volumeMounts: diff --git a/internal/state/testdata/golden/driver-gdrcopy.yaml b/internal/state/testdata/golden/driver-gdrcopy.yaml index 433ef59a6..4891c81db 100644 --- a/internal/state/testdata/golden/driver-gdrcopy.yaml +++ b/internal/state/testdata/golden/driver-gdrcopy.yaml @@ -351,6 +351,13 @@ spec: image: nvcr.io/nvidia/cloud-native/k8s-driver-manager:devel imagePullPolicy: IfNotPresent name: k8s-driver-manager + resources: + limits: + cpu: 500m + memory: 300Mi + requests: + cpu: 200m + memory: 100Mi securityContext: privileged: true volumeMounts: diff --git a/internal/state/testdata/golden/driver-gds.yaml b/internal/state/testdata/golden/driver-gds.yaml index 36a510e81..e90b1f72d 100644 --- a/internal/state/testdata/golden/driver-gds.yaml +++ b/internal/state/testdata/golden/driver-gds.yaml @@ -351,6 +351,13 @@ spec: image: nvcr.io/nvidia/cloud-native/k8s-driver-manager:devel imagePullPolicy: IfNotPresent name: k8s-driver-manager + resources: + limits: + cpu: 500m + memory: 300Mi + requests: + cpu: 200m + memory: 100Mi securityContext: privileged: true volumeMounts: diff --git a/internal/state/testdata/golden/driver-hostnetwork.yaml b/internal/state/testdata/golden/driver-hostnetwork.yaml index 43c22906f..88e5fdb91 100644 --- a/internal/state/testdata/golden/driver-hostnetwork.yaml +++ b/internal/state/testdata/golden/driver-hostnetwork.yaml @@ -290,6 +290,13 @@ spec: image: nvcr.io/nvidia/cloud-native/k8s-driver-manager:devel imagePullPolicy: IfNotPresent name: k8s-driver-manager + resources: + limits: + cpu: 500m + memory: 300Mi + requests: + cpu: 200m + memory: 100Mi securityContext: privileged: true volumeMounts: diff --git a/internal/state/testdata/golden/driver-minimal.yaml b/internal/state/testdata/golden/driver-minimal.yaml index 4ff360b3e..a3c371322 100644 --- a/internal/state/testdata/golden/driver-minimal.yaml +++ b/internal/state/testdata/golden/driver-minimal.yaml @@ -288,6 +288,13 @@ spec: image: nvcr.io/nvidia/cloud-native/k8s-driver-manager:devel imagePullPolicy: IfNotPresent name: k8s-driver-manager + resources: + limits: + cpu: 500m + memory: 300Mi + requests: + cpu: 200m + memory: 100Mi securityContext: privileged: true volumeMounts: diff --git a/internal/state/testdata/golden/driver-openshift-drivertoolkit.yaml b/internal/state/testdata/golden/driver-openshift-drivertoolkit.yaml index eceb052ad..3a02e62db 100644 --- a/internal/state/testdata/golden/driver-openshift-drivertoolkit.yaml +++ b/internal/state/testdata/golden/driver-openshift-drivertoolkit.yaml @@ -406,6 +406,13 @@ spec: image: nvcr.io/nvidia/cloud-native/k8s-driver-manager:devel imagePullPolicy: IfNotPresent name: k8s-driver-manager + resources: + limits: + cpu: 500m + memory: 300Mi + requests: + cpu: 200m + memory: 100Mi securityContext: privileged: true volumeMounts: diff --git a/internal/state/testdata/golden/driver-precompiled.yaml b/internal/state/testdata/golden/driver-precompiled.yaml index 5ca79c0c8..81759a817 100644 --- a/internal/state/testdata/golden/driver-precompiled.yaml +++ b/internal/state/testdata/golden/driver-precompiled.yaml @@ -290,6 +290,13 @@ spec: image: nvcr.io/nvidia/cloud-native/k8s-driver-manager:devel imagePullPolicy: IfNotPresent name: k8s-driver-manager + resources: + limits: + cpu: 500m + memory: 300Mi + requests: + cpu: 200m + memory: 100Mi securityContext: privileged: true volumeMounts: diff --git a/internal/state/testdata/golden/driver-rdma-hostmofed.yaml b/internal/state/testdata/golden/driver-rdma-hostmofed.yaml index 737965fbc..914d0eb3c 100644 --- a/internal/state/testdata/golden/driver-rdma-hostmofed.yaml +++ b/internal/state/testdata/golden/driver-rdma-hostmofed.yaml @@ -371,6 +371,13 @@ spec: image: nvcr.io/nvidia/cloud-native/k8s-driver-manager:devel imagePullPolicy: IfNotPresent name: k8s-driver-manager + resources: + limits: + cpu: 500m + memory: 300Mi + requests: + cpu: 200m + memory: 100Mi securityContext: privileged: true volumeMounts: diff --git a/internal/state/testdata/golden/driver-rdma.yaml b/internal/state/testdata/golden/driver-rdma.yaml index 87fc07437..91c339381 100644 --- a/internal/state/testdata/golden/driver-rdma.yaml +++ b/internal/state/testdata/golden/driver-rdma.yaml @@ -365,6 +365,13 @@ spec: image: nvcr.io/nvidia/cloud-native/k8s-driver-manager:devel imagePullPolicy: IfNotPresent name: k8s-driver-manager + resources: + limits: + cpu: 500m + memory: 300Mi + requests: + cpu: 200m + memory: 100Mi securityContext: privileged: true volumeMounts: diff --git a/internal/state/testdata/golden/driver-secret-env.yaml b/internal/state/testdata/golden/driver-secret-env.yaml index 99266d999..3940e775f 100644 --- a/internal/state/testdata/golden/driver-secret-env.yaml +++ b/internal/state/testdata/golden/driver-secret-env.yaml @@ -383,6 +383,13 @@ spec: image: nvcr.io/nvidia/cloud-native/k8s-driver-manager:devel imagePullPolicy: IfNotPresent name: k8s-driver-manager + resources: + limits: + cpu: 500m + memory: 300Mi + requests: + cpu: 200m + memory: 100Mi securityContext: privileged: true volumeMounts: diff --git a/internal/state/testdata/golden/driver-vgpu-host-manager-openshift.yaml b/internal/state/testdata/golden/driver-vgpu-host-manager-openshift.yaml index 12729f37c..7eef073fb 100644 --- a/internal/state/testdata/golden/driver-vgpu-host-manager-openshift.yaml +++ b/internal/state/testdata/golden/driver-vgpu-host-manager-openshift.yaml @@ -368,6 +368,13 @@ spec: image: nvcr.io/nvidia/cloud-native/k8s-driver-manager:devel imagePullPolicy: IfNotPresent name: k8s-driver-manager + resources: + limits: + cpu: 500m + memory: 300Mi + requests: + cpu: 200m + memory: 100Mi securityContext: privileged: true volumeMounts: diff --git a/internal/state/testdata/golden/driver-vgpu-host-manager.yaml b/internal/state/testdata/golden/driver-vgpu-host-manager.yaml index aa23b9299..69d9515e1 100644 --- a/internal/state/testdata/golden/driver-vgpu-host-manager.yaml +++ b/internal/state/testdata/golden/driver-vgpu-host-manager.yaml @@ -275,6 +275,13 @@ spec: image: nvcr.io/nvidia/cloud-native/k8s-driver-manager:devel imagePullPolicy: IfNotPresent name: k8s-driver-manager + resources: + limits: + cpu: 500m + memory: 300Mi + requests: + cpu: 200m + memory: 100Mi securityContext: privileged: true volumeMounts: diff --git a/internal/state/testdata/golden/driver-vgpu-licensing-secret.yaml b/internal/state/testdata/golden/driver-vgpu-licensing-secret.yaml index c6bf3d4a5..0e6210d0c 100644 --- a/internal/state/testdata/golden/driver-vgpu-licensing-secret.yaml +++ b/internal/state/testdata/golden/driver-vgpu-licensing-secret.yaml @@ -294,6 +294,13 @@ spec: image: nvcr.io/nvidia/cloud-native/k8s-driver-manager:devel imagePullPolicy: IfNotPresent name: k8s-driver-manager + resources: + limits: + cpu: 500m + memory: 300Mi + requests: + cpu: 200m + memory: 100Mi securityContext: privileged: true volumeMounts: diff --git a/internal/state/testdata/golden/driver-vgpu-licensing.yaml b/internal/state/testdata/golden/driver-vgpu-licensing.yaml index 8ae457f73..a9498afd5 100644 --- a/internal/state/testdata/golden/driver-vgpu-licensing.yaml +++ b/internal/state/testdata/golden/driver-vgpu-licensing.yaml @@ -294,6 +294,13 @@ spec: image: nvcr.io/nvidia/cloud-native/k8s-driver-manager:devel imagePullPolicy: IfNotPresent name: k8s-driver-manager + resources: + limits: + cpu: 500m + memory: 300Mi + requests: + cpu: 200m + memory: 100Mi securityContext: privileged: true volumeMounts: diff --git a/manifests/state-driver/0500_daemonset.yaml b/manifests/state-driver/0500_daemonset.yaml index a8ff6084c..8fc46657f 100644 --- a/manifests/state-driver/0500_daemonset.yaml +++ b/manifests/state-driver/0500_daemonset.yaml @@ -180,6 +180,9 @@ spec: {{- end }} securityContext: privileged: true + {{- if .Driver.Spec.Resources }} + resources: {{ .Driver.Spec.Resources | yaml | nindent 12 }} + {{- end }} volumeMounts: - name: run-nvidia mountPath: /run/nvidia