Skip to content

Instantly share code, notes, and snippets.

@gingerwizard
Created March 27, 2023 17:06
Show Gist options
  • Save gingerwizard/f63c1c809d895937fa5929ab6c7c654d to your computer and use it in GitHub Desktop.
Save gingerwizard/f63c1c809d895937fa5929ab6c7c654d to your computer and use it in GitHub Desktop.
default:
# list of environment variables applied to all components
env:
- name: OTEL_SERVICE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: "metadata.labels['app.kubernetes.io/component']"
- name: OTEL_K8S_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: OTEL_K8S_NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
- name: OTEL_K8S_POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: OTEL_K8S_POD_UID
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.uid
- name: OTEL_COLLECTOR_NAME
value: '{{ include "otel-demo.name" . }}-otelcol'
- name: OTEL_RESOURCE_ATTRIBUTES
value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME)
# Allows overriding and additions to .Values.default.env
envOverrides: []
# - name: OTEL_K8S_NODE_NAME
# value: "someConstantValue"
image:
repository: ghcr.io/open-telemetry/demo
# Overrides the image tag whose default is the chart appVersion.
# The service's name will be applied to the end of this value.
tag: ""
pullPolicy: IfNotPresent
pullSecrets: []
schedulingRules:
nodeSelector: {}
affinity: {}
tolerations: []
securityContext: {}
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: ""
components:
## Demo Components are named objects (services) with several properties
# demoService:
## Enable the component (service)
# enabled: true
# useDefault:
## Use default environment variables
# env: true
## Override Image repository and Tag. Tag will use appVersion as default.
## Component's name will be applied to end of this value.
# imageOverride: {}
## Optional service definitions to apply
# service:
## Service Type to use for this component. Default is ClusterIP.
# type: ClusterIP
## Service Port to use to expose this component. Default is nil
# port: 8080
## Service Node Port to use to expose this component on a NodePort service. Default is nil
# nodePort: 30080
## Service Annotations to add to this component
# annotations: {}
## Additional service ports to use to expose this component
# ports:
# - name: extraServicePort
# value: 8081
## Environment variables to add to the component's pod
# env:
## Environment variables that upsert (append + merge) into the `env` specification for this component.
# envOverrides:
## Pod Scheduling rules for nodeSelector, affinity, or tolerations.
# schedulingRules:
# nodeSelector: {}
# affinity: {}
# tolerations: []
## Pod Annotations to add to this component
# podAnnotations: {}
## Resources for this component
# resources: {}
## Container security context for setting user ID (UID), group ID (GID) and other security policies
# securityContext:
## Ingresses rules to add for the to the component
# ingress:
## Enable the creation of Ingress rules. Default is false
# enabled: false
## Annotations to add to the ingress rule
# annotations: {}
## Which Ingress class (controller) to use. Default is unspecified.
# ingressClassName: nginx
## Hosts definitions for the Ingress rule
# hosts:
# - host: demo.example.com
## Each host can have multiple paths/routes
# paths:
# - path: /
# pathType: Prefix
# port: 8080
## Optional TLS specifications for the Ingress rule
# tls:
# - secretName: demo-tls
# hosts:
# - demo.example.com
## Additional ingresses - only created if ingress.enabled is true
## Useful for when differently annotated ingress services are required
## Each additional ingress needs key "name" set to something unique
# additionalIngresses: []
# - name: extra-demo-ingress
# ingressClassName: nginx
# annotations: {}
# hosts:
# - host: demo.example.com
# paths:
# - path: /
# pathType: Prefix
# port: 8080
# tls:
# - secretName: demo-tls
# hosts:
# - demo.example.com
# # Command to use in the container spec, in case you don't want to go with the default command from the image.
# command: []
# # Configuration to for this service; will create a ConfigMap, Volume, and Mount it into the container being spun up/.
# configuration: {}
# # Kubernetes container health check options
# livenessProbe: {}
# # Optional init container to run before the pod starts.
# initContainers:
# - name: <init-container-name>
# image: <init-container-image>
# command: [list of commands for the init container to run]
accountingService:
enabled: true
useDefault:
env: true
env:
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4317
- name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
value: cumulative
- name: KAFKA_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-kafka:9092'
resources:
limits:
memory: 20Mi
initContainers:
- name: wait-for-kafka
image: busybox:latest
command: ['sh', '-c', 'until nc -z -v -w30 {{ include "otel-demo.name" . }}-kafka 9092; do echo waiting for kafka; sleep 2; done;']
adService:
enabled: true
useDefault:
env: true
service:
port: 8080
env:
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4317
- name: AD_SERVICE_PORT
value: "8080"
- name: FEATURE_FLAG_GRPC_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-featureflagservice:50053'
resources:
limits:
memory: 300Mi
cartService:
enabled: true
useDefault:
env: true
service:
port: 8080
env:
- name: ASPNETCORE_URLS
value: http://*:8080
- name: REDIS_ADDR
value: '{{ include "otel-demo.name" . }}-redis:6379'
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4317
- name: CART_SERVICE_PORT
value: "8080"
resources:
limits:
memory: 160Mi
initContainers:
- name: wait-for-redis
image: busybox:latest
command: ['sh', '-c', 'until nc -z -v -w30 {{ include "otel-demo.name" . }}-redis 6379; do echo waiting for redis; sleep 2; done;']
checkoutService:
enabled: true
useDefault:
env: true
service:
port: 8080
env:
- name: CART_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-cartservice:8080'
- name: CURRENCY_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-currencyservice:8080'
- name: PAYMENT_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-paymentservice:8080'
- name: PRODUCT_CATALOG_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-productcatalogservice:8080'
- name: SHIPPING_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-shippingservice:8080'
- name: EMAIL_SERVICE_ADDR
value: 'http://{{ include "otel-demo.name" . }}-emailservice:8080'
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4317
- name: CHECKOUT_SERVICE_PORT
value: "8080"
- name: KAFKA_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-kafka:9092'
resources:
limits:
memory: 20Mi
initContainers:
- name: wait-for-kafka
image: busybox:latest
command: ['sh', '-c', 'until nc -z -v -w30 {{ include "otel-demo.name" . }}-kafka 9092; do echo waiting for kafka; sleep 2; done;']
currencyService:
enabled: true
useDefault:
env: true
service:
port: 8080
env:
- name: PORT
value: "8080"
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4317
- name: CURRENCY_SERVICE_PORT
value: "8080"
resources:
limits:
memory: 20Mi
emailService:
enabled: true
useDefault:
env: true
service:
port: 8080
env:
- name: APP_ENV
value: production
- name: PORT
value: "8080"
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4317
- name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4318/v1/traces
- name: EMAIL_SERVICE_PORT
value: "8080"
resources:
limits:
memory: 100Mi
featureflagService:
enabled: true
useDefault:
env: true
ports:
- name: grpc
value: 50053
- name: http
value: 8081
env:
- name: FEATURE_FLAG_GRPC_SERVICE_PORT
value: "50053"
- name: FEATURE_FLAG_SERVICE_PORT
value: "8081"
- name: OTEL_EXPORTER_OTLP_TRACES_PROTOCOL
value: grpc
- name: DATABASE_URL
value: 'ecto://ffs:ffs@{{ include "otel-demo.name" . }}-ffspostgres:5432/ffs'
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4317
resources:
limits:
memory: 175Mi
livenessProbe:
httpGet:
path: /featureflags/
port: 8081
initialDelaySeconds: 30
periodSeconds: 10
initContainers:
- name: wait-for-ffspostgres
image: busybox:latest
command: ['sh', '-c', 'until nc -z -v -w30 {{ include "otel-demo.name" . }}-ffspostgres 5432; do echo waiting for ffspostgres; sleep 2; done']
frauddetectionService:
enabled: true
useDefault:
env: true
env:
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4317
- name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
value: cumulative
- name: KAFKA_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-kafka:9092'
resources:
limits:
memory: 200Mi
initContainers:
- name: wait-for-kafka
image: busybox:latest
command: ['sh', '-c', 'until nc -z -v -w30 {{ include "otel-demo.name" . }}-kafka 9092; do echo waiting for kafka; sleep 2; done;']
frontend:
enabled: true
useDefault:
env: true
service:
port: 8080
env:
- name: FRONTEND_ADDR
value: :8080
- name: AD_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-adservice:8080'
- name: CART_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-cartservice:8080'
- name: CHECKOUT_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-checkoutservice:8080'
- name: CURRENCY_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-currencyservice:8080'
- name: PRODUCT_CATALOG_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-productcatalogservice:8080'
- name: RECOMMENDATION_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-recommendationservice:8080'
- name: SHIPPING_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-shippingservice:8080'
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4317
- name: WEB_OTEL_SERVICE_NAME
value: frontend-web
- name: FRONTEND_PORT
value: "8080"
- name: PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
value: http://localhost:4318/v1/traces # This expects users to use `kubectl port-forward ...`
resources:
limits:
memory: 200Mi
frontendProxy:
enabled: true
useDefault:
env: true
service:
port: 8080
env:
- name: FRONTEND_PORT
value: "8080"
- name: FRONTEND_HOST
value: '{{ include "otel-demo.name" . }}-frontend'
- name: FEATURE_FLAG_SERVICE_PORT
value: "8081"
- name: FEATURE_FLAG_SERVICE_HOST
value: '{{ include "otel-demo.name" . }}-featureflagservice'
- name: LOCUST_WEB_PORT
value: "8089"
- name: LOCUST_WEB_HOST
value: '{{ include "otel-demo.name" . }}-loadgenerator'
- name: GRAFANA_SERVICE_PORT
value: "80"
- name: GRAFANA_SERVICE_HOST
value: '{{ include "otel-demo.name" . }}-grafana'
- name: JAEGER_SERVICE_PORT
value: "16686"
- name: JAEGER_SERVICE_HOST
value: '{{ include "otel-demo.name" . }}-jaeger-query'
- name: OTEL_COLLECTOR_PORT
value: "4317"
- name: OTEL_COLLECTOR_HOST
value: $(OTEL_COLLECTOR_NAME)
- name: ENVOY_PORT
value: "8080"
resources:
limits:
memory: 50Mi
securityContext:
runAsUser: 101 # envoy
runAsGroup: 101
runAsNonRoot: true
loadgenerator:
enabled: true
useDefault:
env: true
service:
port: 8089
env:
- name: FRONTEND_ADDR
value: '{{ include "otel-demo.name" . }}-frontend:8080'
- name: LOCUST_WEB_PORT
value: "8089"
- name: LOCUST_USERS
value: "10"
- name: LOCUST_SPAWN_RATE
value: "1"
- name: LOCUST_HOST
value: "http://$(FRONTEND_ADDR)"
- name: LOCUST_HEADLESS
value: "false"
- name: LOCUST_AUTOSTART
value: "true"
- name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION
value: python
- name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4318/v1/traces
- name: LOADGENERATOR_PORT
value: "8089"
resources:
limits:
memory: 120Mi
paymentService:
enabled: true
useDefault:
env: true
service:
port: 8080
env:
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4317
- name: PAYMENT_SERVICE_PORT
value: "8080"
resources:
limits:
memory: 120Mi
productCatalogService:
enabled: true
useDefault:
env: true
service:
port: 8080
env:
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4317
- name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
value: cumulative
- name: PRODUCT_CATALOG_SERVICE_PORT
value: "8080"
- name: FEATURE_FLAG_GRPC_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-featureflagservice:50053'
resources:
limits:
memory: 20Mi
quoteService:
enabled: true
useDefault:
env: true
service:
port: 8080
env:
- name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4318/v1/traces
- name: OTEL_PHP_AUTOLOAD_ENABLED
value: "true"
- name: QUOTE_SERVICE_PORT
value: "8080"
resources:
limits:
memory: 40Mi
securityContext:
runAsUser: 33 # www-data
runAsGroup: 33
runAsNonRoot: true
recommendationService:
enabled: true
useDefault:
env: true
service:
port: 8080
env:
- name: OTEL_PYTHON_LOG_CORRELATION
value: "true"
- name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION
value: python
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4317
- name: FEATURE_FLAG_GRPC_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-featureflagservice:50053'
- name: RECOMMENDATION_SERVICE_PORT
value: "8080"
- name: PRODUCT_CATALOG_SERVICE_ADDR
value: '{{ include "otel-demo.name" . }}-productcatalogservice:8080'
resources:
limits:
memory: 500Mi # This is high to enable supporting the recommendationCache feature flag use case
shippingService:
enabled: true
useDefault:
env: true
service:
port: 8080
env:
- name: PORT
value: "8080"
- name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4317/v1/traces
- name: SHIPPING_SERVICE_PORT
value: "8080"
- name: QUOTE_SERVICE_ADDR
value: 'http://{{ include "otel-demo.name" . }}-quoteservice:8080'
resources:
limits:
memory: 20Mi
ffsPostgres:
enabled: true
useDefault:
env: true
imageOverride:
repository: "postgres"
tag: "14"
ports:
- name: postgres
value: 5432
env:
- name: POSTGRES_DB
value: ffs
- name: POSTGRES_PASSWORD
value: ffs
- name: POSTGRES_USER
value: ffs
resources:
limits:
memory: 120Mi
securityContext:
runAsUser: 999 # postgres
runAsGroup: 999
runAsNonRoot: true
kafka:
enabled: true
useDefault:
env: true
ports:
- name: plaintext
value: 9092
- name: controller
value: 9093
env:
- name: KAFKA_ADVERTISED_LISTENERS
value: 'PLAINTEXT://{{ include "otel-demo.name" . }}-kafka:9092'
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://$(OTEL_COLLECTOR_NAME):4317
- name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
value: cumulative
- name: KAFKA_HEAP_OPTS
value: "-Xmx400M -Xms400M"
resources:
limits:
memory: 750Mi
securityContext:
runAsUser: 1000 # appuser
runAsGroup: 1000
runAsNonRoot: true
redis:
enabled: true
useDefault:
env: true
imageOverride:
repository: "redis"
tag: "alpine"
ports:
- name: redis
value: 6379
resources:
limits:
memory: 20Mi
securityContext:
runAsUser: 999 # redis
runAsGroup: 1000
runAsNonRoot: true
opentelemetry-collector:
enabled: true
nameOverride: otelcol
mode: deployment
image:
tag: 0.74.0
resources:
limits:
memory: 125Mi
service:
type: ClusterIP
ports:
metrics:
enabled: true
prometheus:
enabled: true
containerPort: 9464
servicePort: 9464
protocol: TCP
podAnnotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9464"
opentelemetry_community_demo: "true"
config:
receivers:
otlp:
protocols:
http:
# Since this collector needs to receive data from the web, enable cors for all origins
# `allowed_origins` can be refined for your deployment domain
cors:
allowed_origins:
- "http://*"
- "https://*"
exporters:
clickhouse:
endpoint: 'clickhouse://default:<password>@<host>:9440?secure=true'
ttl_days: 3
traces_table_name: otel_traces
timeout: 5s
database: otel
retry_on_failure:
enabled: true
initial_interval: 5s
max_interval: 30s
max_elapsed_time: 300s
processors:
batch:
timeout: 5s
send_batch_size: 100000
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [clickhouse]
jaeger:
enabled: true
provisionDataStore:
cassandra: false
allInOne:
enabled: true
args:
- "--memory.max-traces"
- "10000"
- "--query.base-path"
- "/jaeger/ui"
- "--prometheus.server-url"
- 'http://{{ include "otel-demo.name" . }}-prometheus-server:9090'
extraEnv:
- name: METRICS_STORAGE_TYPE
value: prometheus
resources:
limits:
memory: 300Mi
storage:
type: none
agent:
enabled: false
collector:
enabled: false
query:
enabled: false
prometheus:
enabled: true
alertmanager:
enabled: false
configmapReload:
prometheus:
enabled: false
kube-state-metrics:
enabled: false
prometheus-node-exporter:
enabled: false
prometheus-pushgateway:
enabled: false
server:
extraFlags:
- "enable-feature=exemplar-storage"
global:
scrape_interval: 5s
scrape_timeout: 3s
evaluation_interval: 30s
persistentVolume:
enabled: false
service:
servicePort: 9090
resources:
limits:
memory: 300Mi
serverFiles:
prometheus.yml:
scrape_configs:
- job_name: 'opentelemetry-community-demo'
honor_labels: true
kubernetes_sd_configs:
- role: pod
namespaces:
own_namespace: true
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_opentelemetry_community_demo]
action: keep
regex: true
grafana:
enabled: true
grafana.ini:
auth:
disable_login_form: true
auth.anonymous:
enabled: true
org_name: Main Org.
org_role: Admin
server:
root_url: "%(protocol)s://%(domain)s:%(http_port)s/grafana"
serve_from_sub_path: true
adminPassword: admin
rbac:
pspEnabled: false
datasources:
datasources.yaml:
apiVersion: 1
datasources:
- name: Prometheus
uid: webstore-metrics
type: prometheus
url: 'http://{{ include "otel-demo.name" . }}-prometheus-server:9090'
editable: true
isDefault: true
jsonData:
exemplarTraceIdDestinations:
- datasourceUid: webstore-traces
name: trace_id
- url: http://localhost:8080/jaeger/ui/trace/$${__value.raw}
name: trace_id
urlDisplayLabel: View in Jaeger UI
- name: Jaeger
uid: webstore-traces
type: jaeger
url: 'http://{{ include "otel-demo.name" . }}-jaeger-query:16686/jaeger/ui'
editable: true
isDefault: false
dashboardProviders:
dashboardproviders.yaml:
apiVersion: 1
providers:
- name: 'default'
orgId: 1
folder: ''
type: file
disableDeletion: false
editable: true
options:
path: /var/lib/grafana/dashboards/default
dashboardsConfigMaps:
default: '{{ include "otel-demo.name" . }}-grafana-dashboards'
resources:
limits:
memory: 75Mi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment