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

Add resources field to computeclass #2380 #2384

Merged
merged 5 commits into from
Jan 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion docs/docs/40-admin/03-computeclasses.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ memory:
values: # Specific values that are only allowed to be used. Default must be included in these values and max/min cannot be set.
- 1.5Gi
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.
resources: # The same resources fields for Pods: memory and CPU values will be overwritten by memory and cpuScaler fields
limits:
gpu-vendor.example/example-limit: 1
requests:
gpu-vendor.example/example-request: 1
priorityClassName: foo # The priority class to use for Pods
runtimeClassName: bar # The runtime class name to use for Pods
tolerations: # The same toleration fields for Pods
Expand All @@ -43,7 +48,7 @@ affinity: # The same affinity fields for Pods
supportedRegions: ["local"] # should always be set to ["local"]
```

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.
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.

## Cluster Compute Classes

Expand Down
37 changes: 37 additions & 0 deletions integration/client/computeclass/computeclass_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ import (
adminv1 "github.com/acorn-io/runtime/pkg/apis/internal.admin.acorn.io/v1"
"github.com/acorn-io/runtime/pkg/client"
kclient "github.com/acorn-io/runtime/pkg/k8sclient"
corev1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

Expand All @@ -28,6 +30,7 @@ func TestCreatingComputeClasses(t *testing.T) {
checks := []struct {
name string
memory adminv1.ComputeClassMemory
resources corev1.ResourceRequirements
cpuScaler float64
priorityClassName string
runtimeClassName string
Expand All @@ -40,6 +43,39 @@ func TestCreatingComputeClasses(t *testing.T) {
},
fail: false,
},
{
name: "valid-custom-resources",
memory: adminv1.ComputeClassMemory{
Max: "512Mi",
},
resources: corev1.ResourceRequirements{
Limits: corev1.ResourceList{
"mygpu/nvidia": resource.MustParse("1"),
},
Requests: corev1.ResourceList{
"mygpu/nvidia": resource.MustParse("1"),
},
},
fail: false,
},
{
name: "invalid-custom-resources-limits",
resources: corev1.ResourceRequirements{
Limits: corev1.ResourceList{
"cpu": resource.MustParse("1"),
},
},
fail: true,
},
{
name: "invalid-custom-resources-requests",
resources: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
"memory": resource.MustParse("1"),
},
},
fail: true,
},
{
name: "valid-only-min",
memory: adminv1.ComputeClassMemory{
Expand Down Expand Up @@ -156,6 +192,7 @@ func TestCreatingComputeClasses(t *testing.T) {
},
CPUScaler: tt.cpuScaler,
Memory: tt.memory,
Resources: &tt.resources,
PriorityClassName: tt.priorityClassName,
RuntimeClassName: tt.runtimeClassName,
}
Expand Down
11 changes: 10 additions & 1 deletion integration/run/run_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -966,15 +966,24 @@ func TestUsingComputeClasses(t *testing.T) {
Min: "512Mi",
Max: "1Gi",
},
Resources: &corev1.ResourceRequirements{
Limits: corev1.ResourceList{
"mygpu/nvidia": resource.MustParse("1"),
}, Requests: corev1.ResourceList{
"mygpu/nvidia": resource.MustParse("1"),
}},
SupportedRegions: []string{apiv1.LocalRegion},
},
expected: map[string]v1.Scheduling{"simple": {
Requirements: corev1.ResourceRequirements{
Limits: corev1.ResourceList{
corev1.ResourceMemory: resource.MustParse("1Gi")},
corev1.ResourceMemory: resource.MustParse("1Gi"),
"mygpu/nvidia": resource.MustParse("1"),
},
Requests: corev1.ResourceList{
corev1.ResourceMemory: resource.MustParse("1Gi"),
corev1.ResourceCPU: resource.MustParse("250m"),
"mygpu/nvidia": resource.MustParse("1"),
},
},
Tolerations: []corev1.Toleration{
Expand Down
10 changes: 10 additions & 0 deletions pkg/apis/admin.acorn.io/v1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 6 additions & 4 deletions pkg/apis/api.acorn.io/v1/computeclass.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package v1

import (
v1 "github.com/acorn-io/runtime/pkg/apis/internal.admin.acorn.io/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

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

Memory v1.ComputeClassMemory `json:"memory,omitempty"`
Description string `json:"description,omitempty"`
Default bool `json:"default"`
SupportedRegions []string `json:"supportedRegions,omitempty"`
Memory v1.ComputeClassMemory `json:"memory,omitempty"`
Resources *corev1.ResourceRequirements `json:"resources,omitempty"`
Description string `json:"description,omitempty"`
Default bool `json:"default"`
SupportedRegions []string `json:"supportedRegions,omitempty"`
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
Expand Down
6 changes: 6 additions & 0 deletions pkg/apis/api.acorn.io/v1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 10 additions & 9 deletions pkg/apis/internal.admin.acorn.io/v1/computeclasses.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,16 @@ type ClusterComputeClassInstanceList struct {
type ProjectComputeClassInstance struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
Description string `json:"description,omitempty"`
CPUScaler float64 `json:"cpuScaler,omitempty"`
Default bool `json:"default"`
Affinity *corev1.Affinity `json:"affinity,omitempty"`
Tolerations []corev1.Toleration `json:"tolerations,omitempty"`
Memory ComputeClassMemory `json:"memory,omitempty"`
SupportedRegions []string `json:"supportedRegions,omitempty"`
PriorityClassName string `json:"priorityClassName,omitempty"`
RuntimeClassName string `json:"runtimeClassName,omitempty"`
Description string `json:"description,omitempty"`
CPUScaler float64 `json:"cpuScaler,omitempty"`
Default bool `json:"default"`
Affinity *corev1.Affinity `json:"affinity,omitempty"`
Tolerations []corev1.Toleration `json:"tolerations,omitempty"`
Memory ComputeClassMemory `json:"memory,omitempty"`
SupportedRegions []string `json:"supportedRegions,omitempty"`
PriorityClassName string `json:"priorityClassName,omitempty"`
RuntimeClassName string `json:"runtimeClassName,omitempty"`
Resources *corev1.ResourceRequirements `json:"resources,omitempty"`
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
Expand Down
10 changes: 10 additions & 0 deletions pkg/apis/internal.admin.acorn.io/v1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions pkg/controller/appdefinition/computeclass_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,7 @@ func TestAllSetComputeClass(t *testing.T) {
func TestAllSetOverwriteComputeClass(t *testing.T) {
tester.DefaultTest(t, scheme.Scheme, "testdata/computeclass/all-set-overwrite-computeclass", DeploySpec)
}

func TestGenericResourcesComputeClass(t *testing.T) {
tester.DefaultTest(t, scheme.Scheme, "testdata/computeclass/generic-resources", DeploySpec)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
kind: ClusterComputeClassInstance
apiVersion: internal.admin.acorn.io/v1
metadata:
name: sample-compute-class
description: Simple description for a simple ComputeClass
cpuScaler: 0.25
memory:
min: 1Mi
max: 2Mi
default: 1Mi
resources:
limits:
gpu-vendor.example/example-limit: 1
requests:
gpu-vendor.example/example-request: 1
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: foo
operator: In
values:
- bar
Loading
Loading