在 Kubernetes 上部署 Langflow 生产环境
Langflow Runtime Chart 专为在生产环境中部署应用程序而量身定制。它侧重于稳定性、性能、隔离性和安全性,以确保应用程序可靠高效地运行。
默认情况下,Langflow Runtime Helm chart 启用 readOnlyRootFilesystem: true
作为安全最佳实践。此设置可防止在运行时修改容器的根文件系统,这是生产环境中推荐的安全措施。
禁用 readOnlyRootFilesystem
会降低部署的安全性。只有在您了解其安全隐患并已实施其他安全措施的情况下,才应禁用此设置。
有关更多信息,请参阅Kubernetes 文档。
前提条件
- 一个Kubernetes 服务器
- kubectl
- Helm
安装 Langflow Runtime Helm chart
- 将仓库添加到 Helm。
_10helm repo add langflow https://langflow-ai.github.io/langflow-helm-charts_10helm repo update
- 使用默认选项在
langflow
命名空间中安装 Langflow 应用程序。
如果您创建了包含打包流程的自定义镜像,您可以通过使用 --set
标志覆盖默认的 values.yaml 文件来部署 Langflow。
- 使用包含捆绑流程的自定义镜像
_10helm install my-langflow-app langflow/langflow-runtime -n langflow --create-namespace --set image.repository=myuser/langflow-hello-world --set image.tag=1.0.0
- 或者,安装 chart 并使用
--set
标志从 URL 下载流程
_10helm install my-langflow-app-with-flow langflow/langflow-runtime \_10-n langflow \_10--create-namespace \_10--set 'downloadFlows.flows[0].url=https://raw.githubusercontent.com/langflow-ai/langflow/dev/tests/data/basic_example.json'
如果您使用的 shell 需要转义方括号,您可能需要在此命令中转义方括号
_10helm install my-langflow-app-with-flow langflow/langflow-runtime \_10-n langflow \_10--create-namespace \_10--set 'downloadFlows.flows\[0\].url=https://raw.githubusercontent.com/langflow-ai/langflow/dev/tests/data/basic_example.json'
- 检查 Pod 的状态。
_10kubectl get pods -n langflow
访问 Langflow Runtime
- 获取您的服务名称。
_10kubectl get svc -n langflow
服务名称是您的 release 名称后跟 -langflow-runtime
。例如,如果您使用了 helm install my-langflow-app-with-flow
,则服务名称为 my-langflow-app-with-flow-langflow-runtime
。
- 启用端口转发以从本地机器访问 Langflow
_10kubectl port-forward -n langflow svc/my-langflow-app-with-flow-langflow-runtime 7860:7860
- 确认您可以访问
http://localhost:7860/api/v1/flows/
的 API 并查看流程列表。
_10curl -v http://localhost:7860/api/v1/flows/
- 执行打包的流程。
以下命令从流程列表中获取第一个流程 ID 并运行该流程。
_12# Get flow ID_12id=$(curl -s "http://localhost:7860/api/v1/flows/" | jq -r '.[0].id')_12_12# Run flow_12curl -X POST \_12"http://localhost:7860/api/v1/run/$id?stream=false" \_12-H 'Content-Type: application/json' \_12-d '{_12"input_value": "Hello!",_12"output_type": "chat",_12"input_type": "chat"_12 }'
配置 Secrets
要注入 secrets 和 Langflow 全局变量,请在 values.yaml 文件中使用 secrets
和 env
部分。
例如,示例流程 JSON 使用了一个作为 secret 的全局变量。将流程导出为 JSON 时,建议不要包含该 secret。
相反,在 Langflow Runtime 中导入流程时,您可以通过以下任一方式设置全局变量:
- 使用 values.yaml
- 使用 Helm 命令
_10env_10- name: openai_key_var_10valueFrom_10secretKeyRef_10name: openai-key_10key: openai-key
或者直接在 values 文件中(不建议用于 secret 值)
_10env_10- name: openai_key_var_10value: "sk-...."
- 创建 Secret
_10kubectl create secret generic openai-credentials \_10--namespace langflow \_10--from-literal=OPENAI_API_KEY=sk...
- 验证 secret 是否存在。结果是加密的。
_10kubectl get secrets -n langflow openai-credentials
- 升级 Helm release 以使用该 secret。
_10helm upgrade my-langflow-app-image langflow/langflow-runtime -n langflow \_10--reuse-values \_10--set "extraEnv[0].name=OPENAI_API_KEY" \_10--set "extraEnv[0].valueFrom.secretKeyRef.name=openai-credentials" \_10--set "extraEnv[0].valueFrom.secretKeyRef.key=OPENAI_API_KEY"
配置日志级别
在 values.yaml 文件中设置日志级别和其他 Langflow 配置。
_10env_10- name: LANGFLOW_LOG_LEVEL_10value: "INFO"
配置扩缩容
要扩展 Langflow 应用程序的副本数量,请更改 values.yaml 文件中的 replicaCount
值。
_10replicaCount: 3
要通过增加 Pod 的资源来垂直扩展应用程序,请更改 values.yaml 文件中的 resources
值。
_10resources_10requests_10memory: "2Gi"_10cpu: "1000m"
有关在 AWS EKS、Google GKE 或 Azure AKS 上部署 Langflow 的更多信息,请参阅Langflow Helm Charts 仓库。