Skip to content

Commit

Permalink
Set replicas to MaxReplicas if HPA is enabled (#833)
Browse files Browse the repository at this point in the history
* Set replicas to MaxReplicas if HPA is enabled

If number of replicas in current deployment status is bigger than
MaxReplicas and HPA is enabled set deployment replicas to MaxReplicas.

* Move replicas calculation in seperate function

Signed-off-by: binjip978 <[email protected]>
  • Loading branch information
binjip978 authored Apr 27, 2022
1 parent 480f357 commit 2f80f65
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 7 deletions.
22 changes: 15 additions & 7 deletions pkg/collector/reconcile/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"

"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
"github.com/open-telemetry/opentelemetry-operator/pkg/collector"
"github.com/open-telemetry/opentelemetry-operator/pkg/targetallocator"
)
Expand Down Expand Up @@ -98,14 +99,8 @@ func expectedDeployments(ctx context.Context, params Params, expected []appsv1.D
updated.ObjectMeta.Labels[k] = v
}

// if autoscale is enabled, use replicas from current Status
if params.Instance.Spec.MaxReplicas != nil {
currentReplicas := existing.Status.Replicas
// if replicas (minReplicas from HPA perspective) is bigger than
// current status use it.
if params.Instance.Spec.Replicas != nil && *params.Instance.Spec.Replicas > currentReplicas {
currentReplicas = *params.Instance.Spec.Replicas
}
currentReplicas := currentReplicasWithHPA(params.Instance.Spec, existing.Status.Replicas)
updated.Spec.Replicas = &currentReplicas
}

Expand Down Expand Up @@ -154,3 +149,16 @@ func deleteDeployments(ctx context.Context, params Params, expected []appsv1.Dep

return nil
}

// currentReplicasWithHPA calculates deployment replicas if HPA is enabled.
func currentReplicasWithHPA(spec v1alpha1.OpenTelemetryCollectorSpec, curr int32) int32 {
if curr < *spec.Replicas {
return *spec.Replicas
}

if curr > *spec.MaxReplicas {
return *spec.MaxReplicas
}

return curr
}
18 changes: 18 additions & 0 deletions pkg/collector/reconcile/deployment_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -234,3 +234,21 @@ func TestExpectedDeployments(t *testing.T) {

})
}

func TestCurrentReplicasWithHPA(t *testing.T) {
minReplicas := int32(2)
maxReplicas := int32(5)
spec := v1alpha1.OpenTelemetryCollectorSpec{
Replicas: &minReplicas,
MaxReplicas: &maxReplicas,
}

res := currentReplicasWithHPA(spec, 10)
assert.Equal(t, int32(5), res)

res = currentReplicasWithHPA(spec, 1)
assert.Equal(t, int32(2), res)

res = currentReplicasWithHPA(spec, 3)
assert.Equal(t, int32(3), res)
}

0 comments on commit 2f80f65

Please sign in to comment.