Skip to content

Commit

Permalink
Add defaulting for provreq pods (#6877)
Browse files Browse the repository at this point in the history
* Add defaulting for provreq pods

* Add defaulting test case
  • Loading branch information
yaroslava-serdiuk committed Jul 11, 2024
1 parent bc6489b commit 4f496ca
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 4 deletions.
2 changes: 2 additions & 0 deletions cluster-autoscaler/provisioningrequest/pods/pods.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"k8s.io/apimachinery/pkg/types"
"k8s.io/autoscaler/cluster-autoscaler/apis/provisioningrequest/autoscaling.x-k8s.io/v1beta1"
"k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/provreqwrapper"
corev1 "k8s.io/kubernetes/pkg/apis/core/v1"
"k8s.io/kubernetes/pkg/controller"
)

Expand Down Expand Up @@ -53,6 +54,7 @@ func PodsForProvisioningRequest(pr *provreqwrapper.ProvisioningRequest) ([]*v1.P
return nil, fmt.Errorf("while creating pod for pr: %s/%s podSet: %d, got error: %w", pr.Namespace, pr.Name, i, err)
}
populatePodFields(pr, pod, i, j)
corev1.SetDefaults_Pod(pod)
pods = append(pods, pod)
}
}
Expand Down
93 changes: 89 additions & 4 deletions cluster-autoscaler/provisioningrequest/pods/pods_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,13 @@ import (
"github.com/google/go-cmp/cmp"
"google.golang.org/protobuf/proto"

apiv1 "k8s.io/api/core/v1"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/autoscaler/cluster-autoscaler/apis/provisioningrequest/autoscaling.x-k8s.io/v1beta1"
"k8s.io/autoscaler/cluster-autoscaler/provisioningrequest/provreqwrapper"
"k8s.io/utils/ptr"
)

const testProvisioningClassName = "TestProvisioningClass"
Expand Down Expand Up @@ -61,14 +62,15 @@ func TestPodsForProvisioningRequest(t *testing.T) {
Image: containerImage,
},
},
EnableServiceLinks: ptr.To(true),
},
}
}

tests := []struct {
desc string
pr *v1beta1.ProvisioningRequest
podTemplates []*apiv1.PodTemplate
podTemplates []*v1.PodTemplate
want []*v1.Pod
wantErr bool
}{
Expand All @@ -89,7 +91,7 @@ func TestPodsForProvisioningRequest(t *testing.T) {
ProvisioningClassName: testProvisioningClassName,
},
},
podTemplates: []*apiv1.PodTemplate{
podTemplates: []*v1.PodTemplate{
{
ObjectMeta: metav1.ObjectMeta{
Name: "template-1",
Expand Down Expand Up @@ -128,7 +130,7 @@ func TestPodsForProvisioningRequest(t *testing.T) {
ProvisioningClassName: testProvisioningClassName,
},
},
podTemplates: []*apiv1.PodTemplate{
podTemplates: []*v1.PodTemplate{
{
ObjectMeta: metav1.ObjectMeta{
Name: "template-1",
Expand Down Expand Up @@ -252,6 +254,89 @@ func TestPodsForProvisioningRequest(t *testing.T) {
testPod("test-pr-name-1-2", "test-pr-name-", "test-container-2", "test-image-2", "test-pr-name"),
},
},
{
desc: "PodTemplate doesn't specify container resources requests, Pods container default resources requests to limits",
pr: &v1beta1.ProvisioningRequest{
ObjectMeta: metav1.ObjectMeta{
Name: "test-pr-name",
Namespace: "test-namespace",
},
Spec: v1beta1.ProvisioningRequestSpec{
PodSets: []v1beta1.PodSet{
{
Count: 1,
PodTemplateRef: v1beta1.Reference{Name: "template-1"},
},
},
ProvisioningClassName: testProvisioningClassName,
},
},
podTemplates: []*v1.PodTemplate{
{
ObjectMeta: metav1.ObjectMeta{
Name: "template-1",
Namespace: "test-namespace",
},
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Containers: []v1.Container{
{
Name: "test-container",
Image: "test-image",
Resources: v1.ResourceRequirements{
Limits: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("8"),
v1.ResourceMemory: resource.MustParse("8G"),
},
},
},
},
},
},
},
},
want: []*v1.Pod{
{
ObjectMeta: metav1.ObjectMeta{
Name: "test-pr-name-0-0",
GenerateName: "test-pr-name-",
Namespace: "test-namespace",
UID: types.UID(fmt.Sprintf("test-namespace/%s", "test-pr-name-0-0")),
Annotations: map[string]string{
v1beta1.ProvisioningRequestPodAnnotationKey: "test-pr-name",
v1beta1.ProvisioningClassPodAnnotationKey: testProvisioningClassName,
},
Labels: map[string]string{},
Finalizers: []string{},
OwnerReferences: []metav1.OwnerReference{
{
Controller: proto.Bool(true),
Name: "test-pr-name",
},
},
},
Spec: v1.PodSpec{
Containers: []v1.Container{
{
Name: "test-container",
Image: "test-image",
Resources: v1.ResourceRequirements{
Limits: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("8"),
v1.ResourceMemory: resource.MustParse("8G"),
},
Requests: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("8"),
v1.ResourceMemory: resource.MustParse("8G"),
},
},
},
},
EnableServiceLinks: ptr.To(true),
},
},
},
},
}
for _, tc := range tests {
t.Run(tc.desc, func(t *testing.T) {
Expand Down

0 comments on commit 4f496ca

Please sign in to comment.