Crater

Configuration Guide

Detailed explanation of Crater platform Helm Chart configuration parameters, covering core modules such as backend, frontend, storage, monitoring, and authentication.

Type: applicationv1.1.1

Crater is a comprehensive AI development platform designed for Kubernetes, providing GPU resource management, containerized development environments, and workflow orchestration. This document details all configurable items when deploying Crater via Helm.

Project Homepage: https://github.com/raids-lab/crater

Maintainers

NameEmailUrl
RAIDS Labhttps://github.com/raids-lab

Source Code

Global Values

ParameterTypeDefaultDescription
hoststring"crater.example.com"Domain name or IP address for platform access
protocolstring"http"Protocol type (http or https)
firstUser.usernamestring"crater-admin"Initial administrator username
firstUser.passwordstring"Masked@Password"Initial administrator password (Please change this)
imagePullPolicystring"Always"Container image pull policy
namespaces.createbooltrueWhether to automatically create namespaces
namespaces.jobstring"crater-workspace"Namespace for running job tasks
namespaces.imagestring"crater-images"Namespace for building images
storage.createbooltrueWhether to automatically create base persistent volume claim (PVC)
storage.requeststring"10Gi"Storage request capacity
storage.storageClassstring"nfs"Storage class name (must support ReadWriteMany)
storage.pvcNamestring"crater-rw-storage"Name of the shared PVC

Monitoring (Monitoring)

ParameterTypeDefaultDescription
prometheus.enablebooltrueWhether to enable integrated Prometheus monitoring
prometheus.addressstring"http://..."Internal Prometheus service address in cluster
grafana.enablebooltrueWhether to enable integrated Grafana dashboards
grafana.addressstring"http://..."Internal Grafana service address in cluster
monitoring.timezonestring"Asia/Shanghai"Timezone for monitoring dashboard display

Backend Service Configuration (backendConfig)

Base Service Items

ParameterTypeDefaultDescription
backendConfig.portstring":8088"Backend API service listening port
backendConfig.enableLeaderElectionboolfalseWhether to enable Leader election (for HA deployment)
backendConfig.modelDownload.imagestring"ghcr.io/raids-lab/crater-model-downloader:v1.0.0"Container image used for model and dataset download jobs
backendConfig.modelDownload.huggingFaceEndpointstring"https://huggingface.co"Hugging Face Hub URL used by download jobs; it may be replaced with an administrator-approved mirror
backendConfig.modelDownload.modelScopeEndpointstring"https://modelscope.cn"ModelScope URL used by download jobs
backendConfig.modelMetadata.huggingFaceEndpointslist["https://huggingface.co"]Hugging Face-compatible endpoints tried in order during metadata refresh
backendConfig.modelMetadata.modelScopeEndpointslist["https://modelscope.cn"]ModelScope-compatible endpoints tried in order during metadata refresh
backendConfig.modelMetadata.logoAllowedHostslist["huggingface.co", "cdn-avatars.huggingface.co", "resouces.modelscope.cn", "resources.modelscope.cn"]Exact HTTPS host allowlist for fetching and caching logos; every redirect hop is checked
backendConfig.modelMetadata.logicalPublicPrefixstring"public"Logical path prefix used before download records are mapped to public storage
backendConfig.modelMetadata.timeoutSecondsint20Timeout in seconds for each source metadata request
backendConfig.modelMetadata.maxLogoBytesint524288Maximum number of bytes cached for one source logo
backendConfig.prometheusAPIstring"http://..."Prometheus API address for monitoring metrics
backendConfig.auth.token.accessTokenSecretstring"..."JWT Access Token signing secret
backendConfig.auth.token.refreshTokenSecretstring"..."JWT Refresh Token signing secret

Database Connection (backendConfig.postgres)

ParameterTypeDefaultDescription
backendConfig.postgres.hoststring"..."Database server address
backendConfig.postgres.portint5432Database port
backendConfig.postgres.dbnamestring"postgres"Database name
backendConfig.postgres.userstring"postgres"Database username
backendConfig.postgres.passwordstring"..."Database password
backendConfig.postgres.sslmodestring"disable"SSL mode configuration
backendConfig.postgres.TimeZonestring"Asia/Shanghai"Timezone used for database connection

Storage Path Binding (backendConfig.storage)

