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/k8s/crds/kops.k8s.io_clusters.yaml b/k8s/crds/kops.k8s.io_clusters.yaml index 922d750283..81c98da8b5 100644 --- a/k8s/crds/kops.k8s.io_clusters.yaml +++ b/k8s/crds/kops.k8s.io_clusters.yaml @@ -1212,12 +1212,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 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. diff --git a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go index 13df98b377..b6ae3a26ac 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go @@ -4138,6 +4138,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 @@ -4201,6 +4203,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 62b99656d9..870cd890f5 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go @@ -2505,6 +2505,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 bf85719bdc..d561cf4c1c 100644 --- a/pkg/apis/kops/zz_generated.deepcopy.go +++ b/pkg/apis/kops/zz_generated.deepcopy.go @@ -2687,6 +2687,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()