Label Studio is an open source data labeling tool. It lets you label data types like audio, text, images, videos, and time series with a simple and straightforward UI and export to various model formats. It can be used to prepare raw data or improve existing training data to get more accurate ML models.
This chart bootstraps a Label Studio deployment on a Kubernetes cluster using the Helm package manager.
This chart has been tested to work with:
- NGINX Ingress
- cert-manager
helm repo add heartex https://charts.heartex.com/
helm repo update
helm install labelstudio heartex/label-studio- Prerequisites
- Install
- Uninstall
- FAQs
- Label Studio Enterprise
- Deployment Options
- Configuration
- Label Studio Enterprise Parameters
- Changelog
- Seeking help
- Kubernetes 1.17+
- PV provisioner support in the underlying infrastructure if persistence is needed for Label Studio datastore
To install Label Studio:
helm repo add heartex https://charts.heartex.com/
helm repo update
helm install labelstudio heartex/label-studioTo uninstall/delete a Helm release labelstudio:
helm delete labelstudioThe command removes all the Kubernetes components including data associated with the chart and deletes the release.
Please read the FAQs document.
If using Label Studio Enterprise, several additional steps are necessary before installing the chart:
- Set
enterprise.enabledtotrueinvalues.yamlfile. - Set
global.image.repositorytoheartexlabs/label-studio-enterpriseto use a Label Studio Enterprise docker image. - Set
global.image.tagto a corresponding version. - Satisfy the two prerequisites below for Enterprise License and Enterprise Docker Registry.
Once you have these set, it is possible to install Label Studio Enterprise.
Please read through [Label Studio Enterprise considerations](#Label Studio-enterprise-parameters) to understand all settings that are enterprise specific.
Label Studio is a highly configurable piece of software that can be deployed in a number of different ways, depending on your use-case.
All combinations of various runtimes, databases and configuration methods are supported by this Helm chart. The recommended approach is to use the Ingress Controller based configuration along-with DB-less mode.
Following sections detail on various high-level architecture options available:
Label Studio can run with an external database. By default, this chart installs Label Studio with PostgreSQL packaged by Bitnami.
You can override the database using global.pgConfig section. For more details, please read the Global parameters section.
The chart spawn a Postgres instance using Bitnami's Postgres
chart
as a sub-chart. Set postgresql.enabled=false to disable the sub-chart.
The Postgres sub-chart is best used to quickly provision temporary environments without installing and configuring your database separately. For longer-lived environments, we recommend you manage your database outside the Label Studio Helm release.
Label Studio Enterprise can run with an external Redis. This chart optionally installs Label Studio Enterprise with Bitnami's Redis chart
You can override the Redis using global.redisConfig section. For more details, please read the Global parameters section.
The chart spawn a Redis instance using Bitnami's Redis
chart
as a sub-chart. Set redis.enabled=false to disable the sub-chart.
The Redis sub-chart is best used to quickly provision temporary environments without installing and configuring Redis separately. For longer-lived environments, we recommend you manage your Redis outside the Label Studio Helm release.
Several example values.yaml are available in the
example-values
directory.
| Parameter | Description | Default |
|---|---|---|
global.imagePullSecrets |
Global Docker registry secret names as an array | [] |
global.image.repository |
Image repository | heartexlabs/label-studio |
global.image.pullPolicy |
Image pull policy | IfNotPresent |
global.image.tag |
Image tag (immutable tags are recommended) | develop |
global.pgConfig.host |
PostgreSQL hostname | "" |
global.pgConfig.port |
PostgreSQL port | 5432 |
global.pgConfig.dbName |
PostgreSQL database name | "" |
global.pgConfig.userName |
PostgreSQL database user account | "" |
global.pgConfig.password.secretName |
Name of an existing secret holding the password of PostgreSQL database user account | "" |
global.pgConfig.password.secretKey |
Key of an existing secret holding the password of PostgreSQL database user account | "" |
global.pgConfig.ssl.pgSslMode |
PostgreSQL SSL mode | "" |
global.pgConfig.ssl.pgSslSecretName |
Name of an existing secret holding the ssl certificate for PostgreSQL host | "" |
global.pgConfig.ssl.pgSslRootCertSecretKey |
Key of an existing secret holding the ssl certificate for PostgreSQL host | "" |
global.pgConfig.ssl.pgSslCertSecretKey |
Name of an existing secret holding the ssl certificate private key for PostgreSQL host | "" |
global.pgConfig.ssl.pgSslKeySecretKey |
Key of an existing secret holding the ssl certificate private key for PostgreSQL host | "" |
global.redisConfig.host |
Redis connection string in a format: redis://[:password]@localhost:6379/1 | "" |
global.redisConfig.password.secretName |
Name of an existing secret holding the password of Redis database | "" |
global.redisConfig.password.secretKey |
Key of an existing secret holding the password of Redis database | "" |
global.redisConfig.ssl.redisSslCertReqs |
Whether to validate the server public key or ignore it. Accepts ("", "optional", "required"). |
"" |
global.redisConfig.ssl.redisSslSecretName |
Name of an existing secret holding the ssl certificate for Redis host | "" |
global.redisConfig.ssl.redisSslCaCertsSecretKey |
Key of an existing secret holding the ssl certificate for Redis host | "" |
global.redisConfig.ssl.redisSslCertFileSecretKey |
Name of an existing secret holding the ssl certificate private key for Redis host | "" |
global.redisConfig.ssl.redisSslKeyFileSecretKey |
Key of an existing secret holding the ssl certificate private key for Redis host | "" |
global.extraEnvironmentVars |
Key/value map of an extra Environment variables, for example, PYTHONUNBUFFERED: 1 |
{} |
global.extraEnvironmentSecrets |
Key/value map of an extra Secrets | {} |
global.persistence.enabled |
Enable persistent storage. See more about setting up persistent storage | true |
global.persistence.type |
Persistent storage type | volume |
global.persistence.config.s3.accessKey |
Access key to use to access AWS S3 | "" |
global.persistence.config.s3.secretKey |
Secret key to use to access AWS S3 | "" |
global.persistence.config.s3.accessKeyExistingSecret |
Existing Secret name to extract Access key from to access AWS S3 | "" |
global.persistence.config.s3.accessKeyExistingSecretKey |
Existing Secret key to extract Access key from to access AWS S3 | "" |
global.persistence.config.s3.secretKeyExistingSecret |
Existing Secret name to extract Access secret key from to access AWS S3 | "" |
global.persistence.config.s3.secretKeyExistingSecretKey |
Existing Secret key to extract Access secret key from to access AWS S3 | "" |
global.persistence.config.s3.region |
AWS S3 region | "" |
global.persistence.config.s3.bucket |
AWS S3 bucket name | "" |
global.persistence.config.s3.folder |
AWS S3 folder name | "" |
global.persistence.config.s3.urlExpirationSecs |
The number of seconds that a presigned URL is valid for | 86400 |
global.persistence.config.s3.endpointUrl |
Custom S3 URL to use when connecting to S3, including scheme | "" |
global.persistence.config.s3.objectParameters |
Use this to set parameters on all objects. | {} |
global.persistence.config.volume.storageClass |
StorageClass for Persistent Volume | "" |
global.persistence.config.volume.size |
Persistent volume size | 10Gi |
global.persistence.config.volume.accessModes |
PVC Access mode | [ReadWriteOnce] |
global.persistence.config.volume.annotations |
Persistent volume additional annotations | {} |
global.persistence.config.volume.existingClaim |
Name of an existing PVC to use | "" |
global.persistence.config.volume.resourcePolicy |
PVC resource policy | "" |
global.persistence.config.volume.annotations |
Persistent volume additional annotations | {} |
global.persistence.config.azure.storageAccountName |
Azure Storage Account Name to use to access Azure Blob Storage | "" |
global.persistence.config.azure.storageAccountKey |
Azure Storage Account Key to use to access Azure Blob Storage | "" |
global.persistence.config.azure.storageAccountNameExistingSecret |
Existing Secret name to extract Azure Storage Account Name from to access Azure Blob Storage | "" |
global.persistence.config.azure.storageAccountNameExistingSecretKey |
Existing Secret key to extract Azure Storage Account Name from to use to access Azure Blob Storage | "" |
global.persistence.config.azure.storageAccountKeyExistingSecret |
Existing Secret name to extract Azure Storage Account Key from to access Azure Blob Storage | "" |
global.persistence.config.azure.storageAccountKeyExistingSecretKey |
Existing Secret key to extract Azure Storage Account Key from to use to access Azure Blob Storage | "" |
global.persistence.config.azure.containerName |
Azure Storage container name | "" |
global.persistence.config.azure.folder |
Azure Storage folder name | "" |
global.persistence.config.azure.urlExpirationSecs |
The number of seconds that a presigned URL is valid for | 86400 |
global.persistence.config.gcs.projectID |
GCP Project ID to use | "" |
global.persistence.config.gcs.applicationCredentialsJSON |
Service Account key to access GCS | "" |
global.persistence.config.gcs.applicationCredentialsJSONExistingSecret |
Existing Secret name to extract Service Account Key from to access GCS | "" |
global.persistence.config.gcs.applicationCredentialsJSONExistingSecretKey |
Existing Secret key to extract Service Account Key from to access GCS | "" |
global.persistence.config.gcs.bucket |
GCS bucket name | "" |
global.persistence.config.gcs.folder |
GCS folder name | "" |
global.persistence.config.gcs.urlExpirationSecs |
The number of seconds that a presigned URL is valid for | 86400 |
global.featureFlags |
Key/value map of Feature Flags | {} |
global.envInjectSources |
List of file names of a shell scripts to load additional environment variables from. This is useful when using Vault Agent Injector | [] |
global.cmdWrapper |
Additional commands to run prior to starting App. Useful to run wrappers before startup command | "" |
global.customCaCerts |
List of file names of SSL certificates to add into trust chain | [] |
| Parameter | Description | Default |
|---|---|---|
app.args |
Override default container args (useful when using custom images) | ["label-studio-uwsgi"] |
app.deploymentStrategy.type |
Deployment strategy type | RollingUpdate |
app.replicas |
Amount of app pod replicas | 1 |
app.NameOverride |
String to partially override release template name | "" |
app.FullnameOverride |
String to fully override release template name | "" |
app.resources.requests.memory |
The requested memory resources for the App container | 384Mi |
app.resources.requests.cpu |
The requested cpu resources for the App container | 250m |
app.resources.limits.memory |
The memory resources limits for the App container | "" |
app.resources.limits.cpu |
The cpu resources limits for the App container | "" |
app.initContainer.resources.requests |
Init container db-migrations resource requests | {} |
app.initContainer.resources.limits |
Init container db-migrations resource limits | {} |
app.readinessProbe.enabled |
Enable redinessProbe | false |
app.readinessProbe.path |
Path for reasinessProbe | /version |
app.readinessProbe.failureThreshold |
When a probe fails, Kubernetes will try failureThreshold times before giving up | 2 |
app.readinessProbe.initialDelaySeconds |
Number of seconds after the container has started before probe initiates | 60 |
app.readinessProbe.periodSeconds |
How often (in seconds) to perform the probe | 10 |
app.readinessProbe.successThreshold |
Minimum consecutive successes for the probe to be considered successful after having failed | 1 |
app.readinessProbe.timeoutSeconds |
Number of seconds after which the probe times out | 5 |
app.livenessProbe.enabled |
Enable livenessProbe | true |
app.livenessProbe.path |
Path for livenessProbe | /health |
app.livenessProbe.failureThreshold |
When a probe fails, Kubernetes will try failureThreshold times before giving up | 3 |
app.livenessProbe.initialDelaySeconds |
Number of seconds after the container has started before probe initiates | 60 |
app.livenessProbe.periodSeconds |
How often (in seconds) to perform the probe | 10 |
app.livenessProbe.successThreshold |
Minimum consecutive successes for the probe to be considered successful after having failed | 1 |
app.livenessProbe.timeoutSeconds |
Number of seconds after which the probe times out | 5 |
app.extraEnvironmentVars |
A map of extra environment variables to set | {} |
app.extraEnvironmentSecrets |
A map of extra environment secrets to set | {} |
app.nodeSelector |
Labels for pod assignment, formatted as a multi-line string or YAML map | {} |
app.annotations |
k8s annotations to attach to the app pods | {} |
app.extraLabels |
extra k8s labels to attach | {} |
app.affinity |
Affinity for pod assignment | {} |
app.tolerations |
Toleration settings for pod | [] |
app.nginx.extraEnvironmentVars |
A map of extra environment variables to set for nginx container | {} |
app.nginx.extraEnvironmentSecrets |
A map of extra environment secrets to set for nginx container | {} |
app.nginx.resources.requests |
Nginx sidecar container: resource requests | {} |
app.nginx.resources.limits |
Nginx sidecar container: resource limits | {} |
app.dnsPolicy |
Pod DNS policy | ClusterFirst |
app.enableServiceLinks |
Service environment variables | false |
app.shareProcessNamespace |
Enable shared process namespace in a pod | false |
app.automountServiceAccountToken |
Automount service account token for the server service account | true |
app.serviceAccount.create |
Enable the creation of a ServiceAccount for app pod | true |
app.serviceAccount.name |
Name of the created ServiceAccount | |
app.serviceAccount.annotations |
Custom annotations for app ServiceAccount | {} |
app.podSecurityContext.enabled |
Enable pod Security Context | true |
app.podSecurityContext.fsGroup |
Group ID for the pod | 1001 |
app.containerSecurityContext.enabled |
Enable container security context | true |
app.containerSecurityContext.runAsUser |
User ID for the container | 1001 |
app.containerSecurityContext.runAsNonRoot |
Avoid privelege escalation to root user | true |
app.extraVolumes |
Array to add extra volumes | [] |
app.extraVolumeMounts |
Array to add extra mounts (normally used with extraVolumes) | [] |
app.topologySpreadConstraints |
Topology Spread Constraints for pod assignment | [] |
app.terminationGracePeriodSeconds |
Termination grace period in seconds | 30 |
app.preStopDelaySeconds |
PreStop delay in seconds | 15 |
app.topologySpreadConstraints |
Topology Spread Constraints for pod assignment | [] |
app.nginx.args |
Override default container args (useful when using custom images) | ["nginx"] |
app.nginx.livenessProbe.enabled |
Nginx sidecar container: Enable livenessProbe | true |
app.nginx.livenessProbe.path |
Nginx sidecar container: path for livenessProbe | /nginx_health |
app.nginx.livenessProbe.failureThreshold |
Nginx sidecar container: when a probe fails, Kubernetes will try failureThreshold times before giving up | 2 |
app.nginx.livenessProbe.initialDelaySeconds |
Nginx sidecar container: Number of seconds after the container has started before probe initiates | 60 |
app.nginx.livenessProbe.periodSeconds |
Nginx sidecar container: How often (in seconds) to perform the probe | 5 |
app.nginx.livenessProbe.successThreshold |
Nginx sidecar container: Minimum consecutive successes for the probe to be considered successful after having failed | 1 |
app.nginx.livenessProbe.timeoutSeconds |
Nginx sidecar container: Number of seconds after which the probe times out | 3 |
app.nginx.readinessProbe.enabled |
Nginx sidecar container: Enable redinessProbe | true |
app.nginx.readinessProbe.path |
Nginx sidecar container: Path for reasinessProbe | /version |
app.nginx.readinessProbe.failureThreshold |
Nginx sidecar container: When a probe fails, Kubernetes will try failureThreshold times before giving up | 2 |
app.nginx.readinessProbe.initialDelaySeconds |
Nginx sidecar container: Number of seconds after the container has started before probe initiates | 60 |
app.nginx.readinessProbe.periodSeconds |
Nginx sidecar container: How often (in seconds) to perform the probe | 10 |
app.nginx.readinessProbe.successThreshold |
Nginx sidecar container: Minimum consecutive successes for the probe to be considered successful after having failed | 1 |
app.nginx.readinessProbe.timeoutSeconds |
Nginx sidecar container: Number of seconds after which the probe times out | 5 |
app.service.type |
k8s service type | ClusterIP |
app.service.port |
k8s service port | 80 |
app.service.targetPort |
k8s service target port | 8085 |
app.service.portName |
k8s service port name | service |
app.service.annotations |
Custom annotations for app service | {} |
app.service.sessionAffinity |
Custom annotations for app service | None |
app.service.sessionAffinityConfig |
Additional settings for the sessionAffinity | {} |
app.ingress.enabled |
Set to true to enable ingress record generation | false |
app.ingress.className |
IngressClass that will be be used to implement the Ingress (Kubernetes 1.18+) | "" |
app.ingress.host |
Default host for the ingress resource | "" |
app.ingress.path |
The Path to LabelStudio. You may need to set this to '/*' in order to use this with ALB ingress controllers. | / |
app.ingress.extraPaths |
Extra paths to prepend to the host configuration | [] |
app.ingress.extraHosts |
Extra hosts to prepend to the hosts configuration | [] |
app.ingress.tls |
TLS secrets definition | [] |
app.ingress.annotations |
Additional ingress annotations | {} |
app.ingress.pathType |
Ingress path type | ImplementationSpecific |
app.rbac.create |
Specifies whether RBAC resources should be created for app service | false |
app.rbac.rules |
Custom RBAC rules to set for app service | [] |
app.contextPath |
Context path appended for health/readiness checks | / |
app.cmdWrapper |
Additional commands to run prior to starting App. Useful to run wrappers before startup command | "" |
app.initContainers |
Additional init containers to the App Deployment pod | [] |
Supported only in LabelStudio Enterprise
| Parameter | Description | Default |
|---|---|---|
rqworker.enabled |
Enable rqworker pod | true |
rqworker.NameOverride |
String to partially override release template name | "" |
rqworker.FullnameOverride |
String to fully override release template name | "" |
rqworker.deploymentStrategy.type |
Deployment strategy type | Recreate |
rqworker.extraEnvironmentVars |
A map of extra environment variables to set | {} |
rqworker.extraEnvironmentSecrets |
A map of extra environment secrets to set | {} |
rqworker.nodeSelector |
labels for pod assignment, formatted as a multi-line string or YAML map | {} |
rqworker.annotations |
k8s annotations to attach to the rqworker pods | {} |
rqworker.extraLabels |
extra k8s labels to attach | {} |
rqworker.affinity |
Affinity for pod assignment | {} |
rqworker.tolerations |
Toleration settings for pod | [] |
rqworker.queues.high.replicas |
Rqworker queue "high" replicas amount | 1 |
rqworker.queues.high.args |
Rqworker queue "high" launch arguments | "high" |
rqworker.queues.high.resources |
Rqworker queue "high" resources | {} |
rqworker.queues.low.replicas |
Rqworker queue "low" replicas amount | 1 |
rqworker.queues.low.args |
Rqworker queue "low" launch arguments | "low" |
rqworker.queues.low.resources |
Rqworker queue "low" resources | {} |
rqworker.queues.default.replicas |
Rqworker queue "default" replicas amount | 1 |
rqworker.queues.default.args |
Rqworker queue "default" launch arguments | "default" |
rqworker.queues.default.resources |
Rqworker queue "default" resources | {} |
rqworker.queues.critical.replicas |
Rqworker queue "critical" replicas amount | 1 |
rqworker.queues.critical.args |
Rqworker queue "critical" launch arguments | "critical" |
rqworker.queues.critical.resources |
Rqworker queue "critical" resources | {} |
rqworker.dnsPolicy |
Pod DNS policy | ClusterFirst |
rqworker.enableServiceLinks |
Service environment variables | false |
rqworker.shareProcessNamespace |
Enable shared process namespace in a pod | false |
rqworker.automountServiceAccountToken |
Automount service account token for the server service account | true |
rqworker.readinessProbe.enabled |
Enable redinessProbe | false |
rqworker.readinessProbe.path |
Path for reasinessProbe | /version |
rqworker.readinessProbe.failureThreshold |
When a probe fails, Kubernetes will try failureThreshold times before giving up | 2 |
rqworker.readinessProbe.initialDelaySeconds |
Number of seconds after the container has started before probe initiates | 60 |
rqworker.readinessProbe.periodSeconds |
How often (in seconds) to perform the probe | 5 |
rqworker.readinessProbe.successThreshold |
Minimum consecutive successes for the probe to be considered successful after having failed | 1 |
rqworker.readinessProbe.timeoutSeconds |
Number of seconds after which the probe times out | 3 |
rqworker.livenessProbe.enabled |
Enable livenessProbe | false |
rqworker.livenessProbe.path |
Path for livenessProbe | /health |
rqworker.livenessProbe.failureThreshold |
When a probe fails, Kubernetes will try failureThreshold times before giving up | 2 |
rqworker.livenessProbe.initialDelaySeconds |
Number of seconds after the container has started before probe initiates | 60 |
rqworker.livenessProbe.periodSeconds |
How often (in seconds) to perform the probe | 5 |
rqworker.livenessProbe.successThreshold |
Minimum consecutive successes for the probe to be considered successful after having failed | 1 |
rqworker.livenessProbe.timeoutSeconds |
Number of seconds after which the probe times out | 3 |
rqworker.serviceAccount.create |
Enable the creation of a ServiceAccount for rqworker pod | true |
rqworker.serviceAccount.name |
Name of the created ServiceAccount | "" |
rqworker.podSecurityContext.enabled |
Enable pod Security Context | true |
rqworker.podSecurityContext.fsGroup |
Group ID for the pod | 1001 |
rqworker.containerSecurityContext.enabled |
Enable container security context | true |
rqworker.containerSecurityContext.runAsUser |
User ID for the container | 1001 |
rqworker.containerSecurityContext.runAsNonRoot |
Avoid privelege escalation to root user | true |
rqworker.serviceAccount.annotations |
Custom annotations for app ServiceAccount | {} |
rqworker.extraVolumes |
Array to add extra volumes | [] |
rqworker.extraVolumeMounts |
Array to add extra mounts (normally used with extraVolumes) | [] |
rqworker.topologySpreadConstraints |
Topology Spread Constraints for pod assignment | [] |
rqworker.rbac.create |
Specifies whether RBAC resources should be created for rqworker service | false |
rqworker.rbac.rules |
Custom RBAC rules to set for rqworker service | [] |
rqworker.cmdWrapper |
Additional commands to run prior to starting App. Useful to run wrappers before startup command | "" |
| Parameter | Description | Default |
|---|---|---|
enterprise.enabled |
Enable Enterprise features | false |
enterprise.enterpriseLicense.secretName |
Name of an existing secret holding the Label Studio Enterprise license information | "" |
enterprise.enterpriseLicense.secretKey |
Key of an existing secret holding the enterprise license information | license |
| Parameter | Description | Default |
|---|---|---|
postgresql.enabled |
Enable Postgresql sub-chart | true |
postgresql.architecture |
PostgreSQL architecture (standalone or replication) | standalone |
postgresql.image.tag |
PostgreSQL image tag | 13.8.0 |
postgresql.auth.username |
Name for a custom user to create | labelstudio |
postgresql.auth.password |
Password for the custom user to create. Ignored if auth.existingSecret with key password is provided |
labelstudio |
postgresql.auth.database |
Name for a custom database to create | labelstudio |
redis.enabled |
Enable Redis sub-chart | false |
redis.architecture |
Redis architecture. Allowed values: standalone or replication |
standalone |
redis.auth.enabled |
Enable password authentication | false |
| Parameter | Description | Default |
|---|---|---|
cronjob.enabled |
Enable cronjobs | false |
cronjob.jobs |
A map of predefined cronjobs | {} |
cronjob.jobs.*.schedule |
Cronjob schedule according to cron format | "" |
cronjob.jobs.*.args |
Cronjob launch arguments | "" |
cronjob.jobs.*.extraEnvironmentVars |
Cronjob key/value map of an extra Environment variables | {} |
cronjob.jobs.*.extraEnvironmentSecrets |
Cronjob key/value map of an extra Secrets | {} |
cronjob.jobs.*.extraVolumes |
Cronjob array to add extra volumes | [] |
cronjob.jobs.*.extraVolumeMounts |
Cronjob array to add extra mounts (normally used with extraVolumes) | [] |
cronjob.jobs.*.restartPolicy |
Cronjob restart policy: OnFailure or Never | [] |
cronjob.jobs.*.backoffLimit |
The number of retries before considering a Job as failed | "" |
cronjob.jobs.*.concurrencyPolicy |
Concurrency policy | "" |
| Parameter | Description | Default |
|---|---|---|
metrics.enabled |
Enable metrics | true |
metrics.uwsgiExporter |
Configuration map for uwsgiExporter | {} |
| Parameter | Description | Default |
|---|---|---|
upgradeCheck.enabled |
Enable upgradecheck | false |
ci |
Indicate that deployment running for CI purposes | false |
clusterDomain |
Kubernetes Cluster Domain | cluster.local |
checkConfig.skipEnvValues |
Skip validation for env variables | false |
The global.extraEnvironmentVars section can be used to configure environment properties of Label Studio.
Any key value put under this section translates to environment variables
used to control Label Studio's configuration. Every key is upper-cased before setting the environment variable.
An example:
global:
extraEnvironmentVars:
PG_USER: labelstudioThe global.featureFlags section can be used to set feature flags of Label Studio.
Any key value put under this section translates to environment variables
used to control Label Studio's feature flags configuration. Every key should start from ff_ or fflag_ in lower case.
An example:
global:
featureFlags:
fflag_enable_some_cool_feature_short: trueLabel Studio Enterprise requires some additional configuration not needed when using Label Studio Open-Source. To use Label Studio Enterprise, at the minimum, you need to do the following:
- Set
enterprise.enabledtotrueinvalues.yamlfile. - Update values.yaml to use a Label Studio Enterprise image.
- Satisfy the two prerequisites below for Enterprise License and Enterprise Docker Registry.
Once you have these set, it is possible to install Label Studio Enterprise, but please make sure to review the below sections for other settings that you should consider configuring before installing Label Studio Enterprise.
For long-lived or Production ready environments we strongly recommend to use separate instance of PostgreSQL and Redis.
Label Studio Enterprise 2.1+ can run with a static license file or by obtaining a license key from a License Server.
If you have paid for a license, but you do not have a copy of yours, please contact Label Studio Support. Once you have it, you will need to store it in a Secret:
# as file
kubectl create secret generic lse-license --from-file=license=path/to/lic
# OR
kubectl create secret generic lse-license --from-literal=license=https://<LICENSE_SERVER>/<CUSTOMER_LICENSE_ID>You can override the secret name in values.yaml, in the enterprise.enterpriseLicense key.
Please ensure the above secret is created in the same namespace in which Label Studio Enterprise is going to be deployed.
Label Studio Enterprise uses a private Docker registry and require a pull secret.
You should have received credentials to log into Docker Hub after purchasing Label Studio Enterprise. Use provided credentials to create registry secrets:
kubectl create secret docker-registry heartex-pull-key \
--docker-server=https://index.docker.io/v2/ \
--docker-username=heartexlabs \
--docker-password=<CUSTOMER_PASSWORD>You can override the secret names in values.yaml in the global.imagePullSecrets section.
Please ensure the above secret is created in the same namespace in which Label Studio Enterprise is going to be deployed.
If you run into an issue, bug or have a question, please reach out to the Label Studio community via Label Studio Slack Community.