From 830fef7959de12db05acaf775d4d17c4dfe4d3d6 Mon Sep 17 00:00:00 2001 From: Akshansh Gupta Date: Sat, 19 Dec 2020 12:12:39 +0530 Subject: [PATCH] addons(cluster-autoscaler): Add newPodScaleUpDelay in clusterAutoscaler spec --- k8s/crds/kops.k8s.io_clusters.yaml | 5 +++++ pkg/apis/kops/componentconfig.go | 3 +++ pkg/apis/kops/v1alpha2/componentconfig.go | 3 +++ pkg/apis/kops/v1alpha2/zz_generated.conversion.go | 2 ++ pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go | 5 +++++ pkg/apis/kops/zz_generated.deepcopy.go | 5 +++++ pkg/model/components/clusterautoscaler.go | 3 +++ upup/models/bindata.go | 1 + .../cluster-autoscaler.addons.k8s.io/k8s-1.15.yaml.template | 1 + 9 files changed, 28 insertions(+) diff --git a/k8s/crds/kops.k8s.io_clusters.yaml b/k8s/crds/kops.k8s.io_clusters.yaml index cb76dbf19404f..d4b764ab2ae72 100644 --- a/k8s/crds/kops.k8s.io_clusters.yaml +++ b/k8s/crds/kops.k8s.io_clusters.yaml @@ -442,6 +442,11 @@ spec: description: 'Image is the docker container used. Default: the latest supported image for the specified kubernetes version.' type: string + newPodScaleUpDelay: + description: 'NewPodScaleUpDelay causes cluster autoscaler to + ignore unschedulable pods until they are a certain "age", regardless + of the scan-interval Default: 0s' + type: string scaleDownUtilizationThreshold: description: 'ScaleDownUtilizationThreshold determines the utilization threshold for node scale-down. Default: 0.5' diff --git a/pkg/apis/kops/componentconfig.go b/pkg/apis/kops/componentconfig.go index 8d1dc6e643926..8a96b9e667912 100644 --- a/pkg/apis/kops/componentconfig.go +++ b/pkg/apis/kops/componentconfig.go @@ -824,6 +824,9 @@ type ClusterAutoscalerConfig struct { // SkipNodesWithLocalStorage makes cluster autoscaler skip scale-down of nodes with local storage. // Default: true SkipNodesWithLocalStorage *bool `json:"skipNodesWithLocalStorage,omitempty"` + // NewPodScaleUpDelay causes cluster autoscaler to ignore unschedulable pods until they are a certain "age", regardless of the scan-interval + // Default: 0s + NewPodScaleUpDelay *string `json:"newPodScaleUpDelay,omitempty"` // Image is the docker container used. // Default: the latest supported image for the specified kubernetes version. Image *string `json:"image,omitempty"` diff --git a/pkg/apis/kops/v1alpha2/componentconfig.go b/pkg/apis/kops/v1alpha2/componentconfig.go index 044ade273467c..cdbb22fa193c2 100644 --- a/pkg/apis/kops/v1alpha2/componentconfig.go +++ b/pkg/apis/kops/v1alpha2/componentconfig.go @@ -823,6 +823,9 @@ type ClusterAutoscalerConfig struct { // SkipNodesWithLocalStorage makes cluster autoscaler skip scale-down of nodes with local storage. // Default: true SkipNodesWithLocalStorage *bool `json:"skipNodesWithLocalStorage,omitempty"` + // NewPodScaleUpDelay causes cluster autoscaler to ignore unschedulable pods until they are a certain "age", regardless of the scan-interval + // Default: 0s + NewPodScaleUpDelay *string `json:"newPodScaleUpDelay,omitempty"` // Image is the docker container used. // Default: the latest supported image for the specified kubernetes version. Image *string `json:"image,omitempty"` diff --git a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go index aac39f05ab089..26854f6386a60 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go @@ -1839,6 +1839,7 @@ func autoConvert_v1alpha2_ClusterAutoscalerConfig_To_kops_ClusterAutoscalerConfi out.ScaleDownUtilizationThreshold = in.ScaleDownUtilizationThreshold out.SkipNodesWithSystemPods = in.SkipNodesWithSystemPods out.SkipNodesWithLocalStorage = in.SkipNodesWithLocalStorage + out.NewPodScaleUpDelay = in.NewPodScaleUpDelay out.Image = in.Image return nil } @@ -1855,6 +1856,7 @@ func autoConvert_kops_ClusterAutoscalerConfig_To_v1alpha2_ClusterAutoscalerConfi out.ScaleDownUtilizationThreshold = in.ScaleDownUtilizationThreshold out.SkipNodesWithSystemPods = in.SkipNodesWithSystemPods out.SkipNodesWithLocalStorage = in.SkipNodesWithLocalStorage + out.NewPodScaleUpDelay = in.NewPodScaleUpDelay out.Image = in.Image return nil } diff --git a/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go b/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go index be142106b7545..13385aa5f595b 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go @@ -633,6 +633,11 @@ func (in *ClusterAutoscalerConfig) DeepCopyInto(out *ClusterAutoscalerConfig) { *out = new(bool) **out = **in } + if in.NewPodScaleUpDelay != nil { + in, out := &in.NewPodScaleUpDelay, &out.NewPodScaleUpDelay + *out = new(string) + **out = **in + } if in.Image != nil { in, out := &in.Image, &out.Image *out = new(string) diff --git a/pkg/apis/kops/zz_generated.deepcopy.go b/pkg/apis/kops/zz_generated.deepcopy.go index d7e6b0fdccc37..5c8393fdeafa8 100644 --- a/pkg/apis/kops/zz_generated.deepcopy.go +++ b/pkg/apis/kops/zz_generated.deepcopy.go @@ -733,6 +733,11 @@ func (in *ClusterAutoscalerConfig) DeepCopyInto(out *ClusterAutoscalerConfig) { *out = new(bool) **out = **in } + if in.NewPodScaleUpDelay != nil { + in, out := &in.NewPodScaleUpDelay, &out.NewPodScaleUpDelay + *out = new(string) + **out = **in + } if in.Image != nil { in, out := &in.Image, &out.Image *out = new(string) diff --git a/pkg/model/components/clusterautoscaler.go b/pkg/model/components/clusterautoscaler.go index af49159a2cb36..d9a7b1023f715 100644 --- a/pkg/model/components/clusterautoscaler.go +++ b/pkg/model/components/clusterautoscaler.go @@ -80,6 +80,9 @@ func (b *ClusterAutoscalerOptionsBuilder) BuildOptions(o interface{}) error { if cas.BalanceSimilarNodeGroups == nil { cas.BalanceSimilarNodeGroups = fi.Bool(false) } + if cas.NewPodScaleUpDelay == nil { + cas.NewPodScaleUpDelay = fi.String("0s") + } return nil } diff --git a/upup/models/bindata.go b/upup/models/bindata.go index 9b7eaf9262167..0c2e39ab899a3 100644 --- a/upup/models/bindata.go +++ b/upup/models/bindata.go @@ -27381,6 +27381,7 @@ spec: - --scale-down-utilization-threshold={{ .ScaleDownUtilizationThreshold }} - --skip-nodes-with-local-storage={{ .SkipNodesWithLocalStorage }} - --skip-nodes-with-system-pods={{ .SkipNodesWithSystemPods }} + - --new-pod-scale-up-delay={{ .NewPodScaleUpDelay }} - --stderrthreshold=info - --v=2 ports: diff --git a/upup/models/cloudup/resources/addons/cluster-autoscaler.addons.k8s.io/k8s-1.15.yaml.template b/upup/models/cloudup/resources/addons/cluster-autoscaler.addons.k8s.io/k8s-1.15.yaml.template index bc2e72c69521b..bf55b4af3b9f7 100644 --- a/upup/models/cloudup/resources/addons/cluster-autoscaler.addons.k8s.io/k8s-1.15.yaml.template +++ b/upup/models/cloudup/resources/addons/cluster-autoscaler.addons.k8s.io/k8s-1.15.yaml.template @@ -159,6 +159,7 @@ spec: - --scale-down-utilization-threshold={{ .ScaleDownUtilizationThreshold }} - --skip-nodes-with-local-storage={{ .SkipNodesWithLocalStorage }} - --skip-nodes-with-system-pods={{ .SkipNodesWithSystemPods }} + - --new-pod-scale-up-delay={{ .NewPodScaleUpDelay }} - --stderrthreshold=info - --v=2 ports: