在 Kubernetes 上部署 Label Studio
1. 概述
Label Studio 是一款开源的数据标注工具,支持多种标注任务,如文本标注、图像标注、音频标注等
2. 前提条件
在开始之前,请确保你具备以下条件:
一个 Kubernetes 集群(版本 1.18 或更高)。
安装了 Helm 包管理工具。
可访问并配置 S3 或 Ceph 存储(用于持久化文件存储)。
已配置外部数据库(如 PostgreSQL)。
配置了外部 Redis 实例(可选,作为缓存和任务队列使用)。
3. 部署步骤
3.1 添加helm chart仓库
helm repo add heartex https://charts.heartex.com/
helm repo update heartex
helm search repo heartex/label-studio
3.2 准备 values.yaml
配置文件
查看Chart 中定义的所有Values
helm show values heartex/label-studio > value.yaml
以下是一个 values.yaml
配置文件示例,针对 Kubernetes 部署设置了 S3 存储、PostgreSQL 数据库和 Redis 缓存:
global:image:registry: "docker.io"repository: "heartexlabs/label-studio"pullPolicy: "IfNotPresent"tag: ""pgConfig:host: "10.x.x.x"port: 5432dbName: "label_studio_prod"userName: "label_studio_prod"password:secretName: "pgsql-passwd"secretKey: "password"ssl:pgSslMode: ""pgSslSecretName: ""pgSslRootCertSecretKey: ""pgSslCertSecretKey: ""pgSslKeySecretKey: ""redisConfig:host: "redis-labelstudio.example.com"password:secretName: "redis-passwd"secretKey: "password"ssl:redisSslCertReqs: ""redisSslSecretName: ""redisSslCaCertsSecretKey: ""redisSslCertFileSecretKey: ""redisSslKeyFileSecretKey: ""persistence:enabled: truetype: s3config:s3:accessKey: "your-access-key"secretKey: "your-secret-key"region: "your-region"bucket: "your-bucket"folder: "" # optionalurlExpirationSecs: "3600" # 签名 URL 的过期时间endpointUrl: "https://your-s3-endpoint"
pgConfig
:配置 PostgreSQL 数据库连接信息。redisConfig
:配置 Redis 实例的连接信息(如果使用)。persistence
:配置 S3 或 Ceph 对象存储,用于存储上传的文件。
3.3 创建redis、postgresql密码对应的secret
kubectl -n kube-system create secret generic redis-passwd --from-literal=password='redis-passwd'kubectl -n kube-system create secret generic pgsql-passwd --from-literal=password='pgsql-passwd'
3.4 使用 Helm 部署 Label Studio
使用配置文件
values.yaml
安装 Label Studio:helm -n kube-system install heartex/label-studio -f value.yaml --generate-name
该命令将在
kube-system
命名空间中部署 Label Studio。
4. 访问 Label Studio
创建一个 Ingress 资源:如果你希望通过域名访问 Label Studio,配置 Ingress。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata:name: labelstudio-ingressnamespace: kube-systemannotations:nginx.ingress.kubernetes.io/rewrite-target: /nginx.ingress.kubernetes.io/proxy-body-size: "50m"nginx.ingress.kubernetes.io/backend-protocol: "HTTP" spec:ingressClassName: nginxrules:- host: labelstudio.example.comhttp:paths:- path: /pathType: Prefixbackend:service:name: label-studio-1753688001-ls-appport:number: 80
端口转发:如果不使用 Ingress,可以通过
kubectl
进行端口转发,临时访问 Web UI。kubectl port-forward --address 0.0.0.0 -n kube-system label-studio-1753688001-ls-app-6c4d84b449-jk2cm 9090:8085
然后通过浏览器访问
http://localhost:8080
。
5.更新部署
#helm -n kube-system list
label-studio-1753688001 kube-system 10 2025-07-30 13:55:01.925579305 +0800 CST deployed label-studio-1.10.0 1.20.0#helm -n kube-system upgrade label-studio-1753688001 heartex/label-studio -f value.yaml