diff --git a/docs/addons.md b/docs/addons.md index 52fce3525c..4d85cd0dfb 100644 --- a/docs/addons.md +++ b/docs/addons.md @@ -35,6 +35,7 @@ spec: enabled: true expander: least-waste balanceSimilarNodeGroups: false + awsUseStaticInstanceList: false scaleDownUtilizationThreshold: 0.5 skipNodesWithLocalStorage: true skipNodesWithSystemPods: true diff --git a/k8s/crds/kops.k8s.io_clusters.yaml b/k8s/crds/kops.k8s.io_clusters.yaml index ef3cca7fa8..3d6edc0808 100644 --- a/k8s/crds/kops.k8s.io_clusters.yaml +++ b/k8s/crds/kops.k8s.io_clusters.yaml @@ -549,6 +549,11 @@ spec: clusterAutoscaler: description: ClusterAutoscaler defines the cluaster autoscaler configuration. properties: + awsUseStaticInstanceList: + description: 'AWSUseStaticInstanceList makes cluster autoscaler + to use statically defined set of AWS EC2 Instance List. Default: + false' + type: boolean balanceSimilarNodeGroups: description: 'BalanceSimilarNodeGroups makes cluster autoscaler treat similar node groups as one. Default: false' diff --git a/pkg/apis/kops/componentconfig.go b/pkg/apis/kops/componentconfig.go index e60ff03369..76be502813 100644 --- a/pkg/apis/kops/componentconfig.go +++ b/pkg/apis/kops/componentconfig.go @@ -961,6 +961,9 @@ type ClusterAutoscalerConfig struct { // BalanceSimilarNodeGroups makes cluster autoscaler treat similar node groups as one. // Default: false BalanceSimilarNodeGroups *bool `json:"balanceSimilarNodeGroups,omitempty"` + // AWSUseStaticInstanceList makes cluster autoscaler to use statically defined set of AWS EC2 Instance List. + // Default: false + AWSUseStaticInstanceList *bool `json:"awsUseStaticInstanceList,omitempty"` // ScaleDownUtilizationThreshold determines the utilization threshold for node scale-down. // Default: 0.5 ScaleDownUtilizationThreshold *string `json:"scaleDownUtilizationThreshold,omitempty"` diff --git a/pkg/apis/kops/v1alpha2/componentconfig.go b/pkg/apis/kops/v1alpha2/componentconfig.go index 65e38c679f..a33b6fbbfa 100644 --- a/pkg/apis/kops/v1alpha2/componentconfig.go +++ b/pkg/apis/kops/v1alpha2/componentconfig.go @@ -960,6 +960,9 @@ type ClusterAutoscalerConfig struct { // BalanceSimilarNodeGroups makes cluster autoscaler treat similar node groups as one. // Default: false BalanceSimilarNodeGroups *bool `json:"balanceSimilarNodeGroups,omitempty"` + // AWSUseStaticInstanceList makes cluster autoscaler to use statically defined set of AWS EC2 Instance List. + // Default: false + AWSUseStaticInstanceList *bool `json:"awsUseStaticInstanceList,omitempty"` // ScaleDownUtilizationThreshold determines the utilization threshold for node scale-down. // Default: 0.5 ScaleDownUtilizationThreshold *string `json:"scaleDownUtilizationThreshold,omitempty"` diff --git a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go index 1badd34b62..1fad333e04 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go @@ -2172,6 +2172,7 @@ func autoConvert_v1alpha2_ClusterAutoscalerConfig_To_kops_ClusterAutoscalerConfi out.Enabled = in.Enabled out.Expander = in.Expander out.BalanceSimilarNodeGroups = in.BalanceSimilarNodeGroups + out.AWSUseStaticInstanceList = in.AWSUseStaticInstanceList out.ScaleDownUtilizationThreshold = in.ScaleDownUtilizationThreshold out.SkipNodesWithSystemPods = in.SkipNodesWithSystemPods out.SkipNodesWithLocalStorage = in.SkipNodesWithLocalStorage @@ -2192,6 +2193,7 @@ func autoConvert_kops_ClusterAutoscalerConfig_To_v1alpha2_ClusterAutoscalerConfi out.Enabled = in.Enabled out.Expander = in.Expander out.BalanceSimilarNodeGroups = in.BalanceSimilarNodeGroups + out.AWSUseStaticInstanceList = in.AWSUseStaticInstanceList out.ScaleDownUtilizationThreshold = in.ScaleDownUtilizationThreshold out.SkipNodesWithSystemPods = in.SkipNodesWithSystemPods out.SkipNodesWithLocalStorage = in.SkipNodesWithLocalStorage diff --git a/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go b/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go index 35e719ee55..32c881c051 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go @@ -777,6 +777,11 @@ func (in *ClusterAutoscalerConfig) DeepCopyInto(out *ClusterAutoscalerConfig) { *out = new(bool) **out = **in } + if in.AWSUseStaticInstanceList != nil { + in, out := &in.AWSUseStaticInstanceList, &out.AWSUseStaticInstanceList + *out = new(bool) + **out = **in + } if in.ScaleDownUtilizationThreshold != nil { in, out := &in.ScaleDownUtilizationThreshold, &out.ScaleDownUtilizationThreshold *out = new(string) diff --git a/pkg/apis/kops/zz_generated.deepcopy.go b/pkg/apis/kops/zz_generated.deepcopy.go index 81d525851b..827ca162b4 100644 --- a/pkg/apis/kops/zz_generated.deepcopy.go +++ b/pkg/apis/kops/zz_generated.deepcopy.go @@ -861,6 +861,11 @@ func (in *ClusterAutoscalerConfig) DeepCopyInto(out *ClusterAutoscalerConfig) { *out = new(bool) **out = **in } + if in.AWSUseStaticInstanceList != nil { + in, out := &in.AWSUseStaticInstanceList, &out.AWSUseStaticInstanceList + *out = new(bool) + **out = **in + } if in.ScaleDownUtilizationThreshold != nil { in, out := &in.ScaleDownUtilizationThreshold, &out.ScaleDownUtilizationThreshold *out = new(string) diff --git a/pkg/model/components/clusterautoscaler.go b/pkg/model/components/clusterautoscaler.go index ff73cd8a10..725f04933e 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.AWSUseStaticInstanceList == nil { + cas.AWSUseStaticInstanceList = fi.Bool(false) + } if cas.NewPodScaleUpDelay == nil { cas.NewPodScaleUpDelay = fi.String("0s") } diff --git a/tests/integration/update_cluster/many-addons-ccm-irsa/data/aws_s3_bucket_object_cluster-completed.spec_content b/tests/integration/update_cluster/many-addons-ccm-irsa/data/aws_s3_bucket_object_cluster-completed.spec_content index 2feb9d0428..9d938a019d 100644 --- a/tests/integration/update_cluster/many-addons-ccm-irsa/data/aws_s3_bucket_object_cluster-completed.spec_content +++ b/tests/integration/update_cluster/many-addons-ccm-irsa/data/aws_s3_bucket_object_cluster-completed.spec_content @@ -21,6 +21,7 @@ spec: cloudControllerManager: {} cloudProvider: aws clusterAutoscaler: + awsUseStaticInstanceList: false balanceSimilarNodeGroups: false enabled: true expander: random diff --git a/tests/integration/update_cluster/many-addons-ccm-irsa/data/aws_s3_bucket_object_minimal.example.com-addons-bootstrap_content b/tests/integration/update_cluster/many-addons-ccm-irsa/data/aws_s3_bucket_object_minimal.example.com-addons-bootstrap_content index 07d4f812ca..d0e287300e 100644 --- a/tests/integration/update_cluster/many-addons-ccm-irsa/data/aws_s3_bucket_object_minimal.example.com-addons-bootstrap_content +++ b/tests/integration/update_cluster/many-addons-ccm-irsa/data/aws_s3_bucket_object_minimal.example.com-addons-bootstrap_content @@ -41,7 +41,7 @@ spec: k8s-addon: dns-controller.addons.k8s.io - id: k8s-1.15 manifest: cluster-autoscaler.addons.k8s.io/k8s-1.15.yaml - manifestHash: 88c94b9a9e3308c85c240a03248bd8e4dbd27343d4749e4eb9ec8f2c8adf1348 + manifestHash: 1299b049a099f57974cd698ac89222abbb41bdd249e7d4f33bce4ca753eda424 name: cluster-autoscaler.addons.k8s.io selector: k8s-addon: cluster-autoscaler.addons.k8s.io diff --git a/tests/integration/update_cluster/many-addons-ccm-irsa/data/aws_s3_bucket_object_minimal.example.com-addons-cluster-autoscaler.addons.k8s.io-k8s-1.15_content b/tests/integration/update_cluster/many-addons-ccm-irsa/data/aws_s3_bucket_object_minimal.example.com-addons-cluster-autoscaler.addons.k8s.io-k8s-1.15_content index 7ed758b2bb..9c442d90c1 100644 --- a/tests/integration/update_cluster/many-addons-ccm-irsa/data/aws_s3_bucket_object_minimal.example.com-addons-cluster-autoscaler.addons.k8s.io-k8s-1.15_content +++ b/tests/integration/update_cluster/many-addons-ccm-irsa/data/aws_s3_bucket_object_minimal.example.com-addons-cluster-autoscaler.addons.k8s.io-k8s-1.15_content @@ -295,6 +295,7 @@ spec: - ./cluster-autoscaler - --balance-similar-node-groups=false - --cloud-provider=aws + - --aws-use-static-instance-list=false - --expander=random - --nodes=2:2:nodes.minimal.example.com - --scale-down-utilization-threshold=0.5 diff --git a/tests/integration/update_cluster/many-addons-ccm/data/aws_s3_bucket_object_cluster-completed.spec_content b/tests/integration/update_cluster/many-addons-ccm/data/aws_s3_bucket_object_cluster-completed.spec_content index 4405a3cafb..38c8ddbe10 100644 --- a/tests/integration/update_cluster/many-addons-ccm/data/aws_s3_bucket_object_cluster-completed.spec_content +++ b/tests/integration/update_cluster/many-addons-ccm/data/aws_s3_bucket_object_cluster-completed.spec_content @@ -21,6 +21,7 @@ spec: cloudControllerManager: {} cloudProvider: aws clusterAutoscaler: + awsUseStaticInstanceList: false balanceSimilarNodeGroups: false enabled: true expander: random diff --git a/tests/integration/update_cluster/many-addons-ccm/data/aws_s3_bucket_object_minimal.example.com-addons-bootstrap_content b/tests/integration/update_cluster/many-addons-ccm/data/aws_s3_bucket_object_minimal.example.com-addons-bootstrap_content index debfb8b7f5..bbca2fd7fb 100644 --- a/tests/integration/update_cluster/many-addons-ccm/data/aws_s3_bucket_object_minimal.example.com-addons-bootstrap_content +++ b/tests/integration/update_cluster/many-addons-ccm/data/aws_s3_bucket_object_minimal.example.com-addons-bootstrap_content @@ -41,7 +41,7 @@ spec: k8s-addon: dns-controller.addons.k8s.io - id: k8s-1.15 manifest: cluster-autoscaler.addons.k8s.io/k8s-1.15.yaml - manifestHash: d3af566737e6e887aae943c29292e5bc033efb0b77bccca3c027c72f66883fda + manifestHash: f7e1e3dde3b3bf5baba2ccc79ed7e154559e8a5f7c320feca0821ec2b2f799ad name: cluster-autoscaler.addons.k8s.io selector: k8s-addon: cluster-autoscaler.addons.k8s.io diff --git a/tests/integration/update_cluster/many-addons-ccm/data/aws_s3_bucket_object_minimal.example.com-addons-cluster-autoscaler.addons.k8s.io-k8s-1.15_content b/tests/integration/update_cluster/many-addons-ccm/data/aws_s3_bucket_object_minimal.example.com-addons-cluster-autoscaler.addons.k8s.io-k8s-1.15_content index 7d2b834656..94ee3c0a2f 100644 --- a/tests/integration/update_cluster/many-addons-ccm/data/aws_s3_bucket_object_minimal.example.com-addons-cluster-autoscaler.addons.k8s.io-k8s-1.15_content +++ b/tests/integration/update_cluster/many-addons-ccm/data/aws_s3_bucket_object_minimal.example.com-addons-cluster-autoscaler.addons.k8s.io-k8s-1.15_content @@ -295,6 +295,7 @@ spec: - ./cluster-autoscaler - --balance-similar-node-groups=false - --cloud-provider=aws + - --aws-use-static-instance-list=false - --expander=random - --nodes=2:2:nodes.minimal.example.com - --scale-down-utilization-threshold=0.5 diff --git a/tests/integration/update_cluster/many-addons/data/aws_s3_bucket_object_cluster-completed.spec_content b/tests/integration/update_cluster/many-addons/data/aws_s3_bucket_object_cluster-completed.spec_content index e916695a4e..516cc2bc68 100644 --- a/tests/integration/update_cluster/many-addons/data/aws_s3_bucket_object_cluster-completed.spec_content +++ b/tests/integration/update_cluster/many-addons/data/aws_s3_bucket_object_cluster-completed.spec_content @@ -20,6 +20,7 @@ spec: manageStorageClasses: true cloudProvider: aws clusterAutoscaler: + awsUseStaticInstanceList: false balanceSimilarNodeGroups: false enabled: true expander: random diff --git a/tests/integration/update_cluster/many-addons/data/aws_s3_bucket_object_minimal.example.com-addons-bootstrap_content b/tests/integration/update_cluster/many-addons/data/aws_s3_bucket_object_minimal.example.com-addons-bootstrap_content index 84304724b3..742a25a9a1 100644 --- a/tests/integration/update_cluster/many-addons/data/aws_s3_bucket_object_minimal.example.com-addons-bootstrap_content +++ b/tests/integration/update_cluster/many-addons/data/aws_s3_bucket_object_minimal.example.com-addons-bootstrap_content @@ -41,7 +41,7 @@ spec: k8s-addon: dns-controller.addons.k8s.io - id: k8s-1.15 manifest: cluster-autoscaler.addons.k8s.io/k8s-1.15.yaml - manifestHash: d3af566737e6e887aae943c29292e5bc033efb0b77bccca3c027c72f66883fda + manifestHash: f7e1e3dde3b3bf5baba2ccc79ed7e154559e8a5f7c320feca0821ec2b2f799ad name: cluster-autoscaler.addons.k8s.io selector: k8s-addon: cluster-autoscaler.addons.k8s.io diff --git a/tests/integration/update_cluster/many-addons/data/aws_s3_bucket_object_minimal.example.com-addons-cluster-autoscaler.addons.k8s.io-k8s-1.15_content b/tests/integration/update_cluster/many-addons/data/aws_s3_bucket_object_minimal.example.com-addons-cluster-autoscaler.addons.k8s.io-k8s-1.15_content index 7d2b834656..94ee3c0a2f 100644 --- a/tests/integration/update_cluster/many-addons/data/aws_s3_bucket_object_minimal.example.com-addons-cluster-autoscaler.addons.k8s.io-k8s-1.15_content +++ b/tests/integration/update_cluster/many-addons/data/aws_s3_bucket_object_minimal.example.com-addons-cluster-autoscaler.addons.k8s.io-k8s-1.15_content @@ -295,6 +295,7 @@ spec: - ./cluster-autoscaler - --balance-similar-node-groups=false - --cloud-provider=aws + - --aws-use-static-instance-list=false - --expander=random - --nodes=2:2:nodes.minimal.example.com - --scale-down-utilization-threshold=0.5 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 13ecfd1926..db96cada5f 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 @@ -282,6 +282,9 @@ spec: - ./cluster-autoscaler - --balance-similar-node-groups={{ .BalanceSimilarNodeGroups }} - --cloud-provider={{ $.CloudProvider }} + {{ if (eq $.CloudProvider "aws") }} + - --aws-use-static-instance-list={{ .AWSUseStaticInstanceList }} + {{ end }} - --expander={{ .Expander }} {{ range $name, $spec := GetNodeInstanceGroups }} {{ if WithDefaultBool $spec.Autoscale true }}