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 3 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
19 changes: 19 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,21 @@ 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: "valid-only-min",
memory: adminv1.ComputeClassMemory{
Expand Down Expand Up @@ -156,6 +174,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