跳到主要内容

在 Kubernetes 上部署 Langflow 生产环境

Langflow 运行时 (Runtime) Helm chart 专为在生产环境中部署应用程序而量身定制。它专注于稳定性、性能、隔离和安全性,以确保应用程序可靠且高效地运行。

注意

出于安全原因,默认的 Langflow 运行时 Helm chart 设置了 readOnlyRootFilesystem: true。此设置防止在运行时修改容器的根文件系统,这是生产环境中推荐的安全措施。

如果禁用 readOnlyRootFilesystem (false),它会降低您部署的安全姿态。仅在您了解安全含义并实施了其他安全措施的情况下禁用此设置。

有关更多信息,请参阅 Kubernetes 文档

先决条件

安装 Langflow 运行时 Helm chart

  1. 将仓库添加到 Helm:


    _10
    helm repo add langflow https://langflow-ai.github.io/langflow-helm-charts
    _10
    helm repo update

  2. langflow 命名空间中使用默认选项安装 Langflow 应用程序。

    如果您有包含打包流的自定义镜像,可以通过使用 --set 标志覆盖默认的 values.yaml 来部署 Langflow:


    _10
    helm install my-langflow-app langflow/langflow-runtime -n langflow --create-namespace --set image.repository=myuser/langflow-hello-world --set image.tag=1.0.0

  3. 检查 pod 的状态:


    _10
    kubectl get pods -n langflow

访问 Langflow 运行时

  1. 获取您的服务名称:


    _10
    kubectl get svc -n langflow

    服务名称是您的发布名称后跟 -langflow-runtime。例如,如果您使用了 helm install my-langflow-app-with-flow,则服务名称为 my-langflow-app-with-flow-langflow-runtime

  2. 启用端口转发以便从本地机器访问 Langflow:


    _10
    kubectl port-forward -n langflow svc/my-langflow-app-with-flow-langflow-runtime 7860:7860

  3. 通过调用 http://localhost:7860/api/v1/flows/ 确认您可以访问 API:


    _10
    curl -v http://localhost:7860/api/v1/flows/

    成功的请求将返回流列表。

  4. 运行打包好的流。 以下示例从流列表中获取第一个流 ID,然后运行该流:


    _12
    # 获取流 ID
    _12
    id=$(curl -s "http://localhost:7860/api/v1/flows/" | jq -r '.[0].id')
    _12
    _12
    # 运行流
    _12
    curl -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 密钥是存储敏感值和凭据的推荐方式。

values.yaml 中使用 secretKeyRef 引用 Kubernetes 密钥:


_10
env:
_10
- name: OPENAI_API_KEY
_10
valueFrom:
_10
secretKeyRef:
_10
name: openai-credentials
_10
key: openai-key

使用 kubectlhelm 创建并设置密钥

您可以使用 kubectlhelm 命令来创建和设置密钥:

  1. 创建密钥:


    _10
    kubectl create secret generic openai-credentials \
    _10
    --namespace langflow \
    _10
    --from-literal=OPENAI_API_KEY=sk...

  2. 验证密钥是否存在:


    _10
    kubectl get secrets -n langflow openai-credentials

    结果是加密的。

  3. 升级 Helm 发布以使用该密钥:


    _10
    helm 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 中设置值:


_10
env:
_10
- name: LANGFLOW_LOG_LEVEL
_10
value: "INFO"

配置扩缩容

使用 Langflow 运行时 Helm chart 的 values.yaml 文件中的 replicaCountresources 来配置扩缩容:

  • 水平扩缩容:使用 replicaCount 设置 Langflow 部署的副本数。


    _10
    replicaCount: 3

  • 垂直扩缩容:使用 resources 部分根据您的应用程序需求调整 pod 资源。


    _10
    resources:
    _10
    requests:
    _10
    memory: "2Gi"
    _10
    cpu: "1000m"

另请参阅

Search