Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Allow ScaledObject.MinReplicaCount to be set to 0 #5571

Open
wants to merge 81 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
7cf4c6c
fix: Allows ScaledObject.MinReplicaCount to be set to 0.
yorik Mar 4, 2024
489d9e8
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Mar 13, 2024
727ed55
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Mar 16, 2024
15a72e5
Adds CHANGELOG
yorik Mar 20, 2024
dafc860
Fixes CHANGELOG order
yorik Mar 20, 2024
0eddd1d
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Mar 25, 2024
4589080
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Mar 26, 2024
34864be
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Mar 26, 2024
75cbc11
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Mar 26, 2024
fd98a30
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Mar 28, 2024
bc56f3d
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 2, 2024
097ac6b
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 7, 2024
fe3d8fd
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 11, 2024
7e60aaa
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 11, 2024
a1a5d30
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 12, 2024
50229a2
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 16, 2024
255e688
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 17, 2024
7c71f9b
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 20, 2024
3c2d20e
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 22, 2024
1d5989a
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 23, 2024
1a7e5bf
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 24, 2024
e44c100
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 24, 2024
1a835eb
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 24, 2024
32ce1f8
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 25, 2024
7d6f1ba
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 25, 2024
49195f4
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 25, 2024
5b33604
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 25, 2024
445cba3
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Apr 30, 2024
4a9d950
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik May 2, 2024
81f371d
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik May 7, 2024
fb0a50c
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik May 8, 2024
45d0b12
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik May 9, 2024
02fd2cd
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik May 10, 2024
7810619
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik May 13, 2024
76efa11
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik May 15, 2024
c34bb49
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik May 21, 2024
d76b616
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik May 23, 2024
96ae74d
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik May 27, 2024
82e25fc
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik May 28, 2024
92278d8
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik May 29, 2024
6ed0d4f
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik May 29, 2024
ad64169
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jun 3, 2024
46a8fb1
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jun 3, 2024
2c9915a
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jun 4, 2024
d97529c
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jun 4, 2024
e45ed7b
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jun 5, 2024
7703a11
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jun 18, 2024
ad9e212
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jun 18, 2024
8e5666d
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jul 8, 2024
6c31602
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jul 8, 2024
acdf330
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jul 10, 2024
a0af13e
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jul 22, 2024
9a81552
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jul 22, 2024
75a9376
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jul 24, 2024
a31c843
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jul 25, 2024
f46dce8
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jul 25, 2024
c569a38
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jul 29, 2024
be1ddc6
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jul 30, 2024
7b29b59
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jul 30, 2024
43103cb
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jul 31, 2024
477c056
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Jul 31, 2024
57d802c
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Aug 2, 2024
13cbc04
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Aug 2, 2024
601674a
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Aug 3, 2024
5237059
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Aug 5, 2024
7d69691
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Aug 6, 2024
1349c5b
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Aug 7, 2024
a67b5ca
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Aug 7, 2024
82b9989
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Aug 12, 2024
cebea40
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Aug 12, 2024
920a463
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Aug 13, 2024
03676da
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Aug 19, 2024
82fe71f
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Aug 20, 2024
6d257b0
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Aug 20, 2024
85dabee
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Aug 21, 2024
bf012ce
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Aug 29, 2024
060725b
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Sep 2, 2024
c73c838
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Sep 3, 2024
6474c97
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Sep 5, 2024
f7ea1e2
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Sep 6, 2024
eaa2fa3
Merge remote-tracking branch 'upstream/main' into fix-5570
yorik Sep 18, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@ Here is an overview of all new **experimental** features:

### Fixes

