Unverified Commit 99199f49 authored by Dmitry Tokarev's avatar Dmitry Tokarev Committed by GitHub
Browse files

fix(operator): handle GPU resources in requests, not just limits (#8005)


Signed-off-by: default avatarDmitry Tokarev <dtokarev@nvidia.com>
Co-authored-by: default avatarClaude Opus 4.6 (1M context) <noreply@anthropic.com>
parent debda332
......@@ -593,6 +593,16 @@ func GetResourcesConfig(resources *v1alpha1.Resources) (*corev1.ResourceRequirem
}
currentResources.Requests[corev1.ResourceMemory] = q
}
if resources.Requests.GPU != "" {
q, err := resource.ParseQuantity(resources.Requests.GPU)
if err != nil {
return nil, fmt.Errorf("parse requests gpu quantity: %w", err)
}
if currentResources.Requests == nil {
currentResources.Requests = make(corev1.ResourceList)
}
currentResources.Requests[getGPUResourceName(resources.Requests)] = q
}
for k, v := range resources.Requests.Custom {
q, err := resource.ParseQuantity(v)
if err != nil {
......
......@@ -646,11 +646,13 @@ func TestCopySpec(t *testing.T) {
func TestGetResourcesConfig(t *testing.T) {
tests := []struct {
name string
resources *v1alpha1.Resources
expectedGPULimit corev1.ResourceName
expectedGPUValue string
expectError bool
name string
resources *v1alpha1.Resources
expectedGPULimit corev1.ResourceName
expectedGPUValue string
expectedGPURequest corev1.ResourceName
expectedGPUReqVal string
expectError bool
}{
{
name: "limits.gpu defined with no gpuType",
......@@ -675,6 +677,45 @@ func TestGetResourcesConfig(t *testing.T) {
expectedGPUValue: "8",
expectError: false,
},
{
name: "requests.gpu defined with no gpuType",
resources: &v1alpha1.Resources{
Requests: &v1alpha1.ResourceItem{
GPU: "4",
},
},
expectedGPURequest: corev1.ResourceName(consts.KubeResourceGPUNvidia),
expectedGPUReqVal: "4",
expectError: false,
},
{
name: "requests.gpu defined with custom gpuType",
resources: &v1alpha1.Resources{
Requests: &v1alpha1.ResourceItem{
GPU: "8",
GPUType: "gpu.custom-type.com/test",
},
},
expectedGPURequest: corev1.ResourceName("gpu.custom-type.com/test"),
expectedGPUReqVal: "8",
expectError: false,
},
{
name: "both limits.gpu and requests.gpu defined",
resources: &v1alpha1.Resources{
Limits: &v1alpha1.ResourceItem{
GPU: "8",
},
Requests: &v1alpha1.ResourceItem{
GPU: "8",
},
},
expectedGPULimit: corev1.ResourceName(consts.KubeResourceGPUNvidia),
expectedGPUValue: "8",
expectedGPURequest: corev1.ResourceName(consts.KubeResourceGPUNvidia),
expectedGPUReqVal: "8",
expectError: false,
},
}
for _, tt := range tests {
......@@ -690,11 +731,20 @@ func TestGetResourcesConfig(t *testing.T) {
g.Expect(err).To(gomega.BeNil())
g.Expect(result).ToNot(gomega.BeNil())
g.Expect(result.Limits).ToNot(gomega.BeNil())
gpuQuantity, exists := result.Limits[tt.expectedGPULimit]
g.Expect(exists).To(gomega.BeTrue(), "GPU resource %s should exist in limits", tt.expectedGPULimit)
g.Expect(gpuQuantity.String()).To(gomega.Equal(tt.expectedGPUValue))
if tt.expectedGPULimit != "" {
g.Expect(result.Limits).ToNot(gomega.BeNil())
gpuQuantity, exists := result.Limits[tt.expectedGPULimit]
g.Expect(exists).To(gomega.BeTrue(), "GPU resource %s should exist in limits", tt.expectedGPULimit)
g.Expect(gpuQuantity.String()).To(gomega.Equal(tt.expectedGPUValue))
}
if tt.expectedGPURequest != "" {
g.Expect(result.Requests).ToNot(gomega.BeNil())
gpuQuantity, exists := result.Requests[tt.expectedGPURequest]
g.Expect(exists).To(gomega.BeTrue(), "GPU resource %s should exist in requests", tt.expectedGPURequest)
g.Expect(gpuQuantity.String()).To(gomega.Equal(tt.expectedGPUReqVal))
}
})
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment