Skip to content

Cassandra Storage Examples

Cassandra is the recommended storage backend for high-volume production deployments.

Simple Cassandra Setup

Basic single-node configuration for development or testing.

cassandra-simple-values.yaml
# Default values for jaeger.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
jaeger:
  storage:
    type: cassandra

cassandraSchemaJob:
  host: cassandra.cassandra.svc
  keyspace: jaeger
  password: admin
  username: admin
  datacenter: dc1

  # This parameter responsible for with either with SimpleStrategy (without replication)
  # or with NetworkReplicationStrategy (with replication):
  # * prod - will use NetworkReplicationStrategy
  # * test - will use SimpleStrategy
  mode: prod

collector:
  install: true

query:
  install: true
  ingress:
    install: true
    host: query.<cloud_dns_name>

# This section is optional and allow to deploy a test service to generate some traces
# Useful if you want to verify how Jaeger receive, store and show traces
hotrod:
  install: true
  ingress:
    install: true
    host: hotrod.<cloud_dns_name>

Key parameters: - cassandraSchemaJob.mode: prod - Uses NetworkReplicationStrategy for production - cassandraSchemaJob.host - Cassandra service endpoint - hotrod.install: true - Deploys test trace generator

Cassandra Cluster Setup

Production-ready cluster configuration with replication.

cassandra-cluster-values.yaml
# Default values for jaeger.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
jaeger:
  storage:
    type: cassandra

cassandraSchemaJob:
  host: cassandra.cassandra.svc
  keyspace: jaeger
  password: admin
  username: admin
  datacenter: dc1

  # This parameter responsible for with either with SimpleStrategy (without replication)
  # or with NetworkReplicationStrategy (with replication):
  # * prod - will use NetworkReplicationStrategy
  # * test - will use SimpleStrategy
  mode: prod

collector:
  install: true

query:
  install: true
  ingress:
    install: true
    host: query.<cloud_dns_name>

# This section is optional and allow to deploy a test service to generate some traces
# Useful if you want to verify how Jaeger receive, store and show traces
hotrod:
  install: true
  ingress:
    install: true
    host: hotrod.<cloud_dns_name>

Key parameters: - replicationFactor: 3 - Data replicated across 3 nodes - collector.replicas: 3 - Multiple collector instances - Resource limits for production workloads

Cassandra with TLS

Secure connection to Cassandra cluster.

cassandra-tls-with-certificates-values.yaml
# Default values for jaeger.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
jaeger:
  storage:
    type: cassandra

cassandraSchemaJob:
  host: cassandra.cassandra.svc
  keyspace: jaeger
  password: admin
  username: admin
  datacenter: dc1

  # This parameter responsible for with either with SimpleStrategy (without replication)
  # or with NetworkReplicationStrategy (with replication):
  # * prod - will use NetworkReplicationStrategy
  # * test - will use SimpleStrategy
  mode: prod

  tls:
    enabled: true

    commonName: test123
    ca: |
      -----BEGIN CERTIFICATE-----
      ...
      -----END CERTIFICATE-----
    key: |
      -----BEGIN CERTIFICATE-----
      ...
      -----END CERTIFICATE-----
    cert: |
      -----BEGIN RSA PRIVATE KEY-----
      ...
      -----END RSA PRIVATE KEY-----

collector:
  install: true

query:
  install: true
  ingress:
    install: true
    host: query.<cloud_dns_name>

# This section is optional and allow to deploy a test service to generate some traces
# Useful if you want to verify how Jaeger receive, store and show traces
hotrod:
  install: true
  ingress:
    install: true
    host: hotrod.<cloud_dns_name>

Key parameters: - tls.enabled: true - Enables TLS encryption - tls.secretName - Kubernetes secret with certificates - tls.serverName - Certificate validation hostname

Cassandra with TLS (Predefined Secret)

TLS configuration using existing Kubernetes secret.

cassandra-tls-with-predefined-secret-values.yaml
# Default values for jaeger.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
jaeger:
  storage:
    type: cassandra

cassandraSchemaJob:
  host: cassandra.cassandra.svc
  keyspace: jaeger
  password: admin
  username: admin
  datacenter: dc1

  # This parameter responsible for with either with SimpleStrategy (without replication)
  # or with NetworkReplicationStrategy (with replication):
  # * prod - will use NetworkReplicationStrategy
  # * test - will use SimpleStrategy
  mode: prod

  tls:
    enabled: true
    existingSecret: test-cassandra-secret

collector:
  install: true

query:
  install: true
  ingress:
    install: true
    host: query.<cloud_dns_name>

