Skip to content

Commit 15bd804

Browse files
authored
Revert "Revert" Add reconciliation for Collector v1beta1 CRD (#2703)"… (#2813)
* Revert "Revert" Add reconciliation for Collector v1beta1 CRD (#2703)" (#2800)" This reverts commit 57024fc. * Fix image Signed-off-by: Pavol Loffay <[email protected]> * Clarify hostport Signed-off-by: Pavol Loffay <[email protected]> * Fix issue after israel Signed-off-by: Pavol Loffay <[email protected]> * Fix Signed-off-by: Pavol Loffay <[email protected]> --------- Signed-off-by: Pavol Loffay <[email protected]>
1 parent e27e8dd commit 15bd804

File tree

66 files changed

+31835
-11778
lines changed

Some content is hidden

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

66 files changed

+31835
-11778
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, 1907]
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

+4-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ 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+
MANIFEST_DIR ?= config/crd/bases
43+
# kubectl apply does not work on large CRDs.
44+
CRD_OPTIONS ?= "crd:generateEmbeddedObjectMeta=true,maxDescLen=0"
4345

4446
# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
4547
ifeq (,$(shell go env GOBIN))
@@ -171,7 +173,7 @@ release-artifacts: set-image-controller
171173
# Generate manifests e.g. CRD, RBAC etc.
172174
.PHONY: manifests
173175
manifests: controller-gen
174-
$(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=$(MANIFEST_DIR)
176+
$(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=${MANIFEST_DIR}
175177

176178
# Run tests
177179
# setup-envtest uses KUBEBUILDER_ASSETS which points to a directory with binaries (api-server, etcd and kubectl)

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

+12-12
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,12 @@ func tov1beta1Ports(in []PortsSpec) []v1beta1.PortsSpec {
151151
for _, p := range in {
152152
ports = append(ports, v1beta1.PortsSpec{
153153
ServicePort: v1.ServicePort{
154-
Name: p.Name,
155-
Protocol: p.Protocol,
156-
AppProtocol: p.AppProtocol,
157-
Port: p.Port,
158-
TargetPort: p.TargetPort,
159-
NodePort: p.NodePort,
154+
Name: p.ServicePort.Name,
155+
Protocol: p.ServicePort.Protocol,
156+
AppProtocol: p.ServicePort.AppProtocol,
157+
Port: p.ServicePort.Port,
158+
TargetPort: p.ServicePort.TargetPort,
159+
NodePort: p.ServicePort.NodePort,
160160
},
161161
HostPort: p.HostPort,
162162
})
@@ -276,12 +276,12 @@ func tov1alpha1Ports(in []v1beta1.PortsSpec) []PortsSpec {
276276
for _, p := range in {
277277
ports = append(ports, PortsSpec{
278278
ServicePort: v1.ServicePort{
279-
Name: p.Name,
280-
Protocol: p.Protocol,
281-
AppProtocol: p.AppProtocol,
282-
Port: p.Port,
283-
TargetPort: p.TargetPort,
284-
NodePort: p.NodePort,
279+
Name: p.ServicePort.Name,
280+
Protocol: p.ServicePort.Protocol,
281+
AppProtocol: p.ServicePort.AppProtocol,
282+
Port: p.ServicePort.Port,
283+
TargetPort: p.ServicePort.TargetPort,
284+
NodePort: p.ServicePort.NodePort,
285285
},
286286
HostPort: p.HostPort,
287287
})

apis/v1alpha1/convert_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ func Test_tov1beta1AndBack(t *testing.T) {
181181
ServicePort: v1.ServicePort{
182182
Name: "otlp",
183183
},
184-
HostPort: 0,
184+
HostPort: 4317,
185185
}},
186186
Env: []v1.EnvVar{
187187
{

apis/v1alpha1/opentelemetrycollector_types.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -448,8 +448,8 @@ type OpenTelemetryCollectorStatus struct {
448448
Replicas int32 `json:"replicas,omitempty"`
449449
}
450450

451+
// +kubebuilder:deprecatedversion:warning="OpenTelemetryCollector v1alpha1 is deprecated. Migrate to v1beta1."
451452
// +kubebuilder:object:root=true
452-
// +kubebuilder:storageversion
453453
// +kubebuilder:resource:shortName=otelcol;otelcols
454454
// +kubebuilder:subresource:status
455455
// +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

+157-2
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,40 @@ 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
@@ -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
@@ -496,9 +580,9 @@ spec:
496580
serviceAccountName: opentelemetry-operator-controller-manager
497581
strategy: deployment
498582
installModes:
499-
- supported: true
583+
- supported: false
500584
type: OwnNamespace
501-
- supported: true
585+
- supported: false
502586
type: SingleNamespace
503587
- supported: false
504588
type: MultiNamespace
@@ -523,6 +607,18 @@ spec:
523607
name: OpenTelemetry Community
524608
version: 0.98.0
525609
webhookdefinitions:
610+
- admissionReviewVersions:
611+
- v1alpha1
612+
- v1beta1
613+
containerPort: 443
614+
conversionCRDs:
615+
- opentelemetrycollectors.opentelemetry.io
616+
deploymentName: opentelemetry-operator-controller-manager
617+
generateName: copentelemetrycollectors.kb.io
618+
sideEffects: None
619+
targetPort: 9443
620+
type: ConversionWebhook
621+
webhookPath: /convert
526622
- admissionReviewVersions:
527623
- v1
528624
containerPort: 443
@@ -583,6 +679,26 @@ spec:
583679
targetPort: 9443
584680
type: MutatingAdmissionWebhook
585681
webhookPath: /mutate-opentelemetry-io-v1alpha1-opentelemetrycollector
682+
- admissionReviewVersions:
683+
- v1
684+
containerPort: 443
685+
deploymentName: opentelemetry-operator-controller-manager
686+
failurePolicy: Fail
687+
generateName: mopentelemetrycollectorbeta.kb.io
688+
rules:
689+
- apiGroups:
690+
- opentelemetry.io
691+
apiVersions:
692+
- v1beta1
693+
operations:
694+
- CREATE
695+
- UPDATE
696+
resources:
697+
- opentelemetrycollectors
698+
sideEffects: None
699+
targetPort: 9443
700+
type: MutatingAdmissionWebhook
701+
webhookPath: /mutate-opentelemetry-io-v1beta1-opentelemetrycollector
586702
- admissionReviewVersions:
587703
- v1
588704
containerPort: 443
@@ -700,6 +816,26 @@ spec:
700816
targetPort: 9443
701817
type: ValidatingAdmissionWebhook
702818
webhookPath: /validate-opentelemetry-io-v1alpha1-opentelemetrycollector
819+
- admissionReviewVersions:
820+
- v1
821+
containerPort: 443
822+
deploymentName: opentelemetry-operator-controller-manager
823+
failurePolicy: Fail
824+
generateName: vopentelemetrycollectorcreateupdatebeta.kb.io
825+
rules:
826+
- apiGroups:
827+
- opentelemetry.io
828+
apiVersions:
829+
- v1beta1
830+
operations:
831+
- CREATE
832+
- UPDATE
833+
resources:
834+
- opentelemetrycollectors
835+
sideEffects: None
836+
targetPort: 9443
837+
type: ValidatingAdmissionWebhook
838+
webhookPath: /validate-opentelemetry-io-v1beta1-opentelemetrycollector
703839
- admissionReviewVersions:
704840
- v1
705841
containerPort: 443
@@ -719,3 +855,22 @@ spec:
719855
targetPort: 9443
720856
type: ValidatingAdmissionWebhook
721857
webhookPath: /validate-opentelemetry-io-v1alpha1-opentelemetrycollector
858+
- admissionReviewVersions:
859+
- v1
860+
containerPort: 443
861+
deploymentName: opentelemetry-operator-controller-manager
862+
failurePolicy: Ignore
863+
generateName: vopentelemetrycollectordeletebeta.kb.io
864+
rules:
865+
- apiGroups:
866+
- opentelemetry.io
867+
apiVersions:
868+
- v1beta1
869+
operations:
870+
- DELETE
871+
resources:
872+
- opentelemetrycollectors
873+
sideEffects: None
874+
targetPort: 9443
875+
type: ValidatingAdmissionWebhook
876+
webhookPath: /validate-opentelemetry-io-v1beta1-opentelemetrycollector

0 commit comments

Comments
 (0)