在 Kubernetes 上部署 Langflow 生产环境
Langflow 运行时 Helm chart 专为在生产环境中部署应用程序而定制。它专注于稳定性、性能、隔离性和安全性,确保应用程序能够可靠高效地运行。
出于安全原因,默认的 Langflow 运行时 Helm chart 设置了 readOnlyRootFilesystem: true
。此设置防止在运行时修改容器的根文件系统,这是生产环境中推荐的安全措施。
如果禁用 readOnlyRootFilesystem
(设为 false),将会降低您的部署安全性。仅在您了解安全影响并已实施其他安全措施的情况下才禁用此设置。
有关更多信息,请参阅 Kubernetes 文档。
先决条件
- 一个 Kubernetes 服务器
- kubectl
- Helm
安装 Langflow 运行时 Helm chart
-
将仓库添加到 Helm:
_10helm repo add langflow https://langflow-ai.github.io/langflow-helm-charts_10helm repo update -
使用默认选项在
langflow
命名空间中安装 Langflow 应用。- 使用自定义镜像安装 chart
- 安装 chart 并下载流程
如果您有 包含打包流程的自定义镜像,您可以通过使用
--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使用
--set
标志安装 chart 并从 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 需要转义方括号,请根据需要修改
--set
路径。 例如,--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 运行时
-
获取您的服务名称:
_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# 获取流程 ID_12id=$(curl -s "http://localhost:7860/api/v1/flows/" | jq -r '.[0].id')_12_12# 运行流程_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 运行时 Helm chart 的 values.yaml
文件的 .env
部分来为您的 Langflow 部署定义环境变量。
这包括内置的 Langflow 环境变量 以及您的流程中使用的 全局变量。
Langflow 可以从您的运行时环境中获取全局变量,例如在 values.yaml
中引用的 Kubernetes 密钥。
例如,Langflow 运行时 Helm chart 的 示例流程 JSON 使用了一个作为密钥的全局变量。
如果您想在 Kubernetes 上的 Langflow 部署中运行此流程,您需要在运行时配置中包含该密钥。
当您将流程导出为 JSON 文件时,建议省略密钥。 是否包含密钥取决于您在流程中如何声明密钥以及是否使用 Save with my API keys 选项。 有关更多信息,请参阅 导入和导出流程。
设置密钥
Kubernetes 密钥是存储敏感值和凭据的推荐方式。
使用 secretKeyRef
在 values.yaml
中引用 Kubernetes 密钥:
_10env:_10 - name: OPENAI_API_KEY_10 valueFrom:_10 secretKeyRef:_10 name: openai-credentials_10 key: openai-key
使用 kubectl
和 helm
创建和设置密钥
您可以使用 kubectl
和 helm
命令来创建和设置密钥:
-
创建密钥:
_10kubectl create secret generic openai-credentials \_10--namespace langflow \_10--from-literal=OPENAI_API_KEY=sk... -
验证密钥是否存在:
_10kubectl get secrets -n langflow openai-credentials结果已加密。
-
升级 Helm release 以使用该密钥:
_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"如果您的 shell 要求,请转义方括号。
设置日志级别和其他配置变量
对于非敏感变量,如 LANGFLOW_LOG_LEVEL
,您可以直接在 values.yaml
中设置值:
_10env:_10 - name: LANGFLOW_LOG_LEVEL_10 value: "INFO"
配置扩展
使用 Langflow 运行时 Helm chart 的 values.yaml
文件中的 replicaCount
和 resources
来配置扩展:
-
水平扩展:使用
replicaCount
设置 Langflow 部署的副本数量。_10replicaCount: 3 -
垂直扩展:使用
resources
部分根据应用程序的需求调整 pod 资源。_10resources:_10requests:_10memory: "2Gi"_10cpu: "1000m"