Skip to content

Commit 37cf662

Browse files
authoredSep 28, 2023
feat: Bump lowest supported k8s version to 1.23 (#2162)
* feat: Bump lowest supported k8s version to 1.23 Signed-off-by: Jorge Turrado <jorge.turrado@scrm.lidl> * u8ndo the format Signed-off-by: Jorge Turrado <jorge.turrado@scrm.lidl> * undo wrong change Signed-off-by: Jorge Turrado <jorge.turrado@scrm.lidl> * update kind-yaml Signed-off-by: Jorge Turrado <jorge.turrado@scrm.lidl> * unify stykle Signed-off-by: Jorge Turrado <jorge.turrado@scrm.lidl> * revert the change * apply feedback Signed-off-by: Jorge Turrado <jorge.turrado@scrm.lidl> * apply feedback Signed-off-by: Jorge Turrado <jorge.turrado@scrm.lidl> * apply feedback Signed-off-by: Jorge Turrado <jorge.turrado@scrm.lidl> --------- Signed-off-by: Jorge Turrado <jorge.turrado@scrm.lidl>
1 parent 29e8ba3 commit 37cf662

32 files changed

+277
-1057
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
2+
change_type: breaking
3+
4+
# The name of the component, or a single word describing the area of concern, (e.g. operator, target allocator, github action)
5+
component: operator
6+
7+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
8+
note: Get rid of autoscaling/v2beta2
9+
10+
# One or more tracking issues related to the change
11+
issues:
12+
- 2145
13+
14+
# (Optional) One or more lines of additional information to render under the primary note.
15+
# These lines will be padded with 2 spaces and then inserted directly into the document.
16+
# Use pipe (|) for multiline entries.
17+
subtext: |
18+
Kubernetes 1.23 is the minimum available version everywhere after 1.22 deprecation,
19+
due to it, the minimum required version has been updated to it, dropping support for
20+
autoscaling/v2beta2

‎.github/workflows/e2e.yaml

+2-6
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@ concurrency:
1010
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
1111
cancel-in-progress: true
1212

13-
env:
14-
CURRENT_KIND_VERSION: 0.20.0
15-
LEGACY_KIND_VERSION: 0.17.0 # for K8s versions latest kind doesn't support anymore
16-
1713
jobs:
1814
e2e-tests:
1915
name: End-to-end tests
@@ -25,7 +21,7 @@ jobs:
2521
# All Kubernetes version in between expose the same APIs, hence the operator
2622
# should be compatible with them.
2723
kube-version:
28-
- "1.19"
24+
- "1.23"
2925
- "1.28"
3026
group:
3127
- e2e
@@ -42,7 +38,7 @@ jobs:
4238

4339
- name: Setup kind
4440
env:
45-
KIND_VERSION: ${{ matrix.kube_version >= 1.21 && env.KIND_VERSION || env.LEGACY_KIND_VERSION }}
41+
KIND_VERSION: "0.20.0"
4642
run: go install sigs.k8s.io/kind@v${KIND_VERSION}
4743

4844
- name: Check out code into the Go module directory

‎.github/workflows/scorecard.yaml

+2-6
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,14 @@ concurrency:
1010
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
1111
cancel-in-progress: true
1212

13-
env:
14-
CURRENT_KIND_VERSION: 0.20.0
15-
LEGACY_KIND_VERSION: 0.17.0 # for K8s versions latest kind doesn't support anymore
16-
1713
jobs:
1814
scorecard-tests:
1915
name: test on k8s
2016
runs-on: ubuntu-22.04
2117
strategy:
2218
matrix:
2319
kube-version:
24-
- "1.19"
20+
- "1.23"
2521
- "1.28"
2622

2723
steps:
@@ -33,7 +29,7 @@ jobs:
3329

3430
- name: Setup kind
3531
env:
36-
KIND_VERSION: ${{ matrix.kube_version >= 1.21 && env.KIND_VERSION || env.LEGACY_KIND_VERSION }}
32+
KIND_VERSION: "0.20.0"
3733
run: go install sigs.k8s.io/kind@v${KIND_VERSION}
3834

3935
- name: Check out code into the Go module directory

‎controllers/opentelemetrycollector_controller.go

+1-7
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
2626
appsv1 "k8s.io/api/apps/v1"
2727
autoscalingv2 "k8s.io/api/autoscaling/v2"
28-
autoscalingv2beta2 "k8s.io/api/autoscaling/v2beta2"
2928
corev1 "k8s.io/api/core/v1"
3029
rbacv1 "k8s.io/api/rbac/v1"
3130
apierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -304,12 +303,7 @@ func (r *OpenTelemetryCollectorReconciler) SetupWithManager(mgr ctrl.Manager) er
304303
builder.Owns(&monitoringv1.ServiceMonitor{})
305304
}
306305

307-
autoscalingVersion := r.config.AutoscalingVersion()
308-
if autoscalingVersion == autodetect.AutoscalingVersionV2 {
309-
builder = builder.Owns(&autoscalingv2.HorizontalPodAutoscaler{})
310-
} else {
311-
builder = builder.Owns(&autoscalingv2beta2.HorizontalPodAutoscaler{})
312-
}
306+
builder = builder.Owns(&autoscalingv2.HorizontalPodAutoscaler{})
313307

314308
return builder.Complete(r)
315309
}

‎controllers/opentelemetrycollector_controller_test.go

