使用 Kubernetes 部署流#
使用 Kubernetes 部署流有四个步骤
将流构建为 docker 格式。
构建 docker 镜像。
创建 Kubernetes 部署 yaml。
应用部署。
将流构建为 docker 格式#
请注意,所有依赖连接必须在构建为 docker 之前创建。
# create connection if not created before
pf connection create --file ../../../examples/connections/azure_openai.yml --set api_key=<your_api_key> api_base=<your_api_base> --name open_ai_connection
使用以下命令将流构建为 docker 格式
pf flow build --source <path-to-your-flow-folder> --output <your-output-dir> --format docker
单击下面的按钮将流构建为 docker 格式:
请注意,所有依赖连接必须在导出为 docker 之前创建。
Docker 格式文件夹结构#
导出的 Dockerfile 及其依赖项位于同一文件夹中。结构如下
flow:包含所有流文件的文件夹
…
connections:包含用于创建所有相关连接的 yaml 文件的文件夹
…
Dockerfile:用于构建镜像的 dockerfile
start.sh:
Dockerfile
中CMD
使用的脚本,用于启动服务runit:包含所有 runit 脚本的文件夹
…
settings.json:一个 json 文件,用于存储 docker 镜像的设置
README.md:文件的简单介绍
使用 Kubernetes 部署#
我们将使用 web-classification 作为示例,演示如何使用 Kubernetes 进行部署。
请确保您已 创建流所需的连接,如果没有,您可以参考 为 web-classification 设置连接。
此外,请确保您已安装所有必需的依赖项。您可以参考 web-classification README 中的“先决条件”部分,了解先决条件和安装说明的完整列表。
构建 Docker 镜像#
与其他 Dockerfile 一样,您需要先构建镜像。您可以为镜像标记任何您想要的名称。在此示例中,我们使用 web-classification-serve
。
然后运行以下命令
cd <your-output-dir>
docker build . -t web-classification-serve
创建 Kubernetes 部署 yaml。#
Kubernetes 部署 yaml 文件充当在 Kubernetes pod 中管理 docker 容器的指南。它清楚地指定了重要信息,如容器镜像、端口配置、环境变量和各种设置。下面,您将找到一个简单的部署模板,您可以轻松自定义以满足您的需求。
注意:您需要首先使用 base64 对密钥进行编码,并将 <encoded_secret> 作为“open-ai-connection-api-key”输入到部署配置中。例如,您可以在 Linux 中运行以下命令
encoded_secret=$(echo -n <your_api_key> | base64)
---
kind: Namespace
apiVersion: v1
metadata:
name: <your-namespace>
---
apiVersion: v1
kind: Secret
metadata:
name: open-ai-connection-api-key
namespace: <your-namespace>
type: Opaque
data:
open-ai-connection-api-key: <encoded_secret>
---
apiVersion: v1
kind: Service
metadata:
name: web-classification-service
namespace: <your-namespace>
spec:
type: NodePort
ports:
- name: http
port: 8080
targetPort: 8080
nodePort: 30123
selector:
app: web-classification-serve-app
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-classification-serve-app
namespace: <your-namespace>
spec:
selector:
matchLabels:
app: web-classification-serve-app
template:
metadata:
labels:
app: web-classification-serve-app
spec:
containers:
- name: web-classification-serve-container
image: <your-docker-image>
imagePullPolicy: Never
ports:
- containerPort: 8080
env:
- name: OPEN_AI_CONNECTION_API_KEY
valueFrom:
secretKeyRef:
name: open-ai-connection-api-key
key: open-ai-connection-api-key
应用部署。#
在部署应用程序之前,请确保您已设置 Kubernetes 集群并安装了 kubectl(如果尚未安装)。在本文档中,我们将使用 Minikube 作为示例。要启动集群,请执行以下命令
minikube start
Kubernetes 集群启动并运行后,您可以使用以下命令部署应用程序
kubectl apply -f deployment.yaml
此命令将创建必要的 pod 以在集群中运行您的应用程序。
注意:您需要将下面的 <pod_name> 替换为您的特定 pod_name。您可以通过运行 kubectl get pods -n web-classification
来检索它。
检索容器的流服务日志#
kubectl logs 命令用于检索在 pod 中运行的容器的日志,这对于调试、监控和故障排除部署在 Kubernetes 集群中的应用程序非常有用。
kubectl -n <your-namespace> logs <pod-name>
连接#
如果服务涉及连接,所有相关连接都将导出为 yaml 文件并在容器中重新创建。连接中的密钥不会直接导出。相反,我们将它们导出为环境变量的引用
$schema: https://azuremlschemas.azureedge.net/promptflow/latest/OpenAIConnection.schema.json
type: open_ai
name: open_ai_connection
module: promptflow.connections
api_key: ${env:OPEN_AI_CONNECTION_API_KEY} # env reference
您需要在容器中设置环境变量以使连接正常工作。
测试端点#
选项1
启动服务后,您可以在本地端口和 pod 上的端口之间建立连接。这允许您方便地从本地终端测试端点。为此,请执行以下命令
kubectl port-forward <pod_name> <local_port>:<container_port> -n <your-namespace>
有了端口转发,您可以使用 curl 命令启动端点测试
curl https://:<local_port>/score --data '{"url":"https://play.google.com/store/apps/details?id=com.twitter.android"}' -X POST -H "Content-Type: application/json"
选项2
minikube service web-classification-service --url -n <your-namespace>
作为进程运行,创建到集群的隧道。该命令将服务直接暴露给主机操作系统上运行的任何程序。上面的命令将检索在 Minikube Kubernetes 集群中运行的服务 URL(例如 http://
: ),您可以点击它在网络浏览器中与流服务进行交互。或者,您可以使用以下命令测试端点 注意:Minikube 将使用自己的外部端口而不是 nodePort 来监听服务。因此,请将 <assigned_port> 替换为上面获得的端口。
curl https://:<assigned_port>/score --data '{"url":"https://play.google.com/store/apps/details?id=com.twitter.android"}' -X POST -H "Content-Type: application/json"
后续步骤#
在此处尝试示例 here。