在 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
服务名称是您的发布名称后跟 -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 }'
配置密钥
要注入密钥和 Langflow 全局变量,请使用 values.yaml 文件中的 secrets
和 env
部分。
例如,示例流程 JSON 使用一个作为密钥的全局变量。当您将流程导出为 JSON 时,建议不要包含密钥。
相反,在 Langflow runtime 中导入流 程时,您可以通过以下方式之一设置全局变量:
- values.yaml
- Helm 命令
_10env:_10 - name: openai_key_var_10 valueFrom:_10 secretKeyRef:_10 name: openai-key_10 key: openai-key
或直接在 values 文件中(不建议用于密钥值):
_10env:_10 - name: openai_key_var_10 value: "sk-...."
- 创建密钥:
_10kubectl create secret generic openai-credentials \_10 --namespace langflow \_10 --from-literal=OPENAI_API_KEY=sk...
- 验证密钥存在。结果是加密的。
_10kubectl get secrets -n langflow openai-credentials
- 升级 Helm 发布以使用密钥。
_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_10 value: "INFO"
配置扩展
要扩展 Langflow 应用程序的副 本数量,请在 values.yaml 文件中更改 replicaCount
值。
_10replicaCount: 3
要通过增加 Pod 的资源来垂直扩展应用程序,请在 values.yaml 文件中更改 resources
值。
_10resources:_10 requests:_10 memory: "2Gi"_10 cpu: "1000m"
有关在 AWS EKS、Google GKE 或 Azure AKS 上部署 Langflow 的更多信息,请参阅 Langflow Helm Charts 仓库。