diff --git a/charts/opentelemetry-collector/.helmignore b/charts/opentelemetry-collector/.helmignore new file mode 100644 index 00000000000..0e8a0eb36f4 --- /dev/null +++ b/charts/opentelemetry-collector/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/opentelemetry-collector/Chart.yaml b/charts/opentelemetry-collector/Chart.yaml new file mode 100644 index 00000000000..9fb98d214de --- /dev/null +++ b/charts/opentelemetry-collector/Chart.yaml @@ -0,0 +1,16 @@ +apiVersion: v2 +name: opentelemetry-collector +version: 0.1.0 +description: OpenTelemetry Collector Helm chart for Kubernetes +type: application +home: https://opentelemetry.io/ +sources: + - https://github.com/open-telemetry/opentelemetry-collector + - https://github.com/open-telemetry/opentelemetry-collector-contrib +maintainers: + - name: bogdandrutu + - name: dmitryax + - name: pjanotti + - name: tigrannajaryan +icon: https://opentelemetry.io/img/logos/opentelemetry-logo-nav.png +appVersion: 0.11.0 diff --git a/charts/opentelemetry-collector/README.md b/charts/opentelemetry-collector/README.md new file mode 100644 index 00000000000..625deb2c362 --- /dev/null +++ b/charts/opentelemetry-collector/README.md @@ -0,0 +1,107 @@ +# OpenTelemetry Collector Helm Chart + +The helm chart installs [OpenTelemetry Collector](https://github.com/open-telemetry/opentelemetry-collector) +in kubernetes cluster. + +## Prerequisites + +- Helm 3.0+ + +## Installing the Chart + +Add OpenTelemetry Helm repository: + +```console +helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts +``` + +To install the chart with the release name my-opentelemetry-collector, run the following command: + +```console +helm install my-opentelemetry-collector open-telemetry/opentelemetry-collector +``` + +## Configuration + +### Default configuration + +By default this chart will deploy an OpenTelemetry Collector as daemonset with two pipelines (traces and metrics) +and logging exporter enabled by default. Besides daemonset (agent), it can be also installed as standalone deployment. +Both modes can be enabled together, in that case metrics and traces will be flowing from agents to standalone collectors. + +*Example*: Install collector as a standalone deployment, and do not run it as an agent. +```yaml +agentCollector: + enabled: false +standaloneCollector: + enabled: true +``` + +By default collector has the following receivers enabled: +- **metrics**: OTLP and prometheus. Prometheus is configured only for scraping collector's own metrics. +- **traces**: OTLP, zipkin and jaeger (thrift and grpc). + +There are two ways to configure collector pipelines, which can be used together as well. + +### Basic top level configuration with `telemetry` property + +*Example*: Disable metrics pipeline and send traces to zipkin exporter: +```yaml +telemetry: + metrics: + enabled: false + traces: + exporter: + type: zipkin + config: + endpoint: zipkin-all-in-one:14250 +``` + +### Configuration with `agentCollector` and `standaloneCollector` properties + +`agentCollector` and `standaloneCollector` properties allow to override collector configurations +and default parameters applied on the k8s pods. + +`agentCollector(standaloneCollector).configOverride` property allows to provide an extra +configuration that will be merged into the default configuration. + +*Example*: Enable host metrics receiver on the agents: +```yaml +agentCollector: + configOverride: + receivers: + hostmetrics: + scrapers: + cpu: + load: + memory: + disk: + service: + pipelines: + metrics: + receivers: [prometheus, hostmetrics] + extraEnvs: + - name: HOST_PROC + value: /hostfs/proc + - name: HOST_SYS + value: /hostfs/sys + - name: HOST_ETC + value: /hostfs/etc + - name: HOST_VAR + value: /hostfs/var + - name: HOST_RUN + value: /hostfs/run + - name: HOST_DEV + value: /hostfs/dev + extraHostPathMounts: + - name: hostfs + hostPath: / + mountPath: /hostfs + readOnly: true + mountPropagation: HostToContainer +``` + +### Other configuration options + +The [values.yaml](./values.yaml) file contains information about all other configuration +options for this chart. diff --git a/charts/opentelemetry-collector/templates/NOTES.txt b/charts/opentelemetry-collector/templates/NOTES.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/charts/opentelemetry-collector/templates/_helpers.tpl b/charts/opentelemetry-collector/templates/_helpers.tpl new file mode 100644 index 00000000000..490372e2122 --- /dev/null +++ b/charts/opentelemetry-collector/templates/_helpers.tpl @@ -0,0 +1,151 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "opentelemetry-collector.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "opentelemetry-collector.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "opentelemetry-collector.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "opentelemetry-collector.labels" -}} +helm.sh/chart: {{ include "opentelemetry-collector.chart" . }} +{{ include "opentelemetry-collector.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "opentelemetry-collector.selectorLabels" -}} +app.kubernetes.io/name: {{ include "opentelemetry-collector.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "opentelemetry-collector.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "opentelemetry-collector.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} + +{{/* +Build base config file with pipelines +*/}} +{{- define "opentelemetry-collector.pipelinesConfig" -}} +{{- $config := include "opentelemetry-collector.baseConfig" . | fromYaml -}} +{{- range $telemetryName, $telemetryParams := .Values.telemetry }} + {{- if index $telemetryParams "enabled" }} + {{- $config := include (printf "opentelemetry-collector.%sPipelineConfig" $telemetryName) $ | fromYaml | mustMergeOverwrite $config }} + {{- end }} +{{- end }} +{{- $config | toYaml }} +{{- end }} + +{{/* +Build config file for agent OpenTelemetry Collector +*/}} +{{- define "opentelemetry-collector.agentCollectorConfig" -}} +{{- $values := deepCopy .Values.agentCollector | mustMergeOverwrite (deepCopy .Values) }} +{{- $data := dict "Values" $values | mustMergeOverwrite (deepCopy .) }} +{{- $config := include "opentelemetry-collector.pipelinesConfig" $data | fromYaml }} +{{- $config := include "opentelemetry-collector.agentConfigOverride" $data | fromYaml | mustMergeOverwrite $config }} +{{- .Values.agentCollector.configOverride | mustMergeOverwrite $config | toYaml }} +{{- end }} + +{{/* +Build config file for standalone OpenTelemetry Collector +*/}} +{{- define "opentelemetry-collector.standaloneCollectorConfig" -}} +{{- $values := deepCopy .Values.standaloneCollector | mustMergeOverwrite (deepCopy .Values) }} +{{- $data := dict "Values" $values | mustMergeOverwrite (deepCopy .) }} +{{- $config := include "opentelemetry-collector.pipelinesConfig" $data | fromYaml }} +{{- .Values.standaloneCollector.configOverride | mustMergeOverwrite $config | toYaml }} +{{- end }} + +{{/* +Convert memory value from resources.limit to numeric value in MiB to be used by otel memory_limiter processor. +*/}} +{{- define "opentelemetry-collector.convertMemToMib" -}} +{{- $mem := lower . -}} +{{- if hasSuffix "e" $mem -}} +{{- trimSuffix "e" $mem | atoi | mul 1000 | mul 1000 | mul 1000 | mul 1000 -}} +{{- else if hasSuffix "ei" $mem -}} +{{- trimSuffix "ei" $mem | atoi | mul 1024 | mul 1024 | mul 1024 | mul 1024 -}} +{{- else if hasSuffix "p" $mem -}} +{{- trimSuffix "p" $mem | atoi | mul 1000 | mul 1000 | mul 1000 -}} +{{- else if hasSuffix "pi" $mem -}} +{{- trimSuffix "pi" $mem | atoi | mul 1024 | mul 1024 | mul 1024 -}} +{{- else if hasSuffix "t" $mem -}} +{{- trimSuffix "t" $mem | atoi | mul 1000 | mul 1000 -}} +{{- else if hasSuffix "ti" $mem -}} +{{- trimSuffix "ti" $mem | atoi | mul 1024 | mul 1024 -}} +{{- else if hasSuffix "g" $mem -}} +{{- trimSuffix "g" $mem | atoi | mul 1000 -}} +{{- else if hasSuffix "gi" $mem -}} +{{- trimSuffix "gi" $mem | atoi | mul 1024 -}} +{{- else if hasSuffix "m" $mem -}} +{{- div (trimSuffix "m" $mem | atoi | mul 1000) 1024 -}} +{{- else if hasSuffix "mi" $mem -}} +{{- trimSuffix "mi" $mem | atoi -}} +{{- else if hasSuffix "k" $mem -}} +{{- div (trimSuffix "k" $mem | atoi) 1000 -}} +{{- else if hasSuffix "ki" $mem -}} +{{- div (trimSuffix "ki" $mem | atoi) 1024 -}} +{{- else -}} +{{- div (div ($mem | atoi) 1024) 1024 -}} +{{- end -}} +{{- end -}} + +{{/* +Get otel memory_limiter limit_mib value based on 80% of resources.memory.limit. +*/}} +{{- define "opentelemetry-collector.getMemLimitMib" -}} +{{- div (mul (include "opentelemetry-collector.convertMemToMib" .) 80) 100 }} +{{- end -}} + +{{/* +Get otel memory_limiter spike_limit_mib value based on 25% of resources.memory.limit. +*/}} +{{- define "opentelemetry-collector.getMemSpikeLimitMib" -}} +{{- div (mul (include "opentelemetry-collector.convertMemToMib" .) 25) 100 }} +{{- end -}} + +{{/* +Get otel memory_limiter ballast_size_mib value based on 40% of resources.memory.limit. +*/}} +{{- define "opentelemetry-collector.getMemBallastSizeMib" }} +{{- div (mul (include "opentelemetry-collector.convertMemToMib" .) 40) 100 }} +{{- end -}} diff --git a/charts/opentelemetry-collector/templates/_pod.tpl b/charts/opentelemetry-collector/templates/_pod.tpl new file mode 100644 index 00000000000..c19a676ca85 --- /dev/null +++ b/charts/opentelemetry-collector/templates/_pod.tpl @@ -0,0 +1,88 @@ +{{- define "opentelemetry-collector.pod" -}} +{{- with .Values.imagePullSecrets }} +imagePullSecrets: + {{- toYaml . | nindent 2 }} +{{- end }} +serviceAccountName: {{ include "opentelemetry-collector.serviceAccountName" . }} +securityContext: + {{- toYaml .Values.podSecurityContext | nindent 2 }} +containers: + - name: {{ .Chart.Name }} + command: + - /{{ .Values.command.name }} + - --config=/conf/relay.yaml + - --metrics-addr=0.0.0.0:8888 + - --mem-ballast-size-mib={{ template "opentelemetry-collector.getMemBallastSizeMib" .Values.resources.limits.memory }} + {{- range .Values.command.extraArgs }} + - {{ . }} + {{- end }} + securityContext: + {{- toYaml .Values.securityContext | nindent 6 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + {{- range $key, $port := .Values.ports }} + {{- if $port.enabled }} + - name: {{ $key }} + containerPort: {{ $port.containerPort }} + protocol: {{ $port.protocol }} + {{- if and $.isAgent $port.hostPort }} + hostPort: {{ $port.hostPort }} + {{- end }} + {{- end }} + {{- end }} + env: + - name: MY_POD_IP + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: status.podIP + {{- with .Values.extraEnvs }} + {{- . | toYaml | nindent 6 }} + {{- end }} + livenessProbe: + httpGet: + path: / + port: 13133 + readinessProbe: + httpGet: + path: / + port: 13133 + resources: + {{- toYaml .Values.resources | nindent 6 }} + volumeMounts: + - mountPath: /conf + name: {{ .Chart.Name }}-configmap + {{- range .Values.extraHostPathMounts }} + - name: {{ .name }} + mountPath: {{ .mountPath }} + readOnly: {{ .readOnly }} + {{- if .mountPropagation }} + mountPropagation: {{ .mountPropagation }} + {{- end }} + {{- end }} +volumes: + - name: {{ .Chart.Name }}-configmap + configMap: + name: {{ include "opentelemetry-collector.fullname" . }}{{ .configmapSuffix }} + items: + - key: relay + path: relay.yaml + {{- range .Values.extraHostPathMounts }} + - name: {{ .name }} + hostPath: + path: {{ .hostPath }} + {{- end }} +{{- with .Values.nodeSelector }} +nodeSelector: + {{- toYaml . | nindent 2 }} +{{- end }} +{{- with .Values.affinity }} +affinity: + {{- toYaml . | nindent 2 }} +{{- end }} +{{- with .Values.tolerations }} +tolerations: + {{- toYaml . | nindent 2 }} +{{- end }} +{{- end }} diff --git a/charts/opentelemetry-collector/templates/config/_agent-config-override.tpl b/charts/opentelemetry-collector/templates/config/_agent-config-override.tpl new file mode 100644 index 00000000000..ce7cb138e00 --- /dev/null +++ b/charts/opentelemetry-collector/templates/config/_agent-config-override.tpl @@ -0,0 +1,23 @@ +{{/* +Default config override for agent collector deamonset +*/}} +{{- define "opentelemetry-collector.agentConfigOverride" -}} +exporters: + {{- if .Values.standaloneCollector.enabled }} + otlp: + endpoint: {{ include "opentelemetry-collector.fullname" . }}:55680 + insecure: true + {{- end }} + +service: + pipelines: + {{- if and .Values.telemetry.metrics.enabled .Values.standaloneCollector.enabled }} + metrics: + exporters: [otlp] + {{- end }} + + {{- if and .Values.telemetry.traces.enabled .Values.standaloneCollector.enabled }} + traces: + exporters: [otlp] + {{- end }} +{{- end }} diff --git a/charts/opentelemetry-collector/templates/config/_base.tpl b/charts/opentelemetry-collector/templates/config/_base.tpl new file mode 100644 index 00000000000..e32bf78628f --- /dev/null +++ b/charts/opentelemetry-collector/templates/config/_base.tpl @@ -0,0 +1,34 @@ +{{/* +Base configuration for OpenTelemetry Collector +*/}} +{{- define "opentelemetry-collector.baseConfig" -}} +extensions: + health_check: {} + +receivers: + otlp: + protocols: + grpc: + http: + +processors: + queued_retry: {} + batch: {} + + memory_limiter: + # check_interval is the time between measurements of memory usage. + check_interval: 5s + + # By default limit_mib is set to 80% of ".Values.resources.limits.memory" + limit_mib: {{ include "opentelemetry-collector.getMemLimitMib" .Values.resources.limits.memory }} + + # By default spike_limit_mib is set to 25% of ".Values.resources.limits.memory" + spike_limit_mib: {{ include "opentelemetry-collector.getMemSpikeLimitMib" .Values.resources.limits.memory }} + + # By default ballast_size_mib is set to 40% of ".Values.resources.limits.memory" + ballast_size_mib: {{ include "opentelemetry-collector.getMemBallastSizeMib" .Values.resources.limits.memory }} + +service: + extensions: [health_check] + pipelines: {} +{{- end }} diff --git a/charts/opentelemetry-collector/templates/config/_metrics.tpl b/charts/opentelemetry-collector/templates/config/_metrics.tpl new file mode 100644 index 00000000000..b17a8388477 --- /dev/null +++ b/charts/opentelemetry-collector/templates/config/_metrics.tpl @@ -0,0 +1,23 @@ +{{/* +Default metrics pipeline config +*/}} +{{- define "opentelemetry-collector.metricsPipelineConfig" -}} +receivers: + # Prometheus receiver scraping the prometheus metrics from the pod itself. + prometheus: + config: + scrape_configs: + - job_name: 'opentelemetry-collector' + scrape_interval: 10s + static_configs: + - targets: ["${MY_POD_IP}:8888"] +exporters: + {{ .Values.telemetry.metrics.exporter.type }}: + {{- .Values.telemetry.metrics.exporter.config | toYaml | nindent 4 }} +service: + pipelines: + metrics: + receivers: [otlp, prometheus] + processors: [memory_limiter, batch, queued_retry] + exporters: [{{ .Values.telemetry.metrics.exporter.type }}] +{{- end }} diff --git a/charts/opentelemetry-collector/templates/config/_traces.tpl b/charts/opentelemetry-collector/templates/config/_traces.tpl new file mode 100644 index 00000000000..de9a36320a1 --- /dev/null +++ b/charts/opentelemetry-collector/templates/config/_traces.tpl @@ -0,0 +1,23 @@ +{{/* +Default traces pipeline config +*/}} +{{- define "opentelemetry-collector.tracesPipelineConfig" -}} +receivers: + jaeger: + protocols: + thrift_http: + endpoint: 0.0.0.0:14268 + grpc: + endpoint: 0.0.0.0:14250 + zipkin: + endpoint: 0.0.0.0:9411 +exporters: + {{ .Values.telemetry.traces.exporter.type }}: + {{- .Values.telemetry.traces.exporter.config | toYaml | nindent 4 }} +service: + pipelines: + traces: + receivers: [otlp, jaeger, zipkin] + processors: [memory_limiter, batch, queued_retry] + exporters: [{{ .Values.telemetry.traces.exporter.type }}] +{{- end }} diff --git a/charts/opentelemetry-collector/templates/configmap-agent.yaml b/charts/opentelemetry-collector/templates/configmap-agent.yaml new file mode 100644 index 00000000000..bc8af37f753 --- /dev/null +++ b/charts/opentelemetry-collector/templates/configmap-agent.yaml @@ -0,0 +1,11 @@ +{{- if .Values.agentCollector.enabled -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "opentelemetry-collector.fullname" . }}-agent + labels: + {{- include "opentelemetry-collector.labels" . | nindent 4 }} +data: + relay: | + {{- include "opentelemetry-collector.agentCollectorConfig" . | nindent 4 -}} +{{- end }} diff --git a/charts/opentelemetry-collector/templates/configmap.yaml b/charts/opentelemetry-collector/templates/configmap.yaml new file mode 100644 index 00000000000..d329bdd2b3d --- /dev/null +++ b/charts/opentelemetry-collector/templates/configmap.yaml @@ -0,0 +1,11 @@ +{{- if .Values.standaloneCollector.enabled -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "opentelemetry-collector.fullname" . }} + labels: + {{- include "opentelemetry-collector.labels" . | nindent 4 }} +data: + relay: | + {{- include "opentelemetry-collector.standaloneCollectorConfig" . | nindent 4 -}} +{{- end }} diff --git a/charts/opentelemetry-collector/templates/daemonset.yaml b/charts/opentelemetry-collector/templates/daemonset.yaml new file mode 100644 index 00000000000..a456841f9d2 --- /dev/null +++ b/charts/opentelemetry-collector/templates/daemonset.yaml @@ -0,0 +1,27 @@ +{{- if .Values.agentCollector.enabled -}} +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: {{ include "opentelemetry-collector.fullname" . }}-agent + labels: + {{- include "opentelemetry-collector.labels" . | nindent 4 }} +spec: + selector: + matchLabels: + {{- include "opentelemetry-collector.selectorLabels" . | nindent 6 }} + component: agent-collector + template: + metadata: + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap-agent.yaml") . | sha256sum }} + {{- with .Values.agentCollector.podAnnotations }} + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "opentelemetry-collector.selectorLabels" . | nindent 8 }} + component: agent-collector + spec: + {{- $podValues := deepCopy .Values.agentCollector | mustMergeOverwrite (deepCopy .Values) }} + {{- $podData := dict "Values" $podValues "configmapSuffix" "-agent" "isAgent" true }} + {{- include "opentelemetry-collector.pod" ($podData | mustMergeOverwrite (deepCopy .)) | nindent 6 }} +{{- end }} diff --git a/charts/opentelemetry-collector/templates/deployment.yaml b/charts/opentelemetry-collector/templates/deployment.yaml new file mode 100644 index 00000000000..b0039f7a887 --- /dev/null +++ b/charts/opentelemetry-collector/templates/deployment.yaml @@ -0,0 +1,30 @@ +{{- if .Values.standaloneCollector.enabled -}} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "opentelemetry-collector.fullname" . }} + labels: + {{- include "opentelemetry-collector.labels" . | nindent 4 }} +spec: +{{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.standaloneCollector.replicaCount }} +{{- end }} + selector: + matchLabels: + {{- include "opentelemetry-collector.selectorLabels" . | nindent 6 }} + component: standalone-collector + template: + metadata: + annotations: + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + {{- with .Values.standaloneCollector.podAnnotations }} + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "opentelemetry-collector.selectorLabels" . | nindent 8 }} + component: standalone-collector + spec: + {{- $podValues := deepCopy .Values.standaloneCollector | mustMergeOverwrite (deepCopy .Values) }} + {{- $podData := dict "Values" $podValues "configmapSuffix" "" "isAgent" false }} + {{- include "opentelemetry-collector.pod" ($podData | mustMergeOverwrite (deepCopy .)) | nindent 6 }} +{{- end }} diff --git a/charts/opentelemetry-collector/templates/hpa.yaml b/charts/opentelemetry-collector/templates/hpa.yaml new file mode 100644 index 00000000000..0b69df2814b --- /dev/null +++ b/charts/opentelemetry-collector/templates/hpa.yaml @@ -0,0 +1,28 @@ +{{- if and .Values.autoscaling.enabled .Values.standaloneCollector.enabled }} +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "opentelemetry-collector.fullname" . }} + labels: + {{- include "opentelemetry-collector.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "opentelemetry-collector.fullname" . }} + minReplicas: {{ .Values.autoscaling.minReplicas }} + maxReplicas: {{ .Values.autoscaling.maxReplicas }} + metrics: + {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} diff --git a/charts/opentelemetry-collector/templates/service.yaml b/charts/opentelemetry-collector/templates/service.yaml new file mode 100644 index 00000000000..05ced3a30f8 --- /dev/null +++ b/charts/opentelemetry-collector/templates/service.yaml @@ -0,0 +1,26 @@ +{{- if .Values.standaloneCollector.enabled -}} +apiVersion: v1 +kind: Service +metadata: + name: {{ include "opentelemetry-collector.fullname" . }} + labels: + {{- include "opentelemetry-collector.labels" . | nindent 4 }} + {{- with .Values.service.annotations }} + annotations: + {{ toYaml . | trim | indent 4 }} + {{- end }} +spec: + type: {{ .Values.service.type }} + ports: + {{- range $key, $port := .Values.ports }} + {{- if $port.enabled }} + - name: {{ $key }} + port: {{ $port.servicePort }} + targetPort: {{ $key }} + protocol: {{ $port.protocol }} + {{- end }} + {{- end }} + selector: + {{- include "opentelemetry-collector.selectorLabels" . | nindent 4 }} + component: standalone-collector +{{- end }} diff --git a/charts/opentelemetry-collector/templates/serviceaccount.yaml b/charts/opentelemetry-collector/templates/serviceaccount.yaml new file mode 100644 index 00000000000..5daa658e6d3 --- /dev/null +++ b/charts/opentelemetry-collector/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "opentelemetry-collector.serviceAccountName" . }} + labels: + {{- include "opentelemetry-collector.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/charts/opentelemetry-collector/values.schema.json b/charts/opentelemetry-collector/values.schema.json new file mode 100644 index 00000000000..7cee435913f --- /dev/null +++ b/charts/opentelemetry-collector/values.schema.json @@ -0,0 +1,55 @@ +{ + "$schema": "http://json-schema.org/schema#", + "type": "object", + "title": "Values", + "properties": { + "telemetry": { + "description": "Enabled telemetry pipelines", + "type": "object", + "properties": { + "metrics": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": ["enabled"] + }, + "traces": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": ["enabled"] + } + } + }, + "standaloneCollector": { + "description": "Configuration for standalone OpenTelemetry Collector deployment", + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": ["enabled"] + }, + "agentCollector": { + "description": "Configuration for OpenTelemetry Collector daemonset", + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + }, + "required": ["enabled"] + } + }, + "anyOf": [ + {"properties": {"standaloneCollector": {"properties": {"enabled": {"const": true}}}}}, + {"properties": {"agentCollector": {"properties": {"enabled": {"const": true}}}}} + ] +} diff --git a/charts/opentelemetry-collector/values.yaml b/charts/opentelemetry-collector/values.yaml new file mode 100644 index 00000000000..b9ab7bf6e80 --- /dev/null +++ b/charts/opentelemetry-collector/values.yaml @@ -0,0 +1,197 @@ +# Default values for opentelemetry-collector. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +nameOverride: "" +fullnameOverride: "" + +# Basic parameters that used to compose default configmaps +telemetry: + metrics: + enabled: true + exporter: + type: logging + config: {} + # logLevel: debug + + traces: + enabled: true + exporter: + type: logging + config: {} + # type: jaeger + # config: + # endpoint: jaeger-all-in-one:14250 + # type: zipkin + # config: + # endpoint: zipkin-all-in-one:14250 + +# Shared params for agentCollector daemonset and standaloneCollector deployment pods. +# Can be overridden here or for any component independently using the same keys. + +image: + repository: otel/opentelemetry-collector + # repository: otel/opentelemetry-collector-contrib + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "" +imagePullSecrets: [] + +# OpenTelemetry Collector executable +command: + name: otelcol + # name: otelcontribcol + extraArgs: [] + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podSecurityContext: {} +securityContext: {} + +nodeSelector: {} +tolerations: [] +affinity: {} + +extraEnvs: [] +extraHostPathMounts: [] + +# Configuration for ports, shared between agentCollector, standaloneCollector and service. +# Can be overridden here or for agentCollector and standaloneCollector independently. +ports: + otlp: + enabled: true + containerPort: 55680 + servicePort: 55680 + hostPort: 55680 + protocol: TCP + jaeger-thrift: + enabled: true + containerPort: 14268 + servicePort: 14268 + hostPort: 14268 + protocol: TCP + jaeger-grpc: + enabled: true + containerPort: 14250 + servicePort: 14250 + hostPort: 14250 + protocol: TCP + zipkin: + enabled: true + containerPort: 9411 + servicePort: 9411 + hostPort: 9411 + protocol: TCP + +# Configuration for agent OpenTelemetry Collector daemonset, enabled by default +agentCollector: + enabled: true + + resources: + limits: + cpu: 256m + memory: 512Mi + + podAnnotations: {} + + # Configuration override that will be merged into the agent's default config + configOverride: {} + # The following config override can be used to enable host receiver + # receivers: + # hostmetrics: + # scrapers: + # cpu: + # disk: + # filesystem: + # service: + # pipelines: + # metrics: + # receivers: [prometheus, hostmetrics] + + # Any of the top level options can be overridden specifically for agent + # image: {} + # imagePullSecrets: [] + # command: {} + # serviceAccount: {} + # podSecurityContext: {} + # securityContext: {} + # nodeSelector: {} + # tolerations: [] + # affinity: {} + + # The following option overrides can be used with host receiver + # extraEnvs: + # - name: HOST_PROC + # value: /hostfs/proc + # - name: HOST_SYS + # value: /hostfs/sys + # - name: HOST_ETC + # value: /hostfs/etc + # - name: HOST_VAR + # value: /hostfs/var + # - name: HOST_RUN + # value: /hostfs/run + # - name: HOST_DEV + # value: /hostfs/dev + # extraHostPathMounts: + # - name: hostfs + # hostPath: / + # mountPath: /hostfs + # readOnly: true + # mountPropagation: HostToContainer + + # The following example disables all jaeger ports and zipkin hostPort on the agent + # ports: + # jaeger-thrift: + # enabled: false + # jaeger-grpc: + # enabled: false + # zipkin: + # hostPort: "" + +# Configuration for standalone OpenTelemetry Collector deployment, disabled by default +standaloneCollector: + enabled: false + + replicaCount: 1 + + resources: + limits: + cpu: 1 + memory: 2Gi + + podAnnotations: {} + + # Configuration override that will be merged into the standalone collector default config + configOverride: {} + + # Any of the top level options can be overridden specifically for standalone collector + # image: {} + # imagePullSecrets: [] + # command: {} + # serviceAccount: {} + # podSecurityContext: {} + # securityContext: {} + # nodeSelector: {} + # tolerations: [] + # affinity: {} + # ports: {} + +service: + type: ClusterIP + annotations: {} + +# autoscaling is used only if standaloneCollector enabled +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 10 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80