-
Notifications
You must be signed in to change notification settings - Fork 665
[otel-demo] Use otel-operator to inject OTel configuration and manage OTel Collectors #1884
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
[otel-demo] Use otel-operator to inject OTel configuration and manage OTel Collectors #1884
Conversation
# Conflicts: # charts/opentelemetry-demo/Chart.lock # charts/opentelemetry-demo/Chart.yaml # charts/opentelemetry-demo/examples/bring-your-own-observability/rendered/component.yaml # charts/opentelemetry-demo/examples/collector-as-daemonset/rendered/component.yaml # charts/opentelemetry-demo/examples/collector-as-daemonset/rendered/grafana/configmap-dashboard-provider.yaml # charts/opentelemetry-demo/examples/collector-as-daemonset/rendered/grafana/deployment.yaml # charts/opentelemetry-demo/examples/collector-as-daemonset/rendered/opentelemetry-collector/clusterrole.yaml # charts/opentelemetry-demo/examples/collector-as-daemonset/rendered/opentelemetry-collector/clusterrolebinding.yaml # charts/opentelemetry-demo/examples/collector-as-daemonset/rendered/opentelemetry-collector/configmap-agent.yaml # charts/opentelemetry-demo/examples/collector-as-daemonset/rendered/opentelemetry-collector/daemonset.yaml # charts/opentelemetry-demo/examples/collector-as-daemonset/rendered/opentelemetry-collector/serviceaccount.yaml # charts/opentelemetry-demo/examples/custom-environment-variables/rendered/component.yaml # charts/opentelemetry-demo/examples/custom-environment-variables/rendered/grafana/configmap-dashboard-provider.yaml # charts/opentelemetry-demo/examples/custom-environment-variables/rendered/grafana/deployment.yaml # charts/opentelemetry-demo/examples/custom-environment-variables/rendered/opentelemetry-collector/clusterrole.yaml # charts/opentelemetry-demo/examples/custom-environment-variables/rendered/opentelemetry-collector/clusterrolebinding.yaml # charts/opentelemetry-demo/examples/custom-environment-variables/rendered/opentelemetry-collector/configmap.yaml # charts/opentelemetry-demo/examples/custom-environment-variables/rendered/opentelemetry-collector/deployment.yaml # charts/opentelemetry-demo/examples/custom-environment-variables/rendered/opentelemetry-collector/service.yaml # charts/opentelemetry-demo/examples/custom-environment-variables/rendered/opentelemetry-collector/serviceaccount.yaml # charts/opentelemetry-demo/examples/default/rendered/component.yaml # charts/opentelemetry-demo/examples/default/rendered/grafana/configmap-dashboard-provider.yaml # charts/opentelemetry-demo/examples/default/rendered/grafana/deployment.yaml # charts/opentelemetry-demo/examples/default/rendered/opentelemetry-collector/clusterrole.yaml # charts/opentelemetry-demo/examples/default/rendered/opentelemetry-collector/clusterrolebinding.yaml # charts/opentelemetry-demo/examples/default/rendered/opentelemetry-collector/configmap.yaml # charts/opentelemetry-demo/examples/default/rendered/opentelemetry-collector/deployment.yaml # charts/opentelemetry-demo/examples/default/rendered/opentelemetry-collector/service.yaml # charts/opentelemetry-demo/examples/default/rendered/opentelemetry-collector/serviceaccount.yaml # charts/opentelemetry-demo/examples/kubernetes-infra-monitoring/rendered/component.yaml # charts/opentelemetry-demo/examples/kubernetes-infra-monitoring/rendered/grafana/configmap-dashboard-provider.yaml # charts/opentelemetry-demo/examples/kubernetes-infra-monitoring/rendered/grafana/deployment.yaml # charts/opentelemetry-demo/examples/kubernetes-infra-monitoring/rendered/opentelemetry-collector/clusterrole.yaml # charts/opentelemetry-demo/examples/kubernetes-infra-monitoring/rendered/opentelemetry-collector/clusterrolebinding.yaml # charts/opentelemetry-demo/examples/kubernetes-infra-monitoring/rendered/opentelemetry-collector/configmap-agent.yaml # charts/opentelemetry-demo/examples/kubernetes-infra-monitoring/rendered/opentelemetry-collector/daemonset.yaml # charts/opentelemetry-demo/examples/kubernetes-infra-monitoring/rendered/opentelemetry-collector/serviceaccount.yaml # charts/opentelemetry-demo/examples/public-hosted-ingress/rendered/component.yaml # charts/opentelemetry-demo/examples/public-hosted-ingress/rendered/grafana/configmap-dashboard-provider.yaml # charts/opentelemetry-demo/examples/public-hosted-ingress/rendered/grafana/deployment.yaml # charts/opentelemetry-demo/examples/public-hosted-ingress/rendered/opentelemetry-collector/clusterrole.yaml # charts/opentelemetry-demo/examples/public-hosted-ingress/rendered/opentelemetry-collector/clusterrolebinding.yaml # charts/opentelemetry-demo/examples/public-hosted-ingress/rendered/opentelemetry-collector/configmap.yaml # charts/opentelemetry-demo/examples/public-hosted-ingress/rendered/opentelemetry-collector/deployment.yaml # charts/opentelemetry-demo/examples/public-hosted-ingress/rendered/opentelemetry-collector/ingress.yaml # charts/opentelemetry-demo/examples/public-hosted-ingress/rendered/opentelemetry-collector/service.yaml # charts/opentelemetry-demo/examples/public-hosted-ingress/rendered/opentelemetry-collector/serviceaccount.yaml # charts/opentelemetry-demo/values.yaml
# Conflicts: # charts/opentelemetry-demo/Chart.yaml # charts/opentelemetry-demo/examples/bring-your-own-observability/rendered/component.yaml # charts/opentelemetry-demo/examples/bring-your-own-observability/rendered/flagd-config.yaml # charts/opentelemetry-demo/examples/bring-your-own-observability/rendered/product-catalog-products.yaml # charts/opentelemetry-demo/examples/bring-your-own-observability/rendered/serviceaccount.yaml # charts/opentelemetry-demo/examples/collector-as-daemonset/rendered/component.yaml # charts/opentelemetry-demo/examples/collector-as-daemonset/rendered/flagd-config.yaml # charts/opentelemetry-demo/examples/collector-as-daemonset/rendered/grafana-config.yaml # charts/opentelemetry-demo/examples/collector-as-daemonset/rendered/product-catalog-products.yaml # charts/opentelemetry-demo/examples/collector-as-daemonset/rendered/serviceaccount.yaml # charts/opentelemetry-demo/examples/custom-environment-variables/rendered/component.yaml # charts/opentelemetry-demo/examples/custom-environment-variables/rendered/flagd-config.yaml # charts/opentelemetry-demo/examples/custom-environment-variables/rendered/grafana-config.yaml # charts/opentelemetry-demo/examples/custom-environment-variables/rendered/product-catalog-products.yaml # charts/opentelemetry-demo/examples/custom-environment-variables/rendered/serviceaccount.yaml # charts/opentelemetry-demo/examples/default/rendered/component.yaml # charts/opentelemetry-demo/examples/default/rendered/flagd-config.yaml # charts/opentelemetry-demo/examples/default/rendered/grafana-config.yaml # charts/opentelemetry-demo/examples/default/rendered/product-catalog-products.yaml # charts/opentelemetry-demo/examples/default/rendered/serviceaccount.yaml # charts/opentelemetry-demo/examples/kubernetes-infra-monitoring/rendered/component.yaml # charts/opentelemetry-demo/examples/kubernetes-infra-monitoring/rendered/flagd-config.yaml # charts/opentelemetry-demo/examples/kubernetes-infra-monitoring/rendered/grafana-config.yaml # charts/opentelemetry-demo/examples/kubernetes-infra-monitoring/rendered/product-catalog-products.yaml # charts/opentelemetry-demo/examples/kubernetes-infra-monitoring/rendered/serviceaccount.yaml # charts/opentelemetry-demo/examples/public-hosted-ingress/rendered/component.yaml # charts/opentelemetry-demo/examples/public-hosted-ingress/rendered/flagd-config.yaml # charts/opentelemetry-demo/examples/public-hosted-ingress/rendered/grafana-config.yaml # charts/opentelemetry-demo/examples/public-hosted-ingress/rendered/product-catalog-products.yaml # charts/opentelemetry-demo/examples/public-hosted-ingress/rendered/serviceaccount.yaml
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you share more context on why we should use auto-instrumentation for the otel-demo services? The otel-demo services are already configured with its corresponding Otel SDK, what would be the use case of dynamically injecting another SDK?
An alterative would be using the kube-stack Helm Chart for deploying the collectors and create a new k8s-only uninstrumented (no SDK) service in the otel-demo for the auto instrumentation use case.
+1 that otel-demo services are instrumented with OTel SDKs today. However, I think it's valuable to demo the OTel Operator Instrumentation CRD with the
+1 I see it as a subsequent milestone. |
Use the OpenTelemetry Kubernetes Operator (aka OTel Operator) to inject SDK configuration and manage OTel Collectors.
To ease usage of the OTel Operator, we deploy it through the OpenTelemetry Kube Stack Helm Chart.
Noteworthy:
inject-sdk
with env vars likeOTEL_OTLP_EXPORTER_ENDPOINT
, we don't inject the SDKs themselves likeinject-java
because OTel SDKs are already bundled in the container images. Note that bundling OTel SDKs in container images enables the OTel Demo to produce the same container images for th Docker Compose and Kubernetes deployments.grpc
andhttp/protobuf
requiring to inject the 2grpc
andhttp/protobuf
endpoint configurations while the OTel Operator Instrumentation CRD doesn't offer such flexibility, requiring for the moment to sometimes override theOTEL_EXPORTER_OTLP_ENDPOINT
env var at the component level.ad
,fraud-detection
...) so that these components get the OTel configuration injected through env vars.restart-services-after-otel-operator-is-ready
jobPending work:
./examples
an propose alternatives:bring-your-own-observability
: should just be a change in the otel-col config inValues.yaml
to add exporters to "your own observability"collector-as-damonset
: I deleted it asdaemon
becomes the default deploymentcustom-environment-variable
: should just be a change inValues.yaml
kubernetes-infra-monitoring
: I guess we could delete it, it will just be changing thepresets
inValues.yaml
:logsCollection
,hostMetrics
,kubeletMetrics
,kubernetesEvents
, andclusterMetrics
public-hosted-ingres
: TODOhttpcheck/frontend-proxy
,nginx
,postgresql
,redis
...) that are currently deployed on daemon collectors even though they should run as singletons. Solutions like leader election, OTel Col receiver creator, or the creation of a Gateway collector should be looked at.Successfully tested on
FYI @rogercoll