# This section is optional and allow to deploy a test service to generate some traces
# Useful if you want to verify how Jaeger receive, store and show traces
hotrod:
  install: true
  ingress:
    install: true
    host: hotrod.<cloud_dns_name>

Key parameters: - tls.enabled: true - Enables TLS encryption - tls.existingSecret - References existing Kubernetes secret - mode: prod - Production replication strategy - Assumes TLS secret already exists in cluster

Custom TTL Configuration

Configure data retention periods.

cassandra-custom-ttl-values.yaml
# Default values for jaeger.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
jaeger:
  storage:
    type: cassandra

cassandraSchemaJob:
  host: cassandra.cassandra.svc
  keyspace: jaeger
  password: admin
  username: admin
  datacenter: dc1

  # This parameter responsible for with either with SimpleStrategy (without replication)
  # or with NetworkReplicationStrategy (with replication):
  # * prod - will use NetworkReplicationStrategy
  # * test - will use SimpleStrategy
  mode: prod

  # This block allow to specify custom settings for Cassandra TTL
  # By default all traces store only 2 days, and all dependencies stored forever
  ttl:
    # two weeks in seconds
    trace: 1209600
    # let's store dependencies forever
    dependencies: 0

collector:
  install: true

query:
  install: true
  ingress:
    install: true
    host: query.<cloud_dns_name>

# This section is optional and allow to deploy a test service to generate some traces
# Useful if you want to verify how Jaeger receive, store and show traces
hotrod:
  install: true
  ingress:
    install: true
    host: hotrod.<cloud_dns_name>

Key parameters: - traceTTL: 172800 - Traces retained for 2 days - dependenciesTTL: 86400 - Dependencies retained for 1 day - TTL values in seconds

Custom Security Context

Configure security context for Cassandra pods.

cassandra-custom-security-context.yaml
# Default values for jaeger.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
jaeger:
  storage:
    type: cassandra

cassandraSchemaJob:
  host: cassandra.cassandra.svc
  keyspace: jaeger
  password: admin
  username: admin
  datacenter: dc1

  # This parameter responsible for with either with SimpleStrategy (without replication)
  # or with NetworkReplicationStrategy (with replication):
  # * prod - will use NetworkReplicationStrategy
  # * test - will use SimpleStrategy
  mode: prod

collector:
  install: true
  securityContext:
    runAsUser: 2000
    fsGroup: 2000
    runAsNonRoot: true
    seccompProfile:
      type: RuntimeDefault
  containerSecurityContext:
    allowPrivilegeEscalation: false
    capabilities:
      drop:
      - ALL

query:
  install: true
  securityContext:
    runAsUser: 2000
    fsGroup: 2000
    runAsNonRoot: true
    seccompProfile:
      type: RuntimeDefault
  containerSecurityContext:
    allowPrivilegeEscalation: false
    capabilities:
      drop:
      - ALL
  ingress:
    install: true
    host: query.<cloud_dns_name>

# This section is optional and allow to deploy a test service to generate some traces
# Useful if you want to verify how Jaeger receive, store and show traces
hotrod:
  install: true
  securityContext:
    runAsUser: 2000
    fsGroup: 2000
    runAsNonRoot: true
    seccompProfile:
      type: RuntimeDefault
  containerSecurityContext:
    allowPrivilegeEscalation: false
    capabilities:
      drop:
      - ALL
  ingress:
    install: true
    host: hotrod.<cloud_dns_name>

Key parameters: - securityContext - Pod security settings - runAsUser - User ID for container execution - fsGroup - File system group ownership

Custom Authenticators

Configure custom authentication methods for Cassandra.

cassandra-custom-allowed-authenticators.yaml
# Default values for jaeger.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

cassandraSchemaJob:
  host: cassandra.cassandra.svc
  port: 9043
  username: admin
  password: admin
  mode: prod
  keyspace: jaeger
  datacenter: dc1

  # This section allow to override list of default allowed authenticators during deploy
  allowedAuthenticators:
  - org.apache.cassandra.auth.PasswordAuthenticator
  - com.instaclustr.cassandra.auth.SharedSecretAuthenticator
  - com.datastax.bdp.cassandra.auth.DseAuthenticator

Key parameters: - authenticator - Authentication mechanism - authorizer - Authorization mechanism - Custom authentication configuration

Usage

  1. Download the desired configuration file
  2. Update <cloud_dns_name> with your domain
  3. Update Cassandra credentials
  4. Deploy with Helm:
helm install jaeger qubership-jaeger/qubership-jaeger -f values.yaml