ParameterTypeDefaultDescription
backendConfig.storage.pvc.readWriteManystring"..."Bound shared storage PVC name
backendConfig.storage.pvc.readOnlyManystringnullOptional read-only storage PVC name (for datasets and models)
backendConfig.storage.prefix.userstring"users"Storage path prefix for user personal space
backendConfig.storage.prefix.accountstring"accounts"Storage path prefix for queue/account public space
backendConfig.storage.prefix.publicstring"public"Storage path prefix for global public datasets

Base Resources and Secrets (backendConfig.secrets)

ParameterTypeDefaultDescription
backendConfig.secrets.tlsSecretNamestring"crater-tls-secret"Name of the TLS certificate Secret for HTTPS
backendConfig.secrets.tlsForwardSecretNamestring"crater-tls-forward-secret"Name of the TLS certificate Secret for forwarding
backendConfig.secrets.imagePullSecretNamestring""Name of the Secret for pulling private images

Authentication Configuration (backendConfig.auth)

ParameterTypeDefaultDescription
backendConfig.auth.ldap.enableboolfalseWhether to enable LDAP unified identity authentication
backendConfig.auth.ldap.aliasstring""Display name (alias) for LDAP login, recommended to be short (e.g., "ACT")
backendConfig.auth.ldap.helpstring""Help description shown when hovering over the LDAP login method
backendConfig.auth.ldap.server.addressstring"..."LDAP server address
backendConfig.auth.ldap.server.baseDNstring"..."Base DN for user search
backendConfig.auth.ldap.attributeMapping.usernamestring"uid"LDAP attribute name for username
backendConfig.auth.ldap.attributeMapping.displayNamestring"cn"LDAP attribute name for display name
backendConfig.auth.ldap.uid.sourcestring"default"UID/GID acquisition strategy: options default, ldap, rid, external (deprecated)
backendConfig.auth.ldap.uid.rid.offsetint10000UID/GID calculation offset when source is rid (UID/GID = RID + offset)
backendConfig.auth.ldap.uid.rid.sidAttributestring"objectSid"LDAP attribute storing the user's binary SID when source is rid (used to compute UID)
backendConfig.auth.ldap.uid.rid.pgidAttributestring"primaryGroupID"LDAP attribute storing the primary group RID when source is rid (used to compute GID)
backendConfig.auth.ldap.uid.ldapAttribute.uidstring""UID attribute name when source is ldap
backendConfig.auth.ldap.uid.ldapAttribute.gidstring""GID attribute name when source is ldap
backendConfig.auth.normal.allowRegisterbooltrueWhether to allow direct registration on the platform
backendConfig.auth.normal.allowLoginbooltrueWhether to allow login with local database accounts

Image Registry Integration (backendConfig.registry)

ParameterTypeDefaultDescription
backendConfig.registry.enableboolfalseWhether to enable image registry (Harbor) integration
backendConfig.registry.harbor.serverstring"..."Harbor service access address
backendConfig.registry.harbor.userstring"admin"Harbor admin account
backendConfig.registry.harbor.passwordstring"..."Harbor admin password
backendConfig.registry.buildTools.proxyConfig.httpProxystringnullHTTP proxy for image building
backendConfig.registry.buildTools.proxyConfig.httpsProxystringnullHTTPS proxy for image building
backendConfig.registry.buildTools.proxyConfig.noProxystringnullList of domains that should not be proxied (comma-separated)

Email Service Configuration (backendConfig.smtp)

ParameterTypeDefaultDescription
backendConfig.smtp.enableboolfalseWhether to enable email notification functionality
backendConfig.smtp.hoststring"mail.example.com"SMTP server address
backendConfig.smtp.portint25SMTP server port
backendConfig.smtp.userstring"example"SMTP authentication username
backendConfig.smtp.passwordstring"..."SMTP authentication password
backendConfig.smtp.notifystring"example@example.com"Email address of the system notification sender

Image Building Pipeline (buildkitConfig)

ParameterTypeDefaultDescription
buildkitConfig.amdConfig.enabledboolfalseWhether to enable AMD64 image build nodes
buildkitConfig.amdConfig.replicasint3Number of build node replicas
buildkitConfig.amdConfig.cache.storageSizestring"400Gi"Build node cache volume size
buildkitConfig.generalConfig.resources.limits.cpuint16Maximum CPU limit for build nodes
buildkitConfig.generalConfig.resources.limits.memorystring"48Gi"Maximum memory limit for build nodes

Automatic Task Strategy (cronjobConfig)