-8
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,6 @@ import (
4444

4545
var logger = logf.Log.WithName("unit-tests")
4646
var mockAutoDetector = &mockAutoDetect{
47-
HPAVersionFunc: func() (autodetect.AutoscalingVersion, error) {
48-
return autodetect.AutoscalingVersionV2Beta2, nil
49-
},
5047
OpenShiftRoutesAvailabilityFunc: func() (autodetect.OpenShiftRoutesAvailability, error) {
5148
return autodetect.OpenShiftRoutesAvailable, nil
5249
},
@@ -336,11 +333,6 @@ var _ autodetect.AutoDetect = (*mockAutoDetect)(nil)
336333

337334
type mockAutoDetect struct {
338335
OpenShiftRoutesAvailabilityFunc func() (autodetect.OpenShiftRoutesAvailability, error)
339-
HPAVersionFunc func() (autodetect.AutoscalingVersion, error)
340-
}
341-
342-
func (m *mockAutoDetect) HPAVersion() (autodetect.AutoscalingVersion, error) {
343-
return m.HPAVersionFunc()
344336
}
345337

346338
func (m *mockAutoDetect) OpenShiftRoutesAvailability() (autodetect.OpenShiftRoutesAvailability, error) {

‎controllers/reconcile_test.go

+2-46
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ import (
3838
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
3939
ta "github.com/open-telemetry/opentelemetry-operator/internal/manifests/targetallocator/adapters"
4040
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
41-
"github.com/open-telemetry/opentelemetry-operator/pkg/autodetect"
4241
)
4342

4443
const (
@@ -276,54 +275,11 @@ func TestOpenTelemetryCollectorReconciler_Reconcile(t *testing.T) {
276275
},
277276
},
278277
},
279-
{
280-
name: "hpa v2beta2 deployment collector",
281-
args: args{
282-
params: paramsWithHPA(autodetect.AutoscalingVersionV2Beta2, 3, 5),
283-
updates: []manifests.Params{paramsWithHPA(autodetect.AutoscalingVersionV2Beta2, 1, 9)},
284-
},
285-
want: []want{
286-
{
287-
result: controllerruntime.Result{},
288-
checks: []check{
289-
func(t *testing.T, appliedInstance v1alpha1.OpenTelemetryCollector) {
290-
actual := autoscalingv2beta2.HorizontalPodAutoscaler{}
291-
exists, hpaErr := populateObjectIfExists(t, &actual, namespacedObjectName(appliedInstance, naming.HorizontalPodAutoscaler))
292-
assert.NoError(t, hpaErr)
293-
require.Len(t, actual.Spec.Metrics, 1)
294-
assert.Equal(t, int32(90), *actual.Spec.Metrics[0].Resource.Target.AverageUtilization)
295-
assert.Equal(t, int32(3), *actual.Spec.MinReplicas)
296-
assert.Equal(t, int32(5), actual.Spec.MaxReplicas)
297-
assert.True(t, exists)
298-
},
299-
},
300-
wantErr: assert.NoError,
301-
validateErr: assert.NoError,
302-
},
303-
{
304-
result: controllerruntime.Result{},
305-
checks: []check{
306-
func(t *testing.T, appliedInstance v1alpha1.OpenTelemetryCollector) {
307-
actual := autoscalingv2beta2.HorizontalPodAutoscaler{}
308-
exists, hpaErr := populateObjectIfExists(t, &actual, namespacedObjectName(appliedInstance, naming.HorizontalPodAutoscaler))
309-
assert.NoError(t, hpaErr)
310-
require.Len(t, actual.Spec.Metrics, 1)
311-
assert.Equal(t, int32(90), *actual.Spec.Metrics[0].Resource.Target.AverageUtilization)
312-
assert.Equal(t, int32(1), *actual.Spec.MinReplicas)
313-
assert.Equal(t, int32(9), actual.Spec.MaxReplicas)
314-
assert.True(t, exists)
315-
},
316-
},
317-
wantErr: assert.NoError,
318-
validateErr: assert.NoError,
319-
},
320-
},
321-
},
322278
{
323279
name: "hpa v2 deployment collector",
324280
args: args{
325-
params: paramsWithHPA(autodetect.AutoscalingVersionV2, 3, 5),
326-
updates: []manifests.Params{paramsWithHPA(autodetect.AutoscalingVersionV2, 1, 9)},
281+
params: paramsWithHPA(3, 5),
282+
updates: []manifests.Params{paramsWithHPA(1, 9)},
327283
},
328284
want: []want{
329285
{

‎controllers/suite_test.go

+2-12
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ import (
4949
"github.com/open-telemetry/opentelemetry-operator/internal/config"
5050
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
5151
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/collector/testdata"
52-
"github.com/open-telemetry/opentelemetry-operator/pkg/autodetect"
5352
// +kubebuilder:scaffold:imports
5453
)
5554

@@ -277,24 +276,15 @@ func newParams(taContainerImage string, file string) (manifests.Params, error) {
277276
}, nil
278277
}
279278

280-
func paramsWithHPA(autoscalingVersion autodetect.AutoscalingVersion, minReps, maxReps int32) manifests.Params {
279+
func paramsWithHPA(minReps, maxReps int32) manifests.Params {
281280
configYAML, err := os.ReadFile("testdata/test.yaml")
282281
if err != nil {
283282
fmt.Printf("Error getting yaml file: %v", err)
284283
}
285284

286285
cpuUtilization := int32(90)
287286

288-
mockAutoDetector := &mockAutoDetect{
289-
HPAVersionFunc: func() (autodetect.AutoscalingVersion, error) {
290-
return autoscalingVersion, nil
291-
},
292-
}
293-
configuration := config.New(config.WithAutoDetect(mockAutoDetector), config.WithCollectorImage(defaultCollectorImage), config.WithTargetAllocatorImage(defaultTaAllocationImage))
294-
err = configuration.AutoDetect()
295-
if err != nil {
296-
logger.Error(err, "configuration.autodetect failed")
297-
}
287+
configuration := config.New(config.WithCollectorImage(defaultCollectorImage), config.WithTargetAllocatorImage(defaultTaAllocationImage))
298288

299289
return manifests.Params{
300290
Config: configuration,

‎internal/config/main.go

-46
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ type Config struct {
5151
labelsFilter []string
5252
openshiftRoutes openshiftRoutesStore
5353
autoDetectFrequency time.Duration
54-
hpaVersion hpaVersionStore
5554
}
5655

5756
// New constructs a new configuration based on the given options.
@@ -63,7 +62,6 @@ func New(opts ...Option) Config {
6362
targetAllocatorConfigMapEntry: defaultTargetAllocatorConfigMapEntry,
6463
logger: logf.Log.WithName("config"),
6564
openshiftRoutes: newOpenShiftRoutesWrapper(),
66-
hpaVersion: newHPAVersionWrapper(),
6765
version: version.Get(),
6866
onOpenShiftRoutesChange: newOnChange(),
6967
}
@@ -81,7 +79,6 @@ func New(opts ...Option) Config {
8179
targetAllocatorConfigMapEntry: o.targetAllocatorConfigMapEntry,
8280
logger: o.logger,
8381
openshiftRoutes: o.openshiftRoutes,
84-
hpaVersion: o.hpaVersion,
8582
onOpenShiftRoutesChange: o.onOpenShiftRoutesChange,
8683
autoInstrumentationJavaImage: o.autoInstrumentationJavaImage,
8784
autoInstrumentationNodeJSImage: o.autoInstrumentationNodeJSImage,
@@ -129,15 +126,6 @@ func (c *Config) AutoDetect() error {
129126
}
130127
}
131128

132-
hpaV, err := c.autoDetect.HPAVersion()
133-
if err != nil {
134-
return err
135-
}
136-
if c.hpaVersion.Get() != hpaV {
137-
c.logger.V(1).Info("HPA version detected", "version", hpaV)
138-
c.hpaVersion.Set(hpaV)
139-
}
140-
141129
return nil
142130
}
143131

@@ -166,11 +154,6 @@ func (c *Config) OpenShiftRoutes() autodetect.OpenShiftRoutesAvailability {
166154
return c.openshiftRoutes.Get()
167155
}
168156

169-
// AutoscalingVersion represents the preferred version of autoscaling.
170-
func (c *Config) AutoscalingVersion() autodetect.AutoscalingVersion {
171-
return c.hpaVersion.Get()
172-
}
173-
174157
// AutoInstrumentationJavaImage returns OpenTelemetry Java auto-instrumentation container image.
175158
func (c *Config) AutoInstrumentationJavaImage() string {
176159
return c.autoInstrumentationJavaImage
@@ -212,35 +195,6 @@ func (c *Config) RegisterOpenShiftRoutesChangeCallback(f func() error) {
212195
c.onOpenShiftRoutesChange.Register(f)
213196
}
214197

215-
type hpaVersionStore interface {
216-
Set(hpaV autodetect.AutoscalingVersion)
217-
Get() autodetect.AutoscalingVersion
218-
}
219-
220-
func newHPAVersionWrapper() hpaVersionStore {
221-
return &hpaVersionWrapper{
222-
current: autodetect.AutoscalingVersionUnknown,
223-
}
224-
}
225-
226-
type hpaVersionWrapper struct {
227-
mu sync.Mutex
228-
current autodetect.AutoscalingVersion
229-
}
230-
231-
func (p *hpaVersionWrapper) Set(hpaV autodetect.AutoscalingVersion) {
232-
p.mu.Lock()
233-
p.current = hpaV
234-
p.mu.Unlock()
235-
}
236-
237-
func (p *hpaVersionWrapper) Get() autodetect.AutoscalingVersion {
238-
p.mu.Lock()
239-
hpaV := p.current
240-
p.mu.Unlock()
241-
return hpaV
242-
}
243-
244198
type openshiftRoutesStore interface {
245199
Set(ora autodetect.OpenShiftRoutesAvailability)
246200
Get() autodetect.OpenShiftRoutesAvailability

‎internal/config/main_test.go

-14
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ func TestNewConfig(t *testing.T) {
3838
assert.Equal(t, "some-image", cfg.CollectorImage())
3939
assert.Equal(t, "some-config.yaml", cfg.CollectorConfigMapEntry())
4040
assert.Equal(t, autodetect.OpenShiftRoutesNotAvailable, cfg.OpenShiftRoutes())
41-
assert.Equal(t, autodetect.AutoscalingVersionUnknown, cfg.AutoscalingVersion())
4241
}
4342

4443
func TestOnPlatformChangeCallback(t *testing.T) {
@@ -78,10 +77,6 @@ func TestAutoDetectInBackground(t *testing.T) {
7877
wg.Done()
7978
return autodetect.OpenShiftRoutesNotAvailable, nil
8079
},
81-
HPAVersionFunc: func() (autodetect.AutoscalingVersion, error) {
82-
wg.Done()
83-
return autodetect.AutoscalingVersionV2, nil
84-
},
8580
}
8681
cfg := config.New(
8782
config.WithAutoDetect(mock),
@@ -90,7 +85,6 @@ func TestAutoDetectInBackground(t *testing.T) {
9085

9186
// sanity check
9287
require.Equal(t, autodetect.OpenShiftRoutesNotAvailable, cfg.OpenShiftRoutes())
93-
require.Equal(t, autodetect.AutoscalingVersionUnknown, cfg.AutoscalingVersion())
9488

9589
// test
9690
err := cfg.StartAutoDetect()
@@ -104,14 +98,6 @@ var _ autodetect.AutoDetect = (*mockAutoDetect)(nil)
10498

10599
type mockAutoDetect struct {
106100
OpenShiftRoutesAvailabilityFunc func() (autodetect.OpenShiftRoutesAvailability, error)
107-
HPAVersionFunc func() (autodetect.AutoscalingVersion, error)
108-
}
109-
110-
func (m *mockAutoDetect) HPAVersion() (autodetect.AutoscalingVersion, error) {
111-
if m.HPAVersionFunc != nil {
112-
return m.HPAVersionFunc()
113-
}
114-
return autodetect.DefaultAutoscalingVersion, nil
115101
}
116102

117103
func (m *mockAutoDetect) OpenShiftRoutesAvailability() (autodetect.OpenShiftRoutesAvailability, error) {

‎internal/config/options.go

-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ type options struct {
4646
onOpenShiftRoutesChange changeHandler
4747
labelsFilter []string
4848
openshiftRoutes openshiftRoutesStore
49-
hpaVersion hpaVersionStore
5049
autoDetectFrequency time.Duration
5150
}
5251

‎internal/manifests/collector/horizontalpodautoscaler.go

+43-207
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,13 @@ package collector
1717
import (
1818
"github.com/go-logr/logr"
1919
autoscalingv2 "k8s.io/api/autoscaling/v2"
20-
autoscalingv2beta2 "k8s.io/api/autoscaling/v2beta2"
2120
corev1 "k8s.io/api/core/v1"
2221
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2322
"sigs.k8s.io/controller-runtime/pkg/client"
2423

2524
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
2625
"github.com/open-telemetry/opentelemetry-operator/internal/config"
2726
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
28-
"github.com/open-telemetry/opentelemetry-operator/pkg/autodetect"
2927
)
3028

3129
func HorizontalPodAutoscaler(cfg config.Config, logger logr.Logger, otelcol v1alpha1.OpenTelemetryCollector) client.Object {
@@ -46,7 +44,6 @@ func HorizontalPodAutoscaler(cfg config.Config, logger logr.Logger, otelcol v1al
4644
logger.Info("hpa field is unset in Spec, skipping autoscaler creation")
4745
return nil
4846
}
49-
autoscalingVersion := cfg.AutoscalingVersion()
5047

5148
if otelcol.Spec.Autoscaler.MaxReplicas == nil {
5249
otelcol.Spec.Autoscaler.MaxReplicas = otelcol.Spec.MaxReplicas
@@ -60,225 +57,64 @@ func HorizontalPodAutoscaler(cfg config.Config, logger logr.Logger, otelcol v1al
6057
}
6158
}
6259

63-
if autoscalingVersion == autodetect.AutoscalingVersionV2Beta2 {
64-
metrics := []autoscalingv2beta2.MetricSpec{}
60+
metrics := []autoscalingv2.MetricSpec{}
6561

66-
if otelcol.Spec.Autoscaler.TargetMemoryUtilization != nil {
67-
utilizationTarget := autoscalingv2beta2.MetricSpec{
68-
Type: autoscalingv2beta2.ResourceMetricSourceType,
69-
Resource: &autoscalingv2beta2.ResourceMetricSource{
70-
Name: corev1.ResourceMemory,
71-
Target: autoscalingv2beta2.MetricTarget{
72-
Type: autoscalingv2beta2.UtilizationMetricType,
73-
AverageUtilization: otelcol.Spec.Autoscaler.TargetMemoryUtilization,
74-
},
62+
if otelcol.Spec.Autoscaler.TargetMemoryUtilization != nil {
63+
memoryTarget := autoscalingv2.MetricSpec{
64+
Type: autoscalingv2.ResourceMetricSourceType,
65+
Resource: &autoscalingv2.ResourceMetricSource{
66+
Name: corev1.ResourceMemory,
67+
Target: autoscalingv2.MetricTarget{
68+
Type: autoscalingv2.UtilizationMetricType,
69+
AverageUtilization: otelcol.Spec.Autoscaler.TargetMemoryUtilization,
7570
},
76-
}
77-
metrics = append(metrics, utilizationTarget)
71+
},
7872
}
73+
metrics = append(metrics, memoryTarget)
74+
}
7975

80-
targetCPUUtilization := autoscalingv2beta2.MetricSpec{
81-
Type: autoscalingv2beta2.ResourceMetricSourceType,
82-
Resource: &autoscalingv2beta2.ResourceMetricSource{
76+
if otelcol.Spec.Autoscaler.TargetCPUUtilization != nil {
77+
cpuTarget := autoscalingv2.MetricSpec{
78+
Type: autoscalingv2.ResourceMetricSourceType,
79+
Resource: &autoscalingv2.ResourceMetricSource{
8380
Name: corev1.ResourceCPU,
84-
Target: autoscalingv2beta2.MetricTarget{
85-
Type: autoscalingv2beta2.UtilizationMetricType,
81+
Target: autoscalingv2.MetricTarget{
82+
Type: autoscalingv2.UtilizationMetricType,
8683
AverageUtilization: otelcol.Spec.Autoscaler.TargetCPUUtilization,
8784
},
8885
},
8986
}
90-
metrics = append(metrics, targetCPUUtilization)
91-
92-
autoscaler := autoscalingv2beta2.HorizontalPodAutoscaler{
93-
ObjectMeta: objectMeta,
94-
Spec: autoscalingv2beta2.HorizontalPodAutoscalerSpec{
95-
ScaleTargetRef: autoscalingv2beta2.CrossVersionObjectReference{
96-
APIVersion: v1alpha1.GroupVersion.String(),
97-
Kind: "OpenTelemetryCollector",
98-
Name: naming.OpenTelemetryCollector(otelcol.Name),
99-
},
100-
MinReplicas: otelcol.Spec.Autoscaler.MinReplicas,
101-
MaxReplicas: *otelcol.Spec.Autoscaler.MaxReplicas,
102-
Metrics: metrics,
103-
},
104-
}
105-
106-
if otelcol.Spec.Autoscaler.Behavior != nil {
107-
behavior := ConvertToV2beta2Behavior(*otelcol.Spec.Autoscaler.Behavior)
108-
autoscaler.Spec.Behavior = &behavior
109-
}
110-
111-
// check for custom metrics
112-
if len(otelcol.Spec.Autoscaler.Metrics) > 0 {
113-
metrics := ConvertToV2Beta2PodMetrics(otelcol.Spec.Autoscaler.Metrics)
114-
autoscaler.Spec.Metrics = append(autoscaler.Spec.Metrics, metrics...)
115-
}
116-
117-
result = &autoscaler
118-
} else {
119-
metrics := []autoscalingv2.MetricSpec{}
120-
121-
if otelcol.Spec.Autoscaler.TargetMemoryUtilization != nil {
122-
utilizationTarget := autoscalingv2.MetricSpec{
123-
Type: autoscalingv2.ResourceMetricSourceType,
124-
Resource: &autoscalingv2.ResourceMetricSource{
125-
Name: corev1.ResourceMemory,
126-
Target: autoscalingv2.MetricTarget{
127-
Type: autoscalingv2.UtilizationMetricType,
128-
AverageUtilization: otelcol.Spec.Autoscaler.TargetMemoryUtilization,
129-
},
130-
},
131-
}
132-
metrics = append(metrics, utilizationTarget)
133-
}
134-
135-
if otelcol.Spec.Autoscaler.TargetCPUUtilization != nil {
136-
targetCPUUtilization := autoscalingv2.MetricSpec{
137-
Type: autoscalingv2.ResourceMetricSourceType,
138-
Resource: &autoscalingv2.ResourceMetricSource{
139-
Name: corev1.ResourceCPU,
140-
Target: autoscalingv2.MetricTarget{
141-
Type: autoscalingv2.UtilizationMetricType,
142-
AverageUtilization: otelcol.Spec.Autoscaler.TargetCPUUtilization,
143-
},
144-
},
145-
}
146-
metrics = append(metrics, targetCPUUtilization)
147-
}
148-
149-
autoscaler := autoscalingv2.HorizontalPodAutoscaler{
150-
ObjectMeta: objectMeta,
151-
Spec: autoscalingv2.HorizontalPodAutoscalerSpec{
152-
ScaleTargetRef: autoscalingv2.CrossVersionObjectReference{
153-
APIVersion: v1alpha1.GroupVersion.String(),
154-
Kind: "OpenTelemetryCollector",
155-
Name: naming.OpenTelemetryCollector(otelcol.Name),
156-
},
157-
MinReplicas: otelcol.Spec.Autoscaler.MinReplicas,
158-
MaxReplicas: *otelcol.Spec.Autoscaler.MaxReplicas,
159-
Metrics: metrics,
160-
},
161-
}
162-
if otelcol.Spec.Autoscaler.Behavior != nil {
163-
autoscaler.Spec.Behavior = otelcol.Spec.Autoscaler.Behavior
164-
}
165-
166-
// convert from v1alpha1.MetricSpec into a autoscalingv2.MetricSpec.
167-
for _, metric := range otelcol.Spec.Autoscaler.Metrics {
168-
if metric.Type == autoscalingv2.PodsMetricSourceType {
169-
v2metric := autoscalingv2.MetricSpec{
170-
Type: metric.Type,
171-
Pods: metric.Pods,
172-
}
173-
autoscaler.Spec.Metrics = append(autoscaler.Spec.Metrics, v2metric)
174-
} // pod metrics
175-
}
176-
result = &autoscaler
87+
metrics = append(metrics, cpuTarget)
17788
}
17889

179-
return result
180-
}
181-
182-
func ConvertToV2Beta2PodMetrics(v2metrics []v1alpha1.MetricSpec) []autoscalingv2beta2.MetricSpec {
183-
metrics := make([]autoscalingv2beta2.MetricSpec, len(v2metrics))
184-
185-
for i, v2metric := range v2metrics {
186-
metrics[i].Type = autoscalingv2beta2.MetricSourceType(v2metric.Type)
187-
if v2metric.Pods != nil {
188-
metrics[i].Pods = &autoscalingv2beta2.PodsMetricSource{
189-
Metric: autoscalingv2beta2.MetricIdentifier{
190-
Name: v2metric.Pods.Metric.Name,
191-
Selector: v2metric.Pods.Metric.Selector,
192-
},
193-
Target: autoscalingv2beta2.MetricTarget{
194-
Type: autoscalingv2beta2.MetricTargetType(v2metric.Pods.Target.Type),
195-
AverageValue: v2metric.Pods.Target.AverageValue,
196-
},
197-
}
198-
}
90+
autoscaler := autoscalingv2.HorizontalPodAutoscaler{
91+
ObjectMeta: objectMeta,
92+
Spec: autoscalingv2.HorizontalPodAutoscalerSpec{
93+
ScaleTargetRef: autoscalingv2.CrossVersionObjectReference{
94+
APIVersion: v1alpha1.GroupVersion.String(),
95+
Kind: "OpenTelemetryCollector",
96+
Name: naming.OpenTelemetryCollector(otelcol.Name),
97+
},
98+
MinReplicas: otelcol.Spec.Autoscaler.MinReplicas,
99+
MaxReplicas: *otelcol.Spec.Autoscaler.MaxReplicas,
100+
Metrics: metrics,
101+
},
199102
}
200-
201-
return metrics
202-
}
203-
204-
// Create a v2beta2 HorizontalPodAutoscalerBehavior from a v2 instance.
205-
func ConvertToV2beta2Behavior(v2behavior autoscalingv2.HorizontalPodAutoscalerBehavior) autoscalingv2beta2.HorizontalPodAutoscalerBehavior {
206-
behavior := &autoscalingv2beta2.HorizontalPodAutoscalerBehavior{}
207-
208-
if v2behavior.ScaleUp != nil {
209-
scaleUpRules := &autoscalingv2beta2.HPAScalingRules{}
210-
scaleUpTime := *v2behavior.ScaleUp.StabilizationWindowSeconds
211-
scaleUpRules.StabilizationWindowSeconds = &scaleUpTime
212-
213-
if v2behavior.ScaleUp.SelectPolicy != nil {
214-
scaleUpSelectPolicy := ConvertToV2Beta2SelectPolicy(*v2behavior.ScaleUp.SelectPolicy)
215-
scaleUpRules.SelectPolicy = &scaleUpSelectPolicy
216-
}
217-
if v2behavior.ScaleUp.Policies != nil {
218-
scaleUpPolicies := []autoscalingv2beta2.HPAScalingPolicy{}
219-
for _, policy := range v2behavior.ScaleUp.Policies {
220-
v2beta2policy := ConvertToV2Beta2HPAScalingPolicy(policy)
221-
scaleUpPolicies = append(scaleUpPolicies, v2beta2policy)
222-
}
223-
scaleUpRules.Policies = scaleUpPolicies
224-
}
225-
226-
behavior.ScaleUp = scaleUpRules
103+
if otelcol.Spec.Autoscaler.Behavior != nil {
104+
autoscaler.Spec.Behavior = otelcol.Spec.Autoscaler.Behavior
227105
}
228106

229-
if v2behavior.ScaleDown != nil {
230-
scaleDownRules := &autoscalingv2beta2.HPAScalingRules{}
231-
scaleDownTime := *v2behavior.ScaleDown.StabilizationWindowSeconds
232-
scaleDownRules.StabilizationWindowSeconds = &scaleDownTime
233-
234-
if v2behavior.ScaleDown.SelectPolicy != nil {
235-
scaleDownSelectPolicy := ConvertToV2Beta2SelectPolicy(*v2behavior.ScaleDown.SelectPolicy)
236-
scaleDownRules.SelectPolicy = &scaleDownSelectPolicy
237-
}
238-
if v2behavior.ScaleDown.Policies != nil {
239-
ScaleDownPolicies := []autoscalingv2beta2.HPAScalingPolicy{}
240-
for _, policy := range v2behavior.ScaleDown.Policies {
241-
v2beta2policy := ConvertToV2Beta2HPAScalingPolicy(policy)
242-
ScaleDownPolicies = append(ScaleDownPolicies, v2beta2policy)
107+
// convert from v1alpha1.MetricSpec into a autoscalingv2.MetricSpec.
108+
for _, metric := range otelcol.Spec.Autoscaler.Metrics {
109+
if metric.Type == autoscalingv2.PodsMetricSourceType {
110+
v2metric := autoscalingv2.MetricSpec{
111+
Type: metric.Type,
112+
Pods: metric.Pods,
243113
}
244-
scaleDownRules.Policies = ScaleDownPolicies
245-
}
246-
247-
behavior.ScaleDown = scaleDownRules
248-
}
249-
250-
return *behavior
251-
}
252-
253-
func ConvertToV2Beta2HPAScalingPolicy(v2policy autoscalingv2.HPAScalingPolicy) autoscalingv2beta2.HPAScalingPolicy {
254-
v2beta2Policy := &autoscalingv2beta2.HPAScalingPolicy{
255-
Value: v2policy.Value,
256-
PeriodSeconds: v2policy.PeriodSeconds,
114+
autoscaler.Spec.Metrics = append(autoscaler.Spec.Metrics, v2metric)
115+
} // pod metrics
257116
}
117+
result = &autoscaler
258118

259-
switch v2policy.Type {
260-
case autoscalingv2.PodsScalingPolicy:
261-
v2beta2Policy.Type = autoscalingv2beta2.PodsScalingPolicy
262-
case autoscalingv2.PercentScalingPolicy:
263-
v2beta2Policy.Type = autoscalingv2beta2.PercentScalingPolicy
264-
}
265-
266-
return *v2beta2Policy
267-
}
268-
269-
func ConvertToV2Beta2SelectPolicy(scalingPolicy autoscalingv2.ScalingPolicySelect) autoscalingv2beta2.ScalingPolicySelect {
270-
max := autoscalingv2beta2.MaxPolicySelect
271-
min := autoscalingv2beta2.MinPolicySelect
272-
disabled := autoscalingv2beta2.DisabledPolicySelect
273-
274-
switch scalingPolicy {
275-
case autoscalingv2.MaxChangePolicySelect:
276-
return max
277-
case autoscalingv2.MinChangePolicySelect:
278-
return min
279-
case autoscalingv2.DisabledPolicySelect:
280-
return disabled
281-
}
282-
283-
return disabled
119+
return result
284120
}

‎internal/manifests/collector/horizontalpodautoscaler_test.go

+16-158
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,20 @@ import (
1919

2020
"github.com/stretchr/testify/assert"
2121
autoscalingv2 "k8s.io/api/autoscaling/v2"
22-
autoscalingv2beta2 "k8s.io/api/autoscaling/v2beta2"
2322
corev1 "k8s.io/api/core/v1"
24-
"k8s.io/apimachinery/pkg/api/resource"
2523
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2624

2725
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
2826
"github.com/open-telemetry/opentelemetry-operator/internal/config"
2927
. "github.com/open-telemetry/opentelemetry-operator/internal/manifests/collector"
30-
"github.com/open-telemetry/opentelemetry-operator/pkg/autodetect"
3128
)
3229

3330
func TestHPA(t *testing.T) {
3431
type test struct {
35-
name string
36-
autoscalingVersion autodetect.AutoscalingVersion
32+
name string
3733
}
38-
v2Test := test{autodetect.AutoscalingVersionV2.String(), autodetect.AutoscalingVersionV2}
39-
v2beta2Test := test{autodetect.AutoscalingVersionV2Beta2.String(), autodetect.AutoscalingVersionV2Beta2}
40-
tests := []test{v2Test, v2beta2Test}
34+
v2Test := test{}
35+
tests := []test{v2Test}
4136

4237
var minReplicas int32 = 3
4338
var maxReplicas int32 = 5
@@ -76,164 +71,27 @@ func TestHPA(t *testing.T) {
7671
for _, otelcol := range otelcols {
7772
for _, test := range tests {
7873
t.Run(test.name, func(t *testing.T) {
79-
mockAutoDetector := &mockAutoDetect{
80-
HPAVersionFunc: func() (autodetect.AutoscalingVersion, error) {
81-
return test.autoscalingVersion, nil
82-
},
83-
}
84-
configuration := config.New(config.WithAutoDetect(mockAutoDetector))
85-
err := configuration.AutoDetect()
86-
assert.NoError(t, err)
74+
configuration := config.New()
8775
raw := HorizontalPodAutoscaler(configuration, logger, otelcol)
8876

89-
if configuration.AutoscalingVersion() == autodetect.AutoscalingVersionV2Beta2 {
90-
hpa := raw.(*autoscalingv2beta2.HorizontalPodAutoscaler)
91-
92-
// verify
93-
assert.Equal(t, "my-instance-collector", hpa.Name)
94-
assert.Equal(t, "my-instance-collector", hpa.Labels["app.kubernetes.io/name"])
95-
assert.Equal(t, int32(3), *hpa.Spec.MinReplicas)
96-
assert.Equal(t, int32(5), hpa.Spec.MaxReplicas)
97-
for _, metric := range hpa.Spec.Metrics {
98-
if metric.Resource.Name == corev1.ResourceCPU {
99-
assert.Equal(t, cpuUtilization, *metric.Resource.Target.AverageUtilization)
100-
} else if metric.Resource.Name == corev1.ResourceMemory {
101-
assert.Equal(t, memoryUtilization, *metric.Resource.Target.AverageUtilization)
102-
}
103-
}
104-
} else {
105-
hpa := raw.(*autoscalingv2.HorizontalPodAutoscaler)
77+
hpa := raw.(*autoscalingv2.HorizontalPodAutoscaler)
10678

107-
// verify
108-
assert.Equal(t, "my-instance-collector", hpa.Name)
109-
assert.Equal(t, "my-instance-collector", hpa.Labels["app.kubernetes.io/name"])
110-
assert.Equal(t, int32(3), *hpa.Spec.MinReplicas)
111-
assert.Equal(t, int32(5), hpa.Spec.MaxReplicas)
112-
assert.Equal(t, 2, len(hpa.Spec.Metrics))
79+
// verify
80+
assert.Equal(t, "my-instance-collector", hpa.Name)
81+
assert.Equal(t, "my-instance-collector", hpa.Labels["app.kubernetes.io/name"])
82+
assert.Equal(t, int32(3), *hpa.Spec.MinReplicas)
83+
assert.Equal(t, int32(5), hpa.Spec.MaxReplicas)
84+
assert.Equal(t, 2, len(hpa.Spec.Metrics))
11385

114-
for _, metric := range hpa.Spec.Metrics {
115-
if metric.Resource.Name == corev1.ResourceCPU {
116-
assert.Equal(t, cpuUtilization, *metric.Resource.Target.AverageUtilization)
117-
} else if metric.Resource.Name == corev1.ResourceMemory {
118-
assert.Equal(t, memoryUtilization, *metric.Resource.Target.AverageUtilization)
119-
}
86+
for _, metric := range hpa.Spec.Metrics {
87+
if metric.Resource.Name == corev1.ResourceCPU {
88+
assert.Equal(t, cpuUtilization, *metric.Resource.Target.AverageUtilization)
89+
} else if metric.Resource.Name == corev1.ResourceMemory {
90+
assert.Equal(t, memoryUtilization, *metric.Resource.Target.AverageUtilization)
12091
}
12192
}
12293
})
12394
}
12495
}
12596

12697
}
127-
128-
func TestConvertToV2Beta2PodMetrics(t *testing.T) {
129-
expectedValues := []int64{int64(10), int64(20)}
130-
expectedNames := []string{"custom1", "custom2"}
131-
132-
v2metrics := []v1alpha1.MetricSpec{
133-
{
134-
Type: autoscalingv2.PodsMetricSourceType,
135-
Pods: &autoscalingv2.PodsMetricSource{
136-
Metric: autoscalingv2.MetricIdentifier{
137-
Name: "custom1",
138-
},
139-
Target: autoscalingv2.MetricTarget{
140-
Type: autoscalingv2.AverageValueMetricType,
141-
AverageValue: resource.NewQuantity(int64(10), resource.DecimalSI),
142-
},
143-
},
144-
},
145-
{
146-
Type: autoscalingv2.PodsMetricSourceType,
147-
Pods: &autoscalingv2.PodsMetricSource{
148-
Metric: autoscalingv2.MetricIdentifier{
149-
Name: "custom2",
150-
},
151-
Target: autoscalingv2.MetricTarget{
152-
Type: autoscalingv2.AverageValueMetricType,
153-
AverageValue: resource.NewQuantity(int64(20), resource.DecimalSI),
154-
},
155-
},
156-
},
157-
}
158-
159-
v2beta2metrics := ConvertToV2Beta2PodMetrics(v2metrics)
160-
161-
for i, metric := range v2beta2metrics {
162-
163-
assert.Equal(t, expectedNames[i], metric.Pods.Metric.Name)
164-
val, ok := metric.Pods.Target.AverageValue.AsInt64()
165-
assert.True(t, ok)
166-
assert.Equal(t, expectedValues[i], val)
167-
}
168-
}
169-
170-
func TestConvertToV2beta2Behavior(t *testing.T) {
171-
ten := int32(10)
172-
thirty := int32(30)
173-
max := autoscalingv2.MaxChangePolicySelect
174-
min := autoscalingv2.MinChangePolicySelect
175-
176-
v2ScaleUp := &autoscalingv2.HPAScalingRules{
177-
StabilizationWindowSeconds: &thirty,
178-
SelectPolicy: &max,
179-
}
180-
181-
v2ScaleDown := &autoscalingv2.HPAScalingRules{
182-
StabilizationWindowSeconds: &ten,
183-
SelectPolicy: &min,
184-
}
185-
186-
v2Behavior := &autoscalingv2.HorizontalPodAutoscalerBehavior{
187-
ScaleUp: v2ScaleUp,
188-
ScaleDown: v2ScaleDown,
189-
}
190-
191-
v2Beta2Behavior := ConvertToV2beta2Behavior(*v2Behavior)
192-
193-
assert.Equal(t, thirty, *v2Beta2Behavior.ScaleUp.StabilizationWindowSeconds)
194-
assert.Equal(t, ten, *v2Beta2Behavior.ScaleDown.StabilizationWindowSeconds)
195-
assert.Equal(t, autoscalingv2beta2.MaxPolicySelect, *v2Beta2Behavior.ScaleUp.SelectPolicy)
196-
assert.EqualValues(t, autoscalingv2beta2.MinPolicySelect, *v2Beta2Behavior.ScaleDown.SelectPolicy)
197-
}
198-
199-
func TestConvertToV2Beta2HPAScalingPolicy(t *testing.T) {
200-
v2Policy := autoscalingv2.HPAScalingPolicy{
201-
Type: autoscalingv2.PodsScalingPolicy,
202-
Value: 5,
203-
PeriodSeconds: 10,
204-
}
205-
206-
v2Beta2Policy := ConvertToV2Beta2HPAScalingPolicy(v2Policy)
207-
assert.Equal(t, autoscalingv2beta2.PodsScalingPolicy, v2Beta2Policy.Type)
208-
assert.Equal(t, int32(5), v2Beta2Policy.Value)
209-
assert.Equal(t, int32(10), v2Beta2Policy.PeriodSeconds)
210-
211-
}
212-
213-
func TestConvertToV2Beta2SelectPolicy(t *testing.T) {
214-
min := autoscalingv2.MinChangePolicySelect
215-
max := autoscalingv2.MaxChangePolicySelect
216-
disabled := autoscalingv2.DisabledPolicySelect
217-
218-
assert.Equal(t, autoscalingv2beta2.MinPolicySelect, ConvertToV2Beta2SelectPolicy(min))
219-
assert.Equal(t, autoscalingv2beta2.MaxPolicySelect, ConvertToV2Beta2SelectPolicy(max))
220-
assert.Equal(t, autoscalingv2beta2.DisabledPolicySelect, ConvertToV2Beta2SelectPolicy(disabled))
221-
}
222-
223-
var _ autodetect.AutoDetect = (*mockAutoDetect)(nil)
224-
225-
type mockAutoDetect struct {
226-
OpenShiftRoutesAvailabilityFunc func() (autodetect.OpenShiftRoutesAvailability, error)
227-
HPAVersionFunc func() (autodetect.AutoscalingVersion, error)
228-
}
229-
230-
func (m *mockAutoDetect) HPAVersion() (autodetect.AutoscalingVersion, error) {
231-
return m.HPAVersionFunc()
232-
}
233-
234-
func (m *mockAutoDetect) OpenShiftRoutesAvailability() (autodetect.OpenShiftRoutesAvailability, error) {
235-
if m.OpenShiftRoutesAvailabilityFunc != nil {
236-
return m.OpenShiftRoutesAvailabilityFunc()
237-
}
238-
return autodetect.OpenShiftRoutesNotAvailable, nil
239-
}

‎kind-1.19.yaml

-18
This file was deleted.

‎kind-1.20.yaml

-18
This file was deleted.

‎kind-1.21.yaml

-18
This file was deleted.

‎kind-1.22.yaml

-18
This file was deleted.

‎kind-1.23.yaml

+15-15
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
kind: Cluster
22
apiVersion: kind.x-k8s.io/v1alpha4
33
nodes:
4-
- role: control-plane
5-
image: kindest/node:v1.23.17@sha256:59c989ff8a517a93127d4a536e7014d28e235fb3529d9fba91b3951d461edfdb
6-
kubeadmConfigPatches:
7-
- |
8-
kind: InitConfiguration
9-
nodeRegistration:
10-
kubeletExtraArgs:
11-
node-labels: "ingress-ready=true"
12-
extraPortMappings:
13-
- containerPort: 80
14-
hostPort: 80
15-
protocol: TCP
16-
- containerPort: 443
17-
hostPort: 443
18-
protocol: TCP
4+
- role: control-plane
5+
image: kindest/node:v1.23.17@sha256:59c989ff8a517a93127d4a536e7014d28e235fb3529d9fba91b3951d461edfdb
6+
kubeadmConfigPatches:
7+
- |
8+
kind: InitConfiguration
9+
nodeRegistration:
10+
kubeletExtraArgs:
11+
node-labels: "ingress-ready=true"
12+
extraPortMappings:
13+
- containerPort: 80
14+
hostPort: 80
15+
protocol: TCP
16+
- containerPort: 443
17+
hostPort: 443
18+
protocol: TCP

‎pkg/autodetect/main.go

-62
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@
1616
package autodetect
1717

1818
import (
19-
"errors"
20-
"sort"
21-
2219
"k8s.io/client-go/discovery"
2320
"k8s.io/client-go/rest"
2421
)
@@ -28,23 +25,12 @@ var _ AutoDetect = (*autoDetect)(nil)
2825
// AutoDetect provides an assortment of routines that auto-detect traits based on the runtime.
2926
type AutoDetect interface {
3027
OpenShiftRoutesAvailability() (OpenShiftRoutesAvailability, error)
31-
HPAVersion() (AutoscalingVersion, error)
3228
}
3329

3430
type autoDetect struct {
3531
dcl discovery.DiscoveryInterface
3632
}
3733

38-
type AutoscalingVersion int
39-
40-
const (
41-
AutoscalingVersionV2 AutoscalingVersion = iota
42-
AutoscalingVersionV2Beta2
43-
AutoscalingVersionUnknown
44-
)
45-
46-
const DefaultAutoscalingVersion = AutoscalingVersionV2
47-
4834
// New creates a new auto-detection worker, using the given client when talking to the current cluster.
4935
func New(restConfig *rest.Config) (AutoDetect, error) {
5036
dcl, err := discovery.NewDiscoveryClientForConfig(restConfig)
@@ -76,51 +62,3 @@ func (a *autoDetect) OpenShiftRoutesAvailability() (OpenShiftRoutesAvailability,
7662

7763
return OpenShiftRoutesNotAvailable, nil
7864
}
79-
80-
func (a *autoDetect) HPAVersion() (AutoscalingVersion, error) {
81-
apiList, err := a.dcl.ServerGroups()
82-
if err != nil {
83-
return AutoscalingVersionUnknown, err
84-
}
85-
86-
for _, apiGroup := range apiList.Groups {
87-
if apiGroup.Name == "autoscaling" {
88-
// Sort this so we can make sure to get v2 before v2beta2
89-
versions := apiGroup.Versions
90-
sort.Slice(versions, func(i, j int) bool {
91-
return versions[i].Version < versions[j].Version
92-
})
93-
94-
for _, version := range versions {
95-
if version.Version == "v2" || version.Version == "v2beta2" {
96-
return ToAutoScalingVersion(version.Version), nil
97-
}
98-
}
99-
return AutoscalingVersionUnknown, errors.New("Failed to find appropriate version of apiGroup autoscaling, only v2 and v2beta2 are supported")
100-
}
101-
}
102-
103-
return AutoscalingVersionUnknown, errors.New("Failed to find apiGroup autoscaling")
104-
}
105-
106-
func (v AutoscalingVersion) String() string {
107-
switch v {
108-
case AutoscalingVersionV2:
109-
return "v2"
110-
case AutoscalingVersionV2Beta2:
111-
return "v2beta2"
112-
case AutoscalingVersionUnknown:
113-
return "unknown"
114-
}
115-
return "unknown"
116-
}
117-
118-
func ToAutoScalingVersion(version string) AutoscalingVersion {
119-
switch version {
120-
case "v2":
121-
return AutoscalingVersionV2
122-
case "v2beta2":
123-
return AutoscalingVersionV2Beta2
124-
}
125-
return AutoscalingVersionUnknown
126-
}

‎pkg/autodetect/main_test.go

-12
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,3 @@ func TestDetectPlatformBasedOnAvailableAPIGroups(t *testing.T) {
7070
assert.Equal(t, tt.expected, ora)
7171
}
7272
}
73-
74-
func TestAutoscalingVersionToString(t *testing.T) {
75-
assert.Equal(t, "v2", autodetect.AutoscalingVersionV2.String())
76-
assert.Equal(t, "v2beta2", autodetect.AutoscalingVersionV2Beta2.String())
77-
assert.Equal(t, "unknown", autodetect.AutoscalingVersionUnknown.String())
78-
}
79-
80-
func TestToAutoScalingVersion(t *testing.T) {
81-
assert.Equal(t, autodetect.AutoscalingVersionV2, autodetect.ToAutoScalingVersion("v2"))
82-
assert.Equal(t, autodetect.AutoscalingVersionV2Beta2, autodetect.ToAutoScalingVersion("v2beta2"))
83-
assert.Equal(t, autodetect.AutoscalingVersionUnknown, autodetect.ToAutoScalingVersion("fred"))
84-
}

‎tests/e2e-autoscale/autoscale/00-assert.yaml

+73
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,76 @@ metadata:
1111
name: simplest-set-utilization-collector
1212
status:
1313
readyReplicas: 1
14+
---
15+
apiVersion: autoscaling/v2
16+
kind: HorizontalPodAutoscaler
17+
metadata:
18+
name: simplest-collector
19+
spec:
20+
scaleTargetRef:
21+
kind: OpenTelemetryCollector
22+
name: simplest
23+
apiVersion: opentelemetry.io/v1alpha1
24+
minReplicas: 1
25+
maxReplicas: 2
26+
metrics:
27+
- type: Resource
28+
resource:
29+
name: cpu
30+
target:
31+
type: Utilization
32+
averageUtilization: 90
33+
behavior:
34+
scaleUp:
35+
stabilizationWindowSeconds: 10
36+
selectPolicy: Max
37+
policies:
38+
- type: Pods
39+
value: 4
40+
periodSeconds: 15
41+
- type: Percent
42+
value: 100
43+
periodSeconds: 15
44+
scaleDown:
45+
stabilizationWindowSeconds: 15
46+
selectPolicy: Max
47+
policies:
48+
- type: Percent
49+
value: 100
50+
periodSeconds: 15
51+
---
52+
apiVersion: autoscaling/v2
53+
kind: HorizontalPodAutoscaler
54+
metadata:
55+
name: simplest-set-utilization-collector
56+
spec:
57+
scaleTargetRef:
58+
kind: OpenTelemetryCollector
59+
name: simplest-set-utilization
60+
apiVersion: opentelemetry.io/v1alpha1
61+
minReplicas: 1
62+
maxReplicas: 2
63+
metrics:
64+
- type: Resource
65+
resource:
66+
name: cpu
67+
target:
68+
type: Utilization
69+
averageUtilization: 99
70+
behavior:
71+
scaleUp:
72+
stabilizationWindowSeconds: 300
73+
selectPolicy: Max
74+
policies:
75+
- type: Pods
76+
value: 4
77+
periodSeconds: 15
78+
- type: Percent
79+
value: 100
80+
periodSeconds: 15
81+
scaleDown:
82+
selectPolicy: Max
83+
policies:
84+
- type: Percent
85+
value: 100
86+
periodSeconds: 15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
apiVersion: autoscaling/v2
2+
kind: HorizontalPodAutoscaler
3+
metadata:
4+
name: simplest-set-utilization-collector
5+
spec:
6+
scaleTargetRef:
7+
kind: OpenTelemetryCollector
8+
name: simplest-set-utilization
9+
apiVersion: opentelemetry.io/v1alpha1
10+
minReplicas: 1
11+
maxReplicas: 2
12+
metrics:
13+
- type: Resource
14+
resource:
15+
name: cpu
16+
target:
17+
type: Utilization
18+
averageUtilization: 60
19+
behavior:
20+
scaleUp:
21+
stabilizationWindowSeconds: 1
22+
selectPolicy: Max
23+
policies:
24+
- type: Pods
25+
value: 4
26+
periodSeconds: 15
27+
- type: Percent
28+
value: 100
29+
periodSeconds: 15
30+
scaleDown:
31+
stabilizationWindowSeconds: 15
32+
selectPolicy: Max
33+
policies:
34+
- type: Percent
35+
value: 100
36+
periodSeconds: 15

‎tests/e2e-autoscale/autoscale/01-check-simplest-collector-hpa.yaml

-4
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# This updates an existing deployment with a new Spec.
2+
# Target memory utilization is now added.
3+
# scaleDown and scaleUp behavior is now added.
4+
apiVersion: opentelemetry.io/v1alpha1
5+
kind: OpenTelemetryCollector
6+
metadata:
7+
name: simplest-set-utilization
8+
spec:
9+
minReplicas: 1
10+
maxReplicas: 2
11+
autoscaler:
12+
targetCPUUtilization: 60
13+
# Without this behavior the HPA will default to a scaledown stabilization
14+
# window of 300 seconds. Tests should fail if this update is not successful.
15+
behavior:
16+
scaleDown:
17+
stabilizationWindowSeconds: 15
18+
scaleUp:
19+
stabilizationWindowSeconds: 1
20+
resources:
21+
limits:
22+
cpu: 100m
23+
memory: 128Mi
24+
requests:
25+
cpu: 5m
26+
memory: 64Mi
27+
28+
config: |
29+
receivers:
30+
otlp:
31+
protocols:
32+
grpc:
33+
http:
34+
processors:
35+
36+
exporters:
37+
logging:
38+
39+
service:
40+
pipelines:
41+
traces:
42+
receivers: [otlp]
43+
processors: []
44+
exporters: [logging]

‎tests/e2e-autoscale/autoscale/05-assert.yaml ‎tests/e2e-autoscale/autoscale/02-assert.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ metadata:
44
name: simplest-set-utilization
55
status:
66
scale:
7-
replicas: 1
7+
replicas: 2

‎tests/e2e-autoscale/autoscale/02-check-simplest-set-utilization-collector-hpa.yaml

-4
This file was deleted.
+19-42
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,21 @@
1-
# This updates an existing deployment with a new Spec.
2-
# Target memory utilization is now added.
3-
# scaleDown and scaleUp behavior is now added.
4-
apiVersion: opentelemetry.io/v1alpha1
5-
kind: OpenTelemetryCollector
1+
apiVersion: batch/v1
2+
kind: Job
63
metadata:
7-
name: simplest-set-utilization
4+
name: tracegen-set-utilization
85
spec:
9-
minReplicas: 1
10-
maxReplicas: 2
11-
autoscaler:
12-
targetCPUUtilization: 60
13-
# Without this behavior the HPA will default to a scaledown stabilization
14-
# window of 300 seconds. Tests should fail if this update is not successful.
15-
behavior:
16-
scaleDown:
17-
stabilizationWindowSeconds: 15
18-
scaleUp:
19-
stabilizationWindowSeconds: 1
20-
resources:
21-
limits:
22-
cpu: 100m
23-
memory: 128Mi
24-
requests:
25-
cpu: 5m
26-
memory: 64Mi
27-
28-
config: |
29-
receivers:
30-
otlp:
31-
protocols:
32-
grpc:
33-
http:
34-
processors:
35-
36-
exporters:
37-
logging:
38-
39-
service:
40-
pipelines:
41-
traces:
42-
receivers: [otlp]
43-
processors: []
44-
exporters: [logging]
6+
template:
7+
spec:
8+
containers:
9+
- name: tracegen
10+
image: ghcr.io/open-telemetry/opentelemetry-collector-contrib/tracegen:latest
11+
command:
12+
- "./tracegen"
13+
args:
14+
- -otlp-endpoint=simplest-set-utilization-collector-headless:4317
15+
- -otlp-insecure
16+
# High duration to ensure the trace creation doesn't stop.
17+
# It'll be stopped in step 4
18+
- -duration=1m
19+
- -workers=20
20+
restartPolicy: Never
21+
backoffLimit: 4

‎tests/e2e-autoscale/autoscale/03-assert.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ metadata:
44
name: simplest-set-utilization
55
status:
66
scale:
7-
replicas: 2
7+
replicas: 1

‎tests/e2e-autoscale/autoscale/03-install.yaml

-21
This file was deleted.

‎tests/e2e-autoscale/autoscale/03-verify-simplest-set-collector-hpa-metrics.yaml

-4
This file was deleted.

‎tests/e2e-autoscale/autoscale/cmd/verify/wait-and-validate-metrics.go

-187
This file was deleted.

‎tests/e2e-autoscale/autoscale/wait-until-hpa-ready.go

-121
This file was deleted.

0 commit comments

Comments
 (0)
Please sign in to comment.