Skip to content

Commit a8a3798

Browse files
committed
Add reconciliation for Collector v1beta1 CRD
Signed-off-by: Pavol Loffay <[email protected]>
1 parent c327061 commit a8a3798

File tree

63 files changed

+31240
-13447
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+31240
-13447
lines changed

.chloggen/v1beta1-webhook.yaml

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
2+
change_type: new_component
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: collector
6+
7+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
8+
note: Enable reconciliation of Collector v1beta1 CRD.
9+
10+
# One or more tracking issues related to the change
11+
issues: [2620]
12+
13+
# (Optional) One or more lines of additional information to render under the primary note.
14+
# These lines will be padded with 2 spaces and then inserted directly into the document.
15+
# Use pipe (|) for multiline entries.
16+
subtext: |
17+
Users are expected to migrate to `otelcol.v1beta1.opentelemetry.io`.
18+
The support for otelcol.v1alpha1.opentelemetry.io will be in the future deprecated and dropped.
19+
Follow https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/#upgrade-existing-objects-to-a-new-stored-version for version migration.

Makefile

+2-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ BUNDLE_DEFAULT_CHANNEL := --default-channel=$(DEFAULT_CHANNEL)
3939
endif
4040
BUNDLE_METADATA_OPTS ?= $(BUNDLE_CHANNELS) $(BUNDLE_DEFAULT_CHANNEL)
4141

42-
CRD_OPTIONS ?= "crd:generateEmbeddedObjectMeta=true,maxDescLen=200"
42+
# kubectl apply does not work on large CRDs.
43+
CRD_OPTIONS ?= "crd:generateEmbeddedObjectMeta=true,maxDescLen=0"
4344

4445
# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
4546
ifeq (,$(shell go env GOBIN))

apis/v1alpha1/convert.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,14 @@ func tov1beta1TA(in OpenTelemetryTargetAllocator) v1beta1.TargetAllocatorEmbedde
181181
}
182182
}
183183