- **General**: Allow ScaledObject.MinReplicaCount to be set to 0 ([#5570](https://github.com/kedacore/keda/issues/5570))
- **General**: Fix CVE-2024-28180 in github.com/go-jose/go-jose/v3 ([#5617](https://github.com/kedacore/keda/pull/5617))
- **General**: Fix fallback logic in formula-based evaluation ([#5666](https://github.com/kedacore/keda/issues/5666))
- **General**: Fix wrong scaler active value and paused value that are pushed to OpenTelemetry ([#5705](https://github.com/kedacore/keda/issues/5705))
Expand Down
28 changes: 12 additions & 16 deletions apis/keda/v1alpha1/scaledobject_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ const (
// Composite metric name used for scalingModifiers composite metric
CompositeMetricName string = "composite-metric"

defaultHPAMinReplicas int32 = 1
defaultHPAMaxReplicas int32 = 100
defaultMinReplicas int32 = 0
defaultMaxReplicas int32 = 100
)

// ScaledObjectSpec is the spec for a ScaledObject resource
Expand Down Expand Up @@ -233,31 +233,27 @@ func (so *ScaledObject) IsUsingModifiers() bool {
return so.Spec.Advanced != nil && !reflect.DeepEqual(so.Spec.Advanced.ScalingModifiers, ScalingModifiers{})
}

// getHPAMinReplicas returns MinReplicas based on definition in ScaledObject or default value if not defined
func (so *ScaledObject) GetHPAMinReplicas() *int32 {
if so.Spec.MinReplicaCount != nil && *so.Spec.MinReplicaCount > 0 {
return so.Spec.MinReplicaCount
// MinReplicaCount returns MinReplicaCount based on definition in ScaledObject or default value if not defined
func (so *ScaledObject) MinReplicaCount() int32 {
if so.Spec.MinReplicaCount != nil {
return *so.Spec.MinReplicaCount
}
tmp := defaultHPAMinReplicas
return &tmp
return defaultMinReplicas
}

// getHPAMaxReplicas returns MaxReplicas based on definition in ScaledObject or default value if not defined
func (so *ScaledObject) GetHPAMaxReplicas() int32 {
// MaxReplicaCount returns MaxReplicaCount based on definition in ScaledObject or default value if not defined
func (so *ScaledObject) MaxReplicaCount() int32 {
if so.Spec.MaxReplicaCount != nil {
return *so.Spec.MaxReplicaCount
}
return defaultHPAMaxReplicas
return defaultMaxReplicas
}

// checkReplicaCountBoundsAreValid checks that Idle/Min/Max ReplicaCount defined in ScaledObject are correctly specified
// i.e. that Min is not greater than Max or Idle greater or equal to Min
func CheckReplicaCountBoundsAreValid(scaledObject *ScaledObject) error {
min := int32(0)
if scaledObject.Spec.MinReplicaCount != nil {
min = *scaledObject.GetHPAMinReplicas()
}
max := scaledObject.GetHPAMaxReplicas()
min := scaledObject.MinReplicaCount()
max := scaledObject.MaxReplicaCount()

if min > max {
return fmt.Errorf("MinReplicaCount=%d must be less than MaxReplicaCount=%d", min, max)
Expand Down
17 changes: 8 additions & 9 deletions controllers/keda/hpa.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,25 +99,24 @@ func (r *ScaledObjectReconciler) newHPAForScaledObject(ctx context.Context, logg
labels[key] = value
}

minReplicas := scaledObject.GetHPAMinReplicas()
maxReplicas := scaledObject.GetHPAMaxReplicas()
// minReplicas on HPA must be > 0 without HPAScaleToZero feature.
minReplicas := max(scaledObject.MinReplicaCount(), 1)
maxReplicas := scaledObject.MaxReplicaCount()

pausedCount, err := executor.GetPausedReplicaCount(scaledObject)
if err != nil {
return nil, err
}
if pausedCount != nil {
// MinReplicas on HPA can't be 0
if *pausedCount == 0 {
*pausedCount = 1
}
minReplicas = pausedCount
maxReplicas = *pausedCount
// minReplicas on HPA must be > 0 without HPAScaleToZero feature.
replicas := max(*pausedCount, 1)
minReplicas = replicas
maxReplicas = replicas
}

hpa := &autoscalingv2.HorizontalPodAutoscaler{
Spec: autoscalingv2.HorizontalPodAutoscalerSpec{
MinReplicas: minReplicas,
MinReplicas: &minReplicas,
MaxReplicas: maxReplicas,
Metrics: scaledObjectMetricSpecs,
Behavior: behavior,
Expand Down
Loading