使用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: 一个用于存储docker镜像设置的json文件
README.md: 文件的简单介绍
使用Kubernetes部署#
我们将使用web-classification作为示例来展示如何使用Kubernetes进行部署。
请确保您已经创建了流程所需的连接,如果没有,您可以参考为网络分类设置连接。
此外,请确保您已安装所有必需的依赖项。您可以参考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=$(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以在集群中运行您的应用程序。
注意: 你需要将下面的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
: -n 设置好端口转发后,你可以使用curl命令启动端点测试:
curl http://localhost:
/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作为一个进程运行,创建一个到集群的隧道。该命令直接将服务暴露给在主机操作系统上运行的任何程序。上述命令将检索在Minikube Kubernetes集群内运行的服务的URL(例如 http://
: ),您可以点击该URL在您的网络浏览器中与流程服务进行交互。或者,您可以使用以下命令测试端点: 注意: Minikube将使用其自己的外部端口而不是nodePort来监听服务。因此,请将
替换为上面获得的端口。 curl http://localhost:
/score --data '{"url":"https://play.google.com/store/apps/details?id=com.twitter.android"}' -X POST -H "Content-Type: application/json"
下一步#
尝试示例 这里.