ParameterTypeDefaultDescription
cronjobConfig.jobs.lowGPUUtil.TIME_RANGEstring"90"Time range for low utilization detection (minutes)
cronjobConfig.jobs.lowGPUUtil.UTILstring"0"Utilization threshold for triggering alerts
cronjobConfig.jobs.longTime.BATCH_DAYSstring"4"Maximum runtime days for batch jobs
cronjobConfig.jobs.waitingJupyter.JUPYTER_WAIT_MINUTESstring"5"Cleanup threshold for Jupyter jobs in Waiting state

Model and Dataset Metadata Jobs

ParameterTypeDefaultDescription
modelMetadataRefresh.enabledbooltrueCreate the periodic metadata refresh job; its first run automatically processes existing Ready downloads
modelMetadataRefresh.applybooltrueWrite source metadata and cached logos to the database
modelMetadataRefresh.schedulestring"15 */6 * * *"Cron schedule for metadata refresh
modelMetadataRefresh.batchSizeint100Number of Ready download records processed per database batch
modelMetadataRefresh.staleAfterstring"168h"On later runs, refresh only records older than this duration
modelMetadataRefresh.delaystring"100ms"Delay between source requests
modelDatasetGovernance.enabledboolfalseCreate the public model and dataset storage governance job; full scans remain disabled by default
modelDatasetGovernance.applyboolfalseWrite governance results; keep this disabled while reviewing the first scan logs
modelDatasetGovernance.schedulestring"30 2 * * 0"Cron schedule for storage governance
modelDatasetGovernance.modelsSubdirectorieslist[]Optional model subdirectories, such as ["Models", "LLM"]; a non-empty list overrides the single-directory setting

Initial Logo Backfill for Existing Models

Chart 1.1.0 enables metadata refresh and database writes by default. The first run selects existing model and dataset download records whose status is Ready and which have no refresh timestamp, then backfills logos, READMEs, source statistics, and other metadata. Successful records receive a refresh timestamp, so later runs only refresh records older than staleAfter instead of scanning everything every six hours.

To backfill immediately after the configuration takes effect, without waiting for the next Cron schedule, create a one-time Job from the CronJob:

kubectl create job --from=cronjob/model-metadata-refresh \
  model-metadata-refresh-initial -n crater
kubectl logs -n crater -f job/model-metadata-refresh-initial

Use a different Job name if that name already exists. To validate network access and metadata first, temporarily set modelMetadataRefresh.apply to false before triggering the job; dry-run mode only prints results and does not update the database.

Logos are fetched only from exact HTTPS hosts listed in backendConfig.modelMetadata.logoAllowedHosts, and every redirect hop is validated again. Add the exact host explicitly when using a mirror or another trusted CDN:

backendConfig:
  modelMetadata:
    logoAllowedHosts:
      - huggingface.co
      - cdn-avatars.huggingface.co
      - resouces.modelscope.cn
      - resources.modelscope.cn
      - your-trusted-logo-cdn.example.com

The refresh job only processes existing Ready download records. Incomplete or failed downloads are not treated as existing resources for this backfill.

Database Backup (dbBackup)

ParameterTypeDefaultDescription
dbBackup.enabledbooltrueWhether to enable automatic database backup
dbBackup.schedulestring"0 2 * * *"Backup Cron expression
dbBackup.config.retentionCountint7Retention count/days for backup files

Monitoring Presentation (frontendConfig / grafanaProxy)

ParameterTypeDefaultDescription
frontendConfig.versionstring"1.0.0"Frontend application version
grafanaProxy.enableboolfalseWhether to enable Grafana password-less proxy (for Iframe embedding)
grafanaProxy.addressstring"..."Grafana service address in cluster
grafanaProxy.tokenstring"..."Grafana API Token with read-only permissions

TLS Certificate Configuration (tls)

ParameterTypeDefaultDescription
tls.base.createboolfalseWhether Helm creates the base certificate Secret
tls.base.certstring""Base certificate content (Base64)
tls.forward.createboolfalseWhether Helm creates the forward certificate Secret
tls.forward.certstring""Forward certificate content (Base64)

Component Image Versions (images)

ParameterTypeDefaultDescription
images.backend.repositorystring"..."Backend service image repository
images.frontend.repositorystring"..."Frontend service image repository
images.storage.repositorystring"..."Storage management service image repository
images.buildkit.tagstring"v0.23.1"Buildkit core image tag
Edit on GitHub