Alfalfa Helm Chart Configuration Values

August 6, 2025 · View on GitHub

This document describes all configurable parameters in the values.yaml file for the Alfalfa Helm chart.

Table of Contents


Ingress Configuration

Controls external access to Alfalfa services through Kubernetes ingress resources.

ParameterDescriptionDefaultRequired
ingress.enabledEnable ingress resourcestrueNo
ingress.classNameIngress class name (assumes nginx-ingress)"nginx"No
ingress.annotationsAdditional annotations for ingress resources{}No
ingress.hosts.web.hostHostname for web interfacealfalfa.example.comYes
ingress.hosts.web.paths[].pathURL path for web service/No
ingress.hosts.web.paths[].pathTypePath matching typePrefixNo
ingress.hosts.grafana.hostHostname for Grafana dashboardgrafana.example.comYes
ingress.hosts.minio.hostHostname for MinIO consoleminio.example.comYes
ingress.hosts.minio.httpsWhether to use HTTPS for MinIO external URLfalseNo
ingress.tls.enabledEnable TLS/SSL for ingressesfalseNo
ingress.tls.secretNameSecret containing TLS certificates""No

Example Usage:

ingress:
  enabled: true
  className: "nginx"
  hosts:
    web:
      host: "alfalfa.mycompany.com"
    grafana:
      host: "grafana.mycompany.com"
    minio:
      host: "minio.mycompany.com"
  tls:
    enabled: true
    secretName: "alfalfa-tls"

Service Configuration

Configure connection details and authentication for both internal and external services. When internal services are enabled (e.g., mongodb.enabled: true), these values configure the internal service. When internal services are disabled, these values configure connections to external services.

MongoDB Configuration

ParameterDescriptionDefaultNotes
config.mongodb.connectionUrlComplete MongoDB connection URL""Overrides other connection settings when set
config.mongodb.hostMongoDB hostname""Auto-generated for internal service, required for external
config.mongodb.portMongoDB port""Auto-generated for internal service, required for external
config.mongodb.databaseDatabase namealfalfaUsed by both internal and external services
config.mongodb.auth.enabledEnable MongoDB authenticationfalseConfigures internal service or external connection
config.mongodb.auth.usernameMongoDB username""Required if auth enabled
config.mongodb.auth.passwordMongoDB password""Required if auth enabled

Redis Configuration

ParameterDescriptionDefaultNotes
config.redis.connectionUrlComplete Redis connection URL""Overrides other connection settings when set
config.redis.hostRedis hostname""Auto-generated for internal service, required for external
config.redis.portRedis port""Auto-generated for internal service, required for external
config.redis.auth.enabledEnable Redis authenticationfalseConfigures internal service or external connection
config.redis.auth.passwordRedis password""Required if auth enabled
config.redis.jobQueueNameName for job queue"Alfalfa Job Queue"Used by both internal and external services

S3/MinIO Configuration

ParameterDescriptionDefaultNotes
config.s3.hostS3/MinIO hostname""Auto-generated for internal MinIO, required for external S3
config.s3.portS3/MinIO port""Auto-generated for internal MinIO, required for external S3
config.s3.bucketS3 bucket name""Auto-generated for internal MinIO, required for external S3
config.s3.regionS3 region""Used by both internal and external services
config.s3.externalUrlExternal URL for browser access""Used for presigned URLs (both internal/external)
config.s3.secureUse SSL/TLS""Connection security setting
config.s3.auth.accessKeyS3 access key"user"Configures internal MinIO or external S3 credentials
config.s3.auth.secretKeyS3 secret key"changeme-minio-password"Security sensitive - should be changed

InfluxDB Configuration

ParameterDescriptionDefaultNotes
config.influxdb.hostInfluxDB hostname""Auto-generated for internal service, required for external
config.influxdb.portInfluxDB port""Auto-generated for internal service, required for external
config.influxdb.auth.usernameInfluxDB username""Configures internal service or external connection
config.influxdb.auth.passwordInfluxDB password""Configures internal service or external connection
config.influxdb.databaseInfluxDB database name"alfalfa"Used by both internal and external services

Grafana Configuration

ParameterDescriptionDefaultNotes
config.grafana.auth.usernameGrafana admin usernameadminConfigures internal Grafana admin user
config.grafana.auth.passwordGrafana admin password"changeme-grafana-password"Security sensitive - should be changed

MongoDB Configuration

Controls the included MongoDB instance (when mongodb.enabled: true).

ParameterDescriptionDefaultNotes
mongodb.enabledDeploy MongoDB instancetrueNo
mongodb.container.nameContainer name"mongodb"No
mongodb.container.imageMongoDB Docker image"mongo:7-jammy"No
mongodb.container.ports.mongodbMongoDB port27017No
mongodb.container.resourcesKubernetes ResourceRequirementsSee belowNo
mongodb.service.ports.mongodbService port27017No
mongodb.persistence.enabledEnable persistent storagetrueNo
mongodb.persistence.sizeStorage size10GiNo
mongodb.persistence.storageClassStorage class""No
mongodb.persistence.accessModesAccess modes["ReadWriteOnce"]No

