Skip to content
This repository was archived by the owner on Mar 16, 2024. It is now read-only.

Commit 57a5112

Browse files
authored
Add resources field to computeclass #2380 (#2384)
Add resource field to computeclass Signed-off-by: dciangot <[email protected]> Signed-off-by: Diego Ciangottini <[email protected]> Co-authored-by: Diego Ciangottini <[email protected]>
1 parent a1ab298 commit 57a5112

File tree

19 files changed

+699
-20
lines changed

19 files changed

+699
-20
lines changed

docs/docs/40-admin/03-computeclasses.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ memory:
2424
values: # Specific values that are only allowed to be used. Default must be included in these values and max/min cannot be set.
2525
- 1.5Gi
2626
cpuScaler: 1 # This is used as a ratio of how many VCPUs to schedule per Gibibyte of memory. In this case it is 1 to 1.
27+
resources: # The same resources fields for Pods: memory and CPU values will be overwritten by memory and cpuScaler fields
28+
limits:
29+
gpu-vendor.example/example-limit: 1
30+
requests:
31+
gpu-vendor.example/example-request: 1
2732
priorityClassName: foo # The priority class to use for Pods
2833
runtimeClassName: bar # The runtime class name to use for Pods
2934
tolerations: # The same toleration fields for Pods
@@ -43,7 +48,7 @@ affinity: # The same affinity fields for Pods
4348
supportedRegions: ["local"] # should always be set to ["local"]
4449
```
4550
46-
If `memory.min`, `memory.max`, `memory.values`, `affinity`, and `tolerations` are not given, then there are no scheduling rules for workloads using the compute class.
51+
If `memory.min`, `memory.max`, `memory.values`, `resources`, `affinity`, and `tolerations` are not given, then there are no scheduling rules for workloads using the compute class.
4752

4853
## Cluster Compute Classes
4954

integration/client/computeclass/computeclass_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import (
99
adminv1 "github.com/acorn-io/runtime/pkg/apis/internal.admin.acorn.io/v1"
1010
"github.com/acorn-io/runtime/pkg/client"
1111
kclient "github.com/acorn-io/runtime/pkg/k8sclient"
12+
corev1 "k8s.io/api/core/v1"
1213
apierrors "k8s.io/apimachinery/pkg/api/errors"
14+
"k8s.io/apimachinery/pkg/api/resource"
1315
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1416
)
1517

@@ -28,6 +30,7 @@ func TestCreatingComputeClasses(t *testing.T) {
2830
checks := []struct {
2931
name string
3032
memory adminv1.ComputeClassMemory
33+
resources corev1.ResourceRequirements
3134
cpuScaler float64
3235
priorityClassName string
3336
runtimeClassName string
@@ -40,6 +43,39 @@ func TestCreatingComputeClasses(t *testing.T) {
4043
},
4144
fail: false,
4245
},
46+
{
47+
name: "valid-custom-resources",
48+
memory: adminv1.ComputeClassMemory{
49+
Max: "512Mi",
50+
},
51+
resources: corev1.ResourceRequirements{
52+
Limits: corev1.ResourceList{
53+
"mygpu/nvidia": resource.MustParse("1"),
54+
},
55+
Requests: corev1.ResourceList{
56+
"mygpu/nvidia": resource.MustParse("1"),
57+
},
58+
},
59+
fail: false,
60+
},
61+
{
62+
name: "invalid-custom-resources-limits",
63+
resources: corev1.ResourceRequirements{
64+
Limits: corev1.ResourceList{
65+
"cpu": resource.MustParse("1"),
66+
},
67+
},
68+
fail: true,
69+
},
70+
{
71+
name: "invalid-custom-resources-requests",
72+
resources: corev1.ResourceRequirements{
73+
Requests: corev1.ResourceList{
74+
"memory": resource.MustParse("1"),
75+
},
76+
},
77+
fail: true,
78+
},
4379
{
4480
name: "valid-only-min",
4581
memory: adminv1.ComputeClassMemory{
@@ -156,6 +192,7 @@ func TestCreatingComputeClasses(t *testing.T) {
156192
},
157193
CPUScaler: tt.cpuScaler,
158194
Memory: tt.memory,
195+
Resources: &tt.resources,
159196
PriorityClassName: tt.priorityClassName,
160197
RuntimeClassName: tt.runtimeClassName,
161198
}

integration/run/run_test.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -966,15 +966,24 @@ func TestUsingComputeClasses(t *testing.T) {
966966
Min: "512Mi",
967967
Max: "1Gi",
968968
},
969+
Resources: &corev1.ResourceRequirements{
970+
Limits: corev1.ResourceList{
971+
"mygpu/nvidia": resource.MustParse("1"),
972+
}, Requests: corev1.ResourceList{
973+
"mygpu/nvidia": resource.MustParse("1"),
974+
}},
969975
SupportedRegions: []string{apiv1.LocalRegion},
970976
},
971977
expected: map[string]v1.Scheduling{"simple": {
972978
Requirements: corev1.ResourceRequirements{
973979
Limits: corev1.ResourceList{
974-
corev1.ResourceMemory: resource.MustParse("1Gi")},
980+
corev1.ResourceMemory: resource.MustParse("1Gi"),
981+
"mygpu/nvidia": resource.MustParse("1"),
982+
},
975983
Requests: corev1.ResourceList{
976984
corev1.ResourceMemory: resource.MustParse("1Gi"),
977985
corev1.ResourceCPU: resource.MustParse("250m"),
986+
"mygpu/nvidia": resource.MustParse("1"),
978987
},
979988
},
980989
Tolerations: []corev1.Toleration{

pkg/apis/admin.acorn.io/v1/zz_generated.deepcopy.go

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

pkg/apis/api.acorn.io/v1/computeclass.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package v1
22

33
import (
44
v1 "github.com/acorn-io/runtime/pkg/apis/internal.admin.acorn.io/v1"
5+
corev1 "k8s.io/api/core/v1"
56
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
67
)
78

@@ -11,10 +12,11 @@ type ComputeClass struct {
1112
metav1.TypeMeta `json:",inline"`
1213
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
1314

14-
Memory v1.ComputeClassMemory `json:"memory,omitempty"`
15-
Description string `json:"description,omitempty"`
16-
Default bool `json:"default"`
17-
SupportedRegions []string `json:"supportedRegions,omitempty"`
15+
Memory v1.ComputeClassMemory `json:"memory,omitempty"`
16+
Resources *corev1.ResourceRequirements `json:"resources,omitempty"`
17+
Description string `json:"description,omitempty"`
18+
Default bool `json:"default"`
19+
SupportedRegions []string `json:"supportedRegions,omitempty"`
1820
}
1921

2022
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

pkg/apis/api.acorn.io/v1/zz_generated.deepcopy.go

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

pkg/apis/internal.admin.acorn.io/v1/computeclasses.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,16 @@ type ClusterComputeClassInstanceList struct {
4444
type ProjectComputeClassInstance struct {
4545
metav1.TypeMeta `json:",inline"`
4646
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
47-
Description string `json:"description,omitempty"`
48-
CPUScaler float64 `json:"cpuScaler,omitempty"`
49-
Default bool `json:"default"`
50-
Affinity *corev1.Affinity `json:"affinity,omitempty"`
51-
Tolerations []corev1.Toleration `json:"tolerations,omitempty"`
52-
Memory ComputeClassMemory `json:"memory,omitempty"`
53-
SupportedRegions []string `json:"supportedRegions,omitempty"`
54-
PriorityClassName string `json:"priorityClassName,omitempty"`
55-
RuntimeClassName string `json:"runtimeClassName,omitempty"`
47+
Description string `json:"description,omitempty"`
48+
CPUScaler float64 `json:"cpuScaler,omitempty"`
49+
Default bool `json:"default"`
50+
Affinity *corev1.Affinity `json:"affinity,omitempty"`
51+
Tolerations []corev1.Toleration `json:"tolerations,omitempty"`
52+
Memory ComputeClassMemory `json:"memory,omitempty"`
53+
SupportedRegions []string `json:"supportedRegions,omitempty"`
54+
PriorityClassName string `json:"priorityClassName,omitempty"`
55+
RuntimeClassName string `json:"runtimeClassName,omitempty"`
56+
Resources *corev1.ResourceRequirements `json:"resources,omitempty"`
5657
}
5758

5859
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

pkg/apis/internal.admin.acorn.io/v1/zz_generated.deepcopy.go

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

pkg/controller/appdefinition/computeclass_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,7 @@ func TestAllSetComputeClass(t *testing.T) {
3838
func TestAllSetOverwriteComputeClass(t *testing.T) {
3939
tester.DefaultTest(t, scheme.Scheme, "testdata/computeclass/all-set-overwrite-computeclass", DeploySpec)
4040
}
41+
42+
func TestGenericResourcesComputeClass(t *testing.T) {
43+
tester.DefaultTest(t, scheme.Scheme, "testdata/computeclass/generic-resources", DeploySpec)
44+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
---
2+
kind: ClusterComputeClassInstance
3+
apiVersion: internal.admin.acorn.io/v1
4+
metadata:
5+
name: sample-compute-class
6+
description: Simple description for a simple ComputeClass
7+
cpuScaler: 0.25
8+
memory:
9+
min: 1Mi
10+
max: 2Mi
11+
default: 1Mi
12+
resources:
13+
limits:
14+
gpu-vendor.example/example-limit: 1
15+
requests:
16+
gpu-vendor.example/example-request: 1
17+
affinity:
18+
nodeAffinity:
19+
requiredDuringSchedulingIgnoredDuringExecution:
20+
nodeSelectorTerms:
21+
- matchExpressions:
22+
- key: foo
23+
operator: In
24+
values:
25+
- bar

0 commit comments

Comments
 (0)