From 97c71c274b9231304aa790f124d099d49367290d Mon Sep 17 00:00:00 2001 From: Joel Carter Date: Sun, 15 Nov 2020 07:53:58 -0600 Subject: [PATCH 1/3] Expose flags for HorizontalPodAutoscaler Enable setting of the `horizontal-pod-autoscaler-initial-readiness-delay` and `horizontal-pod-autoscaler-cpu-initialization-period` flags --- docs/cluster_spec.md | 2 ++ pkg/apis/kops/componentconfig.go | 6 ++++++ pkg/apis/kops/v1alpha2/componentconfig.go | 6 ++++++ 3 files changed, 14 insertions(+) diff --git a/docs/cluster_spec.md b/docs/cluster_spec.md index 58330f5b65..f78d904241 100644 --- a/docs/cluster_spec.md +++ b/docs/cluster_spec.md @@ -638,6 +638,8 @@ spec: horizontalPodAutoscalerDownscaleDelay: 5m0s horizontalPodAutoscalerDownscaleStabilization: 5m horizontalPodAutoscalerUpscaleDelay: 3m0s + horizontalPodAutoscalerInitialReadinessDelay: 30s + horizontalPodAutoscalerCpuInitializationPeriod: 5m horizontalPodAutoscalerTolerance: 0.1 experimentalClusterSigningDuration: 8760h0m0s enableProfiling: false diff --git a/pkg/apis/kops/componentconfig.go b/pkg/apis/kops/componentconfig.go index 03c8e90c02..44ffddcb8e 100644 --- a/pkg/apis/kops/componentconfig.go +++ b/pkg/apis/kops/componentconfig.go @@ -551,6 +551,12 @@ type KubeControllerManagerConfig struct { // long the autoscaler has to wait before another upscale operation can // be performed after the current one has completed. HorizontalPodAutoscalerUpscaleDelay *metav1.Duration `json:"horizontalPodAutoscalerUpscaleDelay,omitempty" flag:"horizontal-pod-autoscaler-upscale-delay"` + // HorizontalPodAutoscalerInitialReadinessDelay is the period after pod start + // during which readiness changes will be treated as initial readiness. (default 30s) + HorizontalPodAutoscalerInitialReadinessDelay *metav1.Duration `json:"horizontalPodAutoscalerInitialReadinessDelay,omitempty" flag:"horizontal-pod-autoscaler-initial-readiness-delay"` + // HorizontalPodAutoscalerCPUInitializationPeriod is the period after pod start + // when CPU samples might be skipped. (default 5m) + HorizontalPodAutoscalerCPUInitializationPeriod *metav1.Duration `json:"horizontalPodAutoscalerCpuInitializationPeriod,omitempty" flag:"horizontal-pod-autoscaler-cpu-initialization-period"` // HorizontalPodAutoscalerTolerance is the minimum change (from 1.0) in the // desired-to-actual metrics ratio for the horizontal pod autoscaler to // consider scaling. diff --git a/pkg/apis/kops/v1alpha2/componentconfig.go b/pkg/apis/kops/v1alpha2/componentconfig.go index f98fb6406b..e3aff541a1 100644 --- a/pkg/apis/kops/v1alpha2/componentconfig.go +++ b/pkg/apis/kops/v1alpha2/componentconfig.go @@ -551,6 +551,12 @@ type KubeControllerManagerConfig struct { // long the autoscaler has to wait before another upscale operation can // be performed after the current one has completed. HorizontalPodAutoscalerUpscaleDelay *metav1.Duration `json:"horizontalPodAutoscalerUpscaleDelay,omitempty" flag:"horizontal-pod-autoscaler-upscale-delay"` + // HorizontalPodAutoscalerInitialReadinessDelay is the period after pod start + // during which readiness changes will be treated as initial readiness. (default 30s) + HorizontalPodAutoscalerInitialReadinessDelay *metav1.Duration `json:"horizontalPodAutoscalerInitialReadinessDelay,omitempty" flag:"horizontal-pod-autoscaler-initial-readiness-delay"` + // HorizontalPodAutoscalerCPUInitializationPeriod is the period after pod start + // when CPU samples might be skipped. (default 5m) + HorizontalPodAutoscalerCPUInitializationPeriod *metav1.Duration `json:"horizontalPodAutoscalerCpuInitializationPeriod,omitempty" flag:"horizontal-pod-autoscaler-cpu-initialization-period"` // HorizontalPodAutoscalerTolerance is the minimum change (from 1.0) in the // desired-to-actual metrics ratio for the horizontal pod autoscaler to // consider scaling. From 97822d8043ff3b71ad5fe8f10828e9dabd5796b9 Mon Sep 17 00:00:00 2001 From: Joel Carter Date: Sun, 15 Nov 2020 08:16:21 -0600 Subject: [PATCH 2/3] Add generated files For `HorizontalPodAutoscalerInitialReadinessDelay` & `HorizontalPodAutoscalerCPUInitializationPeriod` --- pkg/apis/kops/v1alpha2/zz_generated.conversion.go | 4 ++++ pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go | 10 ++++++++++ pkg/apis/kops/zz_generated.deepcopy.go | 10 ++++++++++ 3 files changed, 24 insertions(+) diff --git a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go index 5c7a576023..1cc05b56d8 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go @@ -4134,6 +4134,8 @@ func autoConvert_v1alpha2_KubeControllerManagerConfig_To_kops_KubeControllerMana out.HorizontalPodAutoscalerDownscaleDelay = in.HorizontalPodAutoscalerDownscaleDelay out.HorizontalPodAutoscalerDownscaleStabilization = in.HorizontalPodAutoscalerDownscaleStabilization out.HorizontalPodAutoscalerUpscaleDelay = in.HorizontalPodAutoscalerUpscaleDelay + out.HorizontalPodAutoscalerInitialReadinessDelay = in.HorizontalPodAutoscalerInitialReadinessDelay + out.HorizontalPodAutoscalerCPUInitializationPeriod = in.HorizontalPodAutoscalerCPUInitializationPeriod out.HorizontalPodAutoscalerTolerance = in.HorizontalPodAutoscalerTolerance out.HorizontalPodAutoscalerUseRestClients = in.HorizontalPodAutoscalerUseRestClients out.ExperimentalClusterSigningDuration = in.ExperimentalClusterSigningDuration @@ -4197,6 +4199,8 @@ func autoConvert_kops_KubeControllerManagerConfig_To_v1alpha2_KubeControllerMana out.HorizontalPodAutoscalerDownscaleDelay = in.HorizontalPodAutoscalerDownscaleDelay out.HorizontalPodAutoscalerDownscaleStabilization = in.HorizontalPodAutoscalerDownscaleStabilization out.HorizontalPodAutoscalerUpscaleDelay = in.HorizontalPodAutoscalerUpscaleDelay + out.HorizontalPodAutoscalerInitialReadinessDelay = in.HorizontalPodAutoscalerInitialReadinessDelay + out.HorizontalPodAutoscalerCPUInitializationPeriod = in.HorizontalPodAutoscalerCPUInitializationPeriod out.HorizontalPodAutoscalerTolerance = in.HorizontalPodAutoscalerTolerance out.HorizontalPodAutoscalerUseRestClients = in.HorizontalPodAutoscalerUseRestClients out.ExperimentalClusterSigningDuration = in.ExperimentalClusterSigningDuration diff --git a/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go b/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go index 2ea6a2e04e..fea033e126 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go @@ -2495,6 +2495,16 @@ func (in *KubeControllerManagerConfig) DeepCopyInto(out *KubeControllerManagerCo *out = new(v1.Duration) **out = **in } + if in.HorizontalPodAutoscalerInitialReadinessDelay != nil { + in, out := &in.HorizontalPodAutoscalerInitialReadinessDelay, &out.HorizontalPodAutoscalerInitialReadinessDelay + *out = new(v1.Duration) + **out = **in + } + if in.HorizontalPodAutoscalerCPUInitializationPeriod != nil { + in, out := &in.HorizontalPodAutoscalerCPUInitializationPeriod, &out.HorizontalPodAutoscalerCPUInitializationPeriod + *out = new(v1.Duration) + **out = **in + } if in.HorizontalPodAutoscalerTolerance != nil { in, out := &in.HorizontalPodAutoscalerTolerance, &out.HorizontalPodAutoscalerTolerance x := (*in).DeepCopy() diff --git a/pkg/apis/kops/zz_generated.deepcopy.go b/pkg/apis/kops/zz_generated.deepcopy.go index c3290ee8c4..0a25670ff2 100644 --- a/pkg/apis/kops/zz_generated.deepcopy.go +++ b/pkg/apis/kops/zz_generated.deepcopy.go @@ -2677,6 +2677,16 @@ func (in *KubeControllerManagerConfig) DeepCopyInto(out *KubeControllerManagerCo *out = new(v1.Duration) **out = **in } + if in.HorizontalPodAutoscalerInitialReadinessDelay != nil { + in, out := &in.HorizontalPodAutoscalerInitialReadinessDelay, &out.HorizontalPodAutoscalerInitialReadinessDelay + *out = new(v1.Duration) + **out = **in + } + if in.HorizontalPodAutoscalerCPUInitializationPeriod != nil { + in, out := &in.HorizontalPodAutoscalerCPUInitializationPeriod, &out.HorizontalPodAutoscalerCPUInitializationPeriod + *out = new(v1.Duration) + **out = **in + } if in.HorizontalPodAutoscalerTolerance != nil { in, out := &in.HorizontalPodAutoscalerTolerance, &out.HorizontalPodAutoscalerTolerance x := (*in).DeepCopy() From 1b0d4452e32fee04896c9fe6e4f12b4be820b910 Mon Sep 17 00:00:00 2001 From: Joel Carter Date: Sun, 15 Nov 2020 08:57:37 -0600 Subject: [PATCH 3/3] Add generated CRDs --- k8s/crds/kops.k8s.io_clusters.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/k8s/crds/kops.k8s.io_clusters.yaml b/k8s/crds/kops.k8s.io_clusters.yaml index 3eb3f20b11..3fb3ff6296 100644 --- a/k8s/crds/kops.k8s.io_clusters.yaml +++ b/k8s/crds/kops.k8s.io_clusters.yaml @@ -1204,12 +1204,18 @@ spec: type: string description: FeatureGates is set of key=value pairs that describe feature gates for alpha/experimental features. type: object + horizontalPodAutoscalerCpuInitializationPeriod: + description: HorizontalPodAutoscalerCPUInitializationPeriod is the period after pod start when CPU samples might be skipped. (default 5m) + type: string horizontalPodAutoscalerDownscaleDelay: description: HorizontalPodAutoscalerDownscaleDelay is a duration that specifies how long the autoscaler has to wait before another downscale operation can be performed after the current one has completed. type: string horizontalPodAutoscalerDownscaleStabilization: description: HorizontalPodAutoscalerDownscaleStabilization is the period for which autoscaler will look backwards and not scale down below any recommendation it made during that period. type: string + horizontalPodAutoscalerInitialReadinessDelay: + description: HorizontalPodAutoscalerInitialReadinessDelay is the period after pod start during which readiness changes will be treated as initial readiness. (default 30s) + type: string horizontalPodAutoscalerSyncPeriod: description: HorizontalPodAutoscalerSyncPeriod is the amount of time between syncs During each period, the controller manager queries the resource utilization against the metrics specified in each HorizontalPodAutoscaler definition. type: string