Example Usage:

mongodb:
  enabled: true
  container:
    resources:
      requests:
        cpu: 0.5
        memory: "1Gi"
      limits:
        cpu: 1.0
        memory: "2Gi"
  persistence:
    size: 50Gi
    storageClass: "fast-ssd"

Default Resources:

resources:
  requests:
    cpu: 0.25
    memory: "512Mi"

InfluxDB Configuration

Controls the included InfluxDB instance (when influxdb.enabled: true).

ParameterDescriptionDefaultNotes
influxdb.enabledDeploy InfluxDB instancetrueNo
influxdb.container.nameContainer name"influxdb"No
influxdb.container.imageInfluxDB Docker image"influxdb:1.8"No
influxdb.container.ports.influxdbInfluxDB port8086No
influxdb.container.resourcesKubernetes ResourceRequirementsSee belowNo
influxdb.service.ports.influxdbService port8086No
influxdb.persistence.enabledEnable persistent storagetrueNo
influxdb.persistence.sizeStorage size10GiNo
influxdb.persistence.storageClassStorage class""No
influxdb.persistence.accessModesAccess modes["ReadWriteOnce"]No

Default Resources:

resources:
  requests:
    cpu: 0.1
    memory: "256Mi"

Redis Configuration

Controls the included Redis instance (when redis.enabled: true).

ParameterDescriptionDefaultNotes
redis.enabledDeploy Redis instancetrueNo
redis.container.nameContainer name"redis"No
redis.container.imageRedis Docker image"redis:7-alpine"No
redis.container.ports.redisRedis port6379No
redis.container.resourcesKubernetes ResourceRequirementsSee belowNo
redis.service.ports.redisService port6379No
redis.persistence.enabledEnable persistent storagetrueNo
redis.persistence.sizeStorage size8GiNo
redis.persistence.storageClassStorage class""No
redis.persistence.accessModesAccess modes["ReadWriteOnce"]No

Default Resources:

resources:
  requests:
    cpu: 0.5
    memory: "256Mi"

MinIO Configuration

Controls the included MinIO S3-compatible storage (when minio.enabled: true).

ParameterDescriptionDefaultNotes
minio.enabledDeploy MinIO instancetrueNo
minio.container.nameContainer name"minio"No
minio.container.imageMinIO Docker image"minio/minio:RELEASE.2024-04-18T19-09-19Z"No
minio.container.ports.apiMinIO API port9000No
minio.container.ports.consoleMinIO console port9001No
minio.container.resourcesKubernetes ResourceRequirementsSee belowNo
minio.service.ports.apiAPI service port9000No
minio.service.ports.consoleConsole service port9001No
minio.defaultBucketsDefault bucket to create"alfalfa"No
minio.persistence.enabledEnable persistent storagetrueNo
minio.persistence.sizeStorage size10GiNo
minio.persistence.storageClassStorage class""No
minio.persistence.accessModesAccess modes["ReadWriteOnce"]No
minio.mc.imageMinIO client image for setup"minio/mc:RELEASE.2024-04-18T16-45-29Z"No

Example Usage:

minio:
  enabled: true
  defaultBuckets: "alfalfa,backups"
  container:
    resources:
      requests:
        cpu: 0.5
        memory: "1Gi"
      limits:
        cpu: 1.0
        memory: "2Gi"
  persistence:
    size: 100Gi
    storageClass: "standard"

Default Resources:

resources:
  requests:
    cpu: 0.25
    memory: "512Mi"

Grafana Configuration

Controls the included Grafana dashboard (when grafana.enabled: true).

ParameterDescriptionDefaultNotes
grafana.enabledDeploy Grafana instancetrueNo
grafana.container.imageGrafana Docker image"ghcr.io/nrel/alfalfa/grafana:migrate_pyenergyplus"No
grafana.container.ports.httpGrafana HTTP port3000No
grafana.container.resourcesKubernetes ResourceRequirementsSee belowNo
grafana.service.ports.httpService port80No
grafana.ingress.enabledEnable ingress for GrafanatrueNo
grafana.ingress.hostGrafana ingress hostnamegrafana.example.comNo

Default Resources:

resources:
  requests:
    cpu: 0.1
    memory: "128Mi"

Web Service Configuration

Controls the Alfalfa web frontend service.

ParameterDescriptionDefaultNotes
web.container.imageWeb service Docker image"ghcr.io/nrel/alfalfa/web:kubernetes_fixes"No
web.container.ports.httpWeb service HTTP port80No
web.container.resourcesKubernetes ResourceRequirementsSee belowNo
web.container.env.NODE_ENVNode.js environment"PRODUCTION"No

Default Resources:

resources:
  requests:
    cpu: 0.5
    memory: "256Mi"

Example Usage:

