# Example values for Label Studio Helm Chart # Copy this file to my-values.yaml and customize as needed # Global configuration global: image: repository: heartexlabs/label-studio pullPolicy: IfNotPresent tag: "latest" # Use specific version in production # PostgreSQL Database Configuration pgConfig: host: "postgresql.default.svc.cluster.local" port: 5432 dbName: "labelstudio" userName: "labelstudio" password: secretName: "postgresql-secret" secretKey: "password" # Redis Configuration redisConfig: host: "redis://redis.default.svc.cluster.local:6379/1" password: secretName: "redis-secret" secretKey: "password" # Extra Environment Variables extraEnvironmentVars: PYTHONUNBUFFERED: "1" DEBUG: "false" LOG_LEVEL: "INFO" # Persistence Configuration persistence: enabled: true type: volume config: volume: storageClass: "gp2" # Change to your storage class size: 50Gi accessModes: - ReadWriteOnce # Deployment Configuration replicaCount: 2 # Service Configuration service: type: ClusterIP port: 8080 targetPort: 8080 # Ingress Configuration ingress: enabled: true className: "nginx" annotations: nginx.ingress.kubernetes.io/proxy-body-size: "200m" nginx.ingress.kubernetes.io/proxy-read-timeout: "300" nginx.ingress.kubernetes.io/proxy-send-timeout: "300" cert-manager.io/cluster-issuer: "letsencrypt-prod" hosts: - host: label-studio.yourdomain.com paths: - path: / pathType: ImplementationSpecific tls: - secretName: label-studio-tls hosts: - label-studio.yourdomain.com # Resource Configuration resources: limits: cpu: 2000m memory: 4Gi requests: cpu: 1000m memory: 2Gi # Health Checks livenessProbe: httpGet: path: /health port: http initialDelaySeconds: 120 periodSeconds: 30 timeoutSeconds: 10 failureThreshold: 3 readinessProbe: httpGet: path: /health port: http initialDelaySeconds: 60 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 # Autoscaling autoscaling: enabled: true minReplicas: 2 maxReplicas: 10 targetCPUUtilizationPercentage: 70 targetMemoryUtilizationPercentage: 80 # Environment Variables env: # Database settings (will be overridden by global.pgConfig if set) DJANGO_DB: "default" POSTGRE_NAME: "labelstudio" POSTGRE_USER: "labelstudio" POSTGRE_PORT: "5432" POSTGRE_HOST: "postgresql.default.svc.cluster.local" # Redis settings (will be overridden by global.redisConfig if set) REDIS_LOCATION: "redis://redis.default.svc.cluster.local:6379/1" # Label Studio specific settings LABEL_STUDIO_HOST: "https://label-studio.yourdomain.com" LABEL_STUDIO_USERNAME: "admin@yourdomain.com" LABEL_STUDIO_PASSWORD: "change-this-password" # Storage settings ENABLE_LOCAL_FILES_ACCESS: "true" LOCAL_FILES_SERVING_ENABLED: "true" # Security settings SSRF_PROTECTION_ENABLED: "true" # Feature flags FEATURE_FLAGS_DEFAULT_VALUE: "false" # Node Selection nodeSelector: {} # kubernetes.io/arch: amd64 # Tolerations tolerations: [] # - key: "key1" # operator: "Equal" # value: "value1" # effect: "NoSchedule" # Affinity affinity: {} # podAntiAffinity: # preferredDuringSchedulingIgnoredDuringExecution: # - weight: 100 # podAffinityTerm: # labelSelector: # matchExpressions: # - key: app.kubernetes.io/name # operator: In # values: # - label-studio # topologyKey: kubernetes.io/hostname # Additional volumes volumes: [] # - name: custom-config # configMap: # name: label-studio-config # Additional volume mounts volumeMounts: [] # - name: custom-config # mountPath: /app/config # readOnly: true # Service Account serviceAccount: create: true automount: true annotations: {} name: "" # Pod Security Context podSecurityContext: fsGroup: 1001 # Security Context securityContext: runAsNonRoot: true runAsUser: 1001 capabilities: drop: - ALL readOnlyRootFilesystem: false # ConfigMap for additional configuration configMap: create: true data: # Add any additional configuration files here # custom.conf: | # # Custom configuration # Secrets for sensitive data secrets: create: true data: # Add any additional secrets here # api-key: "your-api-key"