184+
// The conversion takes into account deprecated v1alpha1 spec.minReplicas and spec.maxReplicas.
184185
func tov1beta1Autoscaler(in *AutoscalerSpec, minReplicas, maxReplicas *int32) *v1beta1.AutoscalerSpec {
185-
if in == nil {
186+
if in == nil && minReplicas == nil && maxReplicas == nil {
186187
return nil
187188
}
189+
if in == nil {
190+
in = &AutoscalerSpec{}
191+
}
188192

189193
var metrics []v1beta1.MetricSpec
190194
for _, m := range in.Metrics {

apis/v1alpha1/convert_test.go

+25
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,31 @@ func Test_tov1beta1AndBack(t *testing.T) {
323323
assert.Equal(t, colalpha1, colalpha1Converted)
324324
}
325325

326+
func Test_tov1beta1AndBack_deprecated_replicas(t *testing.T) {
327+
one := int32(1)
328+
two := int32(2)
329+
colalpha1 := OpenTelemetryCollector{
330+
Spec: OpenTelemetryCollectorSpec{
331+
MinReplicas: &one,
332+
MaxReplicas: &two,
333+
},
334+
}
335+
336+
colbeta1 := v1beta1.OpenTelemetryCollector{}
337+
err := colalpha1.ConvertTo(&colbeta1)
338+
require.NoError(t, err)
339+
340+
assert.Equal(t, one, *colbeta1.Spec.Autoscaler.MinReplicas)
341+
assert.Equal(t, two, *colbeta1.Spec.Autoscaler.MaxReplicas)
342+
343+
err = colalpha1.ConvertFrom(&colbeta1)
344+
require.NoError(t, err)
345+
assert.Nil(t, colalpha1.Spec.MinReplicas)
346+
assert.Nil(t, colalpha1.Spec.MaxReplicas)
347+
assert.Equal(t, one, *colalpha1.Spec.Autoscaler.MinReplicas)
348+
assert.Equal(t, two, *colalpha1.Spec.Autoscaler.MaxReplicas)
349+
}
350+
326351
func createTA() OpenTelemetryTargetAllocator {
327352
replicas := int32(2)
328353
runAsNonRoot := true

apis/v1alpha1/opentelemetrycollector_types.go

-1
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,6 @@ type OpenTelemetryCollectorStatus struct {
439439
}
440440

441441
// +kubebuilder:object:root=true
442-
// +kubebuilder:storageversion
443442
// +kubebuilder:resource:shortName=otelcol;otelcols
444443
// +kubebuilder:subresource:status
445444
// +kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.scale.replicas,selectorpath=.status.scale.selector

apis/v1beta1/collector_webhook.go

+27
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,30 @@ import (
1919
"fmt"
2020
"strings"
2121

22+
"github.com/go-logr/logr"
2223
"k8s.io/apimachinery/pkg/runtime"
24+
ctrl "sigs.k8s.io/controller-runtime"
2325
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
26+
27+
"github.com/open-telemetry/opentelemetry-operator/internal/config"
28+
"github.com/open-telemetry/opentelemetry-operator/internal/rbac"
2429
)
2530

2631
var (
2732
_ admission.CustomValidator = &CollectorWebhook{}
2833
_ admission.CustomDefaulter = &CollectorWebhook{}
2934
)
3035

36+
// +kubebuilder:webhook:path=/mutate-opentelemetry-io-v1beta1-opentelemetrycollector,mutating=true,failurePolicy=fail,groups=opentelemetry.io,resources=opentelemetrycollectors,verbs=create;update,versions=v1beta1,name=mopentelemetrycollectorbeta.kb.io,sideEffects=none,admissionReviewVersions=v1
37+
// +kubebuilder:webhook:verbs=create;update,path=/validate-opentelemetry-io-v1beta1-opentelemetrycollector,mutating=false,failurePolicy=fail,groups=opentelemetry.io,resources=opentelemetrycollectors,versions=v1beta1,name=vopentelemetrycollectorcreateupdatebeta.kb.io,sideEffects=none,admissionReviewVersions=v1
38+
// +kubebuilder:webhook:verbs=delete,path=/validate-opentelemetry-io-v1beta1-opentelemetrycollector,mutating=false,failurePolicy=ignore,groups=opentelemetry.io,resources=opentelemetrycollectors,versions=v1beta1,name=vopentelemetrycollectordeletebeta.kb.io,sideEffects=none,admissionReviewVersions=v1
3139
// +kubebuilder:object:generate=false
40+
3241
type CollectorWebhook struct {
42+
logger logr.Logger
43+
cfg config.Config
44+
scheme *runtime.Scheme
45+
reviewer *rbac.Reviewer
3346
}
3447

3548
func (c CollectorWebhook) Default(_ context.Context, obj runtime.Object) error {
@@ -77,3 +90,17 @@ func (c CollectorWebhook) validate(r *OpenTelemetryCollector) (admission.Warning
7790
}
7891
return warnings, nil
7992
}
93+
94+
func SetupCollectorWebhook(mgr ctrl.Manager, cfg config.Config, reviewer *rbac.Reviewer) error {
95+
cvw := &CollectorWebhook{
96+
reviewer: reviewer,
97+
logger: mgr.GetLogger().WithValues("handler", "CollectorWebhook"),
98+
scheme: mgr.GetScheme(),
99+
cfg: cfg,
100+
}
101+
return ctrl.NewWebhookManagedBy(mgr).
102+
For(&OpenTelemetryCollector{}).
103+
WithValidator(cvw).
104+
WithDefaulter(cvw).
105+
Complete()
106+
}

apis/v1beta1/opentelemetrycollector_types.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
// +kubebuilder:skip
16-
1715
package v1beta1
1816

1917
import (
@@ -313,6 +311,7 @@ type ConfigMapsSpec struct {
313311
// +kubebuilder:object:root=true
314312
// +kubebuilder:resource:shortName=otelcol;otelcols
315313
// +kubebuilder:subresource:status
314+
// +kubebuilder:storageversion
316315
// +kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.scale.replicas,selectorpath=.status.scale.selector
317316
// +kubebuilder:printcolumn:name="Mode",type="string",JSONPath=".spec.mode",description="Deployment Mode"
318317
// +kubebuilder:printcolumn:name="Version",type="string",JSONPath=".status.version",description="OpenTelemetry Version"

apis/v1beta1/targetallocator_types.go

-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
// +kubebuilder:skip
16-
1715
package v1beta1
1816

1917
import (

bundle/manifests/opentelemetry-operator.clusterserviceversion.yaml

+161-6
Original file line numberDiff line numberDiff line change
@@ -59,19 +59,53 @@ metadata:
5959
"spec": {
6060
"config": "receivers:\n otlp:\n protocols: \n grpc:\n http:\n\nexporters:\n debug:\n\nservice:\n pipelines:\n traces:\n receivers: [otlp]\n exporters: [debug]\n"
6161
}
62+
},
63+
{
64+
"apiVersion": "opentelemetry.io/v1beta1",
65+
"kind": "OpenTelemetryCollector",
66+
"metadata": {
67+
"name": "otel"
68+
},
69+
"spec": {
70+
"config": {
71+
"exporters": {
72+
"debug": {}
73+
},
74+
"receivers": {
75+
"otlp": {
76+
"protocols": {
77+
"grpc": {},
78+
"http": {}
79+
}
80+
}
81+
},
82+
"service": {
83+
"pipelines": {
84+
"traces": {
85+
"exporters": [
86+
"debug"
87+
],
88+
"receivers": [
89+
"otlp"
90+
]
91+
}
92+
}
93+
}
94+
}
95+
}
6296
}
6397
]
6498
capabilities: Deep Insights
6599
categories: Logging & Tracing,Monitoring
66100
certified: "false"
67101
containerImage: ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator
68-
createdAt: "2024-03-04T14:38:01Z"
102+
createdAt: "2024-03-06T15:58:41Z"
69103
description: Provides the OpenTelemetry components, including the Collector
70104
operators.operatorframework.io/builder: operator-sdk-v1.29.0
71105
operators.operatorframework.io/project_layout: go.kubebuilder.io/v3
72106
repository: github.com/open-telemetry/opentelemetry-operator
73107
support: OpenTelemetry Community
74-
name: opentelemetry-operator.v0.95.0
108+
name: opentelemetry-operator.v0.93.0-70-gc56078f
75109
namespace: placeholder
76110
spec:
77111
apiservicedefinitions: {}
@@ -154,6 +188,56 @@ spec:
154188
displayName: Create ServiceMonitors for OpenTelemetry Collector
155189
path: targetAllocator.observability.metrics.enableMetrics
156190
version: v1alpha1
191+
- description: OpenTelemetryCollector is the Schema for the opentelemetrycollectors
192+
API.
193+
displayName: OpenTelemetry Collector
194+
kind: OpenTelemetryCollector
195+
name: opentelemetrycollectors.opentelemetry.io
196+
resources:
197+
- kind: ConfigMaps
198+
name: ""
199+
version: v1
200+
- kind: DaemonSets
201+
name: ""
202+
version: apps/v1
203+
- kind: Deployment
204+
name: ""
205+
version: apps/v1
206+
- kind: Pod
207+
name: ""
208+
version: v1
209+
- kind: Service
210+
name: ""
211+
version: v1
212+
- kind: StatefulSets
213+
name: ""
214+
version: apps/v1
215+
specDescriptors:
216+
- description: ObservabilitySpec defines how telemetry data gets handled.
217+
displayName: Observability
218+
path: observability
219+
- description: Metrics defines the metrics configuration for operands.
220+
displayName: Metrics Config
221+
path: observability.metrics
222+
- description: EnableMetrics specifies if ServiceMonitor or PodMonitor(for sidecar
223+
mode) should be created for the service managed by the OpenTelemetry Operator.
224+
The operator.observability.prometheus feature gate must be enabled to use
225+
this feature.
226+
displayName: Create ServiceMonitors for OpenTelemetry Collector
227+
path: observability.metrics.enableMetrics
228+
- description: ObservabilitySpec defines how telemetry data gets handled.
229+
displayName: Observability
230+
path: targetAllocator.observability
231+
- description: Metrics defines the metrics configuration for operands.
232+
displayName: Metrics Config
233+
path: targetAllocator.observability.metrics
234+
- description: EnableMetrics specifies if ServiceMonitor or PodMonitor(for sidecar
235+
mode) should be created for the service managed by the OpenTelemetry Operator.
236+
The operator.observability.prometheus feature gate must be enabled to use
237+
this feature.
238+
displayName: Create ServiceMonitors for OpenTelemetry Collector
239+
path: targetAllocator.observability.metrics.enableMetrics
240+
version: v1beta1
157241
description: |-
158242
OpenTelemetry is a collection of tools, APIs, and SDKs. You use it to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) for analysis in order to understand your software's performance and behavior.
159243
@@ -404,7 +488,7 @@ spec:
404488
- --zap-log-level=info
405489
- --zap-time-encoding=rfc3339nano
406490
- --feature-gates=+operator.autoinstrumentation.go,+operator.autoinstrumentation.nginx
407-
image: ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator:0.95.0
491+
image: docker.io/pavolloffay/opentelemetry-operator:dev-c56078f-1709740716
408492
livenessProbe:
409493
httpGet:
410494
path: /healthz
@@ -487,9 +571,9 @@ spec:
487571
serviceAccountName: opentelemetry-operator-controller-manager
488572
strategy: deployment
489573
installModes:
490-
- supported: true
574+
- supported: false
491575
type: OwnNamespace
492-
- supported: true
576+
- supported: false
493577
type: SingleNamespace
494578
- supported: false
495579
type: MultiNamespace
@@ -512,8 +596,20 @@ spec:
512596
minKubeVersion: 1.23.0
513597
provider:
514598
name: OpenTelemetry Community
515-
version: 0.95.0
599+
version: 0.93.0-70-gc56078f
516600
webhookdefinitions:
601+
- admissionReviewVersions:
602+
- v1alpha1
603+
- v1beta1
604+
containerPort: 443
605+
conversionCRDs:
606+
- opentelemetrycollectors.opentelemetry.io
607+
deploymentName: opentelemetry-operator-controller-manager
608+
generateName: copentelemetrycollectors.kb.io
609+
sideEffects: None
610+
targetPort: 9443
611+
type: ConversionWebhook
612+
webhookPath: /convert
517613
- admissionReviewVersions:
518614
- v1
519615
containerPort: 443
@@ -574,6 +670,26 @@ spec:
574670
targetPort: 9443
575671
type: MutatingAdmissionWebhook
576672
webhookPath: /mutate-opentelemetry-io-v1alpha1-opentelemetrycollector
673+
- admissionReviewVersions:
674+
- v1
675+
containerPort: 443
676+
deploymentName: opentelemetry-operator-controller-manager
677+
failurePolicy: Fail
678+
generateName: mopentelemetrycollectorbeta.kb.io
679+
rules:
680+
- apiGroups:
681+
- opentelemetry.io
682+
apiVersions:
683+
- v1beta1
684+
operations:
685+
- CREATE
686+
- UPDATE
687+
resources:
688+
- opentelemetrycollectors
689+
sideEffects: None
690+
targetPort: 9443
691+
type: MutatingAdmissionWebhook
692+
webhookPath: /mutate-opentelemetry-io-v1beta1-opentelemetrycollector
577693
- admissionReviewVersions:
578694
- v1
579695
containerPort: 443
@@ -691,6 +807,26 @@ spec:
691807
targetPort: 9443
692808
type: ValidatingAdmissionWebhook
693809
webhookPath: /validate-opentelemetry-io-v1alpha1-opentelemetrycollector
810+
- admissionReviewVersions:
811+
- v1
812+
containerPort: 443
813+
deploymentName: opentelemetry-operator-controller-manager
814+
failurePolicy: Fail
815+
generateName: vopentelemetrycollectorcreateupdatebeta.kb.io
816+
rules:
817+
- apiGroups:
818+
- opentelemetry.io
819+
apiVersions:
820+
- v1beta1
821+
operations:
822+
- CREATE
823+
- UPDATE
824+
resources:
825+
- opentelemetrycollectors
826+
sideEffects: None
827+
targetPort: 9443
828+
type: ValidatingAdmissionWebhook
829+
webhookPath: /validate-opentelemetry-io-v1beta1-opentelemetrycollector
694830
- admissionReviewVersions:
695831
- v1
696832
containerPort: 443
@@ -710,3 +846,22 @@ spec:
710846
targetPort: 9443
711847
type: ValidatingAdmissionWebhook
712848
webhookPath: /validate-opentelemetry-io-v1alpha1-opentelemetrycollector
849+
- admissionReviewVersions:
850+
- v1
851+
containerPort: 443
852+
deploymentName: opentelemetry-operator-controller-manager
853+
failurePolicy: Ignore
854+
generateName: vopentelemetrycollectordeletebeta.kb.io
855+
rules:
856+
- apiGroups:
857+
- opentelemetry.io
858+
apiVersions:
859+
- v1beta1
860+
operations:
861+
- DELETE
862+
resources:
863+
- opentelemetrycollectors
864+
sideEffects: None
865+
targetPort: 9443
866+
type: ValidatingAdmissionWebhook
867+
webhookPath: /validate-opentelemetry-io-v1beta1-opentelemetrycollector

0 commit comments

Comments
 (0)