web:
  container:
    image: "ghcr.io/nrel/alfalfa/web:v1.2.3"
    env:
      NODE_ENV: "production"
    resources:
      requests:
        cpu: 1.0
        memory: "512Mi"
      limits:
        cpu: 2.0
        memory: "1Gi"

Worker Configuration

Controls the Alfalfa worker processes that run simulations.

ParameterDescriptionDefaultNotes
worker.replicasNumber of worker replicas5No
worker.container.imageWorker Docker image"ghcr.io/nrel/alfalfa/worker:kubernetes_fixes"No
worker.container.resourcesKubernetes ResourceRequirementsSee belowNo
worker.container.env.LOGLEVELWorker logging levelINFOOptions: DEBUG, INFO, WARN, ERROR

Default Resources:

resources:
  requests:
    cpu: 0.5
    memory: "1Gi"

Example Usage:

worker:
  replicas: 10
  container:
    image: "ghcr.io/nrel/alfalfa/worker:v1.2.3"
    env:
      LOGLEVEL: DEBUG
    resources:
      requests:
        cpu: 1.0
        memory: "2Gi"
      limits:
        cpu: 2.0
        memory: "4Gi"

Historian Configuration

Controls the historian service for data collection. This requires Grafana and Influxdb

ParameterDescriptionDefaultNotes
historian.enabledEnable historian servicetrueNo

Common Configuration Patterns

Scaling for Production

worker:
  replicas: 20  # More workers for parallel processing

mongodb:
  container:
    resources:
      requests:
        cpu: 1.0
        memory: "2Gi"
  persistence:
    size: 100Gi
    storageClass: "fast-ssd"

minio:
  persistence:
    size: 500Gi
    storageClass: "standard"

External Services Configuration

# Disable all internal services
mongodb:
  enabled: false
redis:
  enabled: false
minio:
  enabled: false
influxdb:
  enabled: false

# Configure external connections
config:
  mongodb:
    connectionUrl: "mongodb://mongo.company.com:27017/alfalfa"
  redis:
    connectionUrl: "redis://redis.company.com:6379"
  s3:
    host: "s3.amazonaws.com"
    bucket: "company-alfalfa-bucket"
    region: "us-west-2"
    secure: true
    auth:
      accessKey: "AKIAIOSFODNN7EXAMPLE"
      secretKey: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"

Internal Services with Custom Configuration

# Use internal services with custom passwords and settings
mongodb:
  enabled: true
redis:
  enabled: true
minio:
  enabled: true

config:
  mongodb:
    database: "alfalfa-prod"
    auth:
      enabled: true
      username: "alfalfa-user"
      password: "secure-mongo-password"
  redis:
    auth:
      enabled: true
      password: "secure-redis-password"
  s3:
    bucket: "alfalfa-production"
    region: "us-west-2"
    auth:
      accessKey: "alfalfa-minio-user"
      secretKey: "secure-minio-password"
  grafana:
    auth:
      username: "admin"
      password: "secure-grafana-password"

Development Configuration

worker:
  replicas: 2
  container:
    resources:
      requests:
        cpu: 0.1
        memory: "512Mi"

# Smaller storage for development
mongodb:
  persistence:
    size: 5Gi
minio:
  persistence:
    size: 10Gi
redis:
  persistence:
    size: 1Gi
influxdb:
  persistence:
    size: 5Gi

Security Considerations

Sensitive Values

The following values contain sensitive information and should be overridden:

  • config.s3.auth.secretKey
  • config.grafana.auth.password
  • config.mongodb.auth.password (if authentication enabled)
  • config.redis.auth.password (if authentication enabled)

Use Helm secrets or external secret management:

helm install alfalfa ./alfalfa-chart \
  --set config.s3.auth.secretKey="$(kubectl get secret s3-creds -o jsonpath='{.data.secretKey}' | base64 -d)" \
  --set config.grafana.auth.password="$(kubectl get secret grafana-creds -o jsonpath='{.data.password}' | base64 -d)"

Or use a separate values file with restricted access:

helm install alfalfa ./alfalfa-chart -f values.yaml -f secrets.yaml

Resource Configuration Reference

All container resource configurations follow the Kubernetes Pod v1 resources specification. This includes:

  • requests: Minimum guaranteed resources (used for scheduling)
  • limits: Maximum allowed resources (enforced at runtime)

Example ResourceRequirements:

resources:
  requests:
    cpu: "500m"        # 0.5 CPU cores
    memory: "1Gi"      # 1 GiB of memory
  limits:
    cpu: "2"           # 2 CPU cores maximum
    memory: "4Gi"      # 4 GiB memory maximum

CPU Formats:

  • "1" or 1000m = 1 CPU core
  • "500m" = 0.5 CPU cores
  • "100m" = 0.1 CPU cores

Memory Formats:

  • "1Gi" = 1 GiB (1024³ bytes)
  • "1G" = 1 GB (1000³ bytes)
  • "512Mi" = 512 MiB