Skip to content

Commit 1c69e22

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

File tree

64 files changed

+31343
-13445
lines changed

Some content is hidden

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

64 files changed

+31343
-13445
lines changed

.chloggen/v1beta1-webhook.yaml

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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 removed in the future.
19+
Follow [migration guide](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/#upgrade-existing-objects-to-a-new-stored-version) for upgrading already created collector instances.
20+
After all `otelcol.v1alpha1.opentelemetry.io` are stored as `v1beta1` update the collector CRD to store only `v1beta1`
21+
`kubectl patch customresourcedefinitions opentelemetrycollectors.opentelemetry.io --subresource='status' --type='merge' -p '{"status":{"storedVersions":["v1beta1"]}}'`.
22+
**Only `AllNamespaces` install mode is now supported** due to the conversion webhook from `v1beta1` to `v1alpha1`.
23+
See [OLM docs](https://olm.operatorframework.io/docs/tasks/install-operator-with-olm/) and
24+
[OLM operator groups docs](https://olm.operatorframework.io/docs/advanced-tasks/operator-scoping-with-operatorgroups/).
25+

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/collector_webhook.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ func warningsGroupedByResource(reviews []*v1.SubjectAccessReview) []string {
451451
func SetupCollectorWebhook(mgr ctrl.Manager, cfg config.Config, reviewer *rbac.Reviewer) error {
452452
cvw := &CollectorWebhook{
453453
reviewer: reviewer,
454-
logger: mgr.GetLogger().WithValues("handler", "CollectorWebhook"),
454+
logger: mgr.GetLogger().WithValues("handler", "CollectorWebhook", "version", "v1alpha1"),
455455
scheme: mgr.GetScheme(),
456456
cfg: cfg,
457457
}

apis/v1alpha1/opentelemetrycollector_types.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -438,8 +438,8 @@ type OpenTelemetryCollectorStatus struct {
438438
Replicas int32 `json:"replicas,omitempty"`
439439
}
440440

441+
// +kubebuilder:deprecatedversion:warning="OpenTelemetryCollector v1alpha1 is deprecated. Migrate to v1beta1."
441442
// +kubebuilder:object:root=true
442-
// +kubebuilder:storageversion
443443
// +kubebuilder:resource:shortName=otelcol;otelcols
444444
// +kubebuilder:subresource:status
445445
// +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", "version", "v1beta1"),
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 (
@@ -28,6 +26,7 @@ func init() {
2826

2927
// +kubebuilder:object:root=true
3028
// +kubebuilder:resource:shortName=otelcol;otelcols
29+
// +kubebuilder:storageversion
3130
// +kubebuilder:subresource:status
3231
// +kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.scale.replicas,selectorpath=.status.scale.selector
3332
// +kubebuilder:printcolumn:name="Mode",type="string",JSONPath=".spec.mode",description="Deployment Mode"

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

+158-3
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,47 @@ 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-08T17:10:13Z"
102+
createdAt: "2024-03-11T13:32:19Z"
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
@@ -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
@@ -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
@@ -514,6 +598,18 @@ spec:
514598
name: OpenTelemetry Community
515599
version: 0.96.0
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)