Flow mit Kubernetes bereitstellen#
Zum Bereitstellen eines Flows mit Kubernetes sind vier Schritte erforderlich
Erstellen Sie den Flow im Docker-Format.
Erstellen Sie das Docker-Image.
Erstellen Sie eine Kubernetes-Deployment-YAML-Datei.
Wenden Sie das Deployment an.
Flow im Docker-Format erstellen#
Beachten Sie, dass alle abhängigen Verbindungen erstellt werden müssen, bevor sie im Docker-Format erstellt werden.
# 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
Verwenden Sie den folgenden Befehl, um einen Flow im Docker-Format zu erstellen
pf flow build --source <path-to-your-flow-folder> --output <your-output-dir> --format docker
Klicken Sie auf die folgende Schaltfläche, um einen Flow im Docker-Format zu erstellen: 
Beachten Sie, dass alle abhängigen Verbindungen erstellt werden müssen, bevor sie als Docker exportiert werden.
Ordnerstruktur im Docker-Format#
Die exportierte Dockerfile und ihre Abhängigkeiten befinden sich im selben Ordner. Die Struktur ist wie folgt:
flow: Der Ordner enthält alle Flow-Dateien
…
connections: Der Ordner enthält YAML-Dateien zum Erstellen aller zugehörigen Verbindungen
…
Dockerfile: Die Dockerfile zum Erstellen des Images
start.sh: Das Skript, das im
CMDderDockerfileverwendet wird, um den Dienst zu startenrunit: Der Ordner enthält alle Runit-Skripte
…
settings.json: Eine JSON-Datei zum Speichern der Einstellungen des Docker-Images
README.md: Kurze Einführung in die Dateien
Bereitstellung mit Kubernetes#
Wir verwenden das web-classification-Beispiel, um zu zeigen, wie mit Kubernetes bereitgestellt wird.
Stellen Sie sicher, dass Sie die Verbindung erstellt haben, die für den Flow erforderlich ist. Andernfalls können Sie sich auf die Einrichtung der Verbindung für web-classification beziehen.
Stellen Sie außerdem sicher, dass Sie alle erforderlichen Abhängigkeiten installiert haben. Eine umfassende Liste der Voraussetzungen und Installationsanweisungen finden Sie im Abschnitt „Voraussetzungen“ in der README-Datei von web-classification.
Docker-Image erstellen#
Wie bei anderen Dockerfiles müssen Sie das Image zuerst erstellen. Sie können das Image mit einem beliebigen Namen versehen. In diesem Beispiel verwenden wir web-classification-serve.
Führen Sie dann den folgenden Befehl aus
cd <your-output-dir>
docker build . -t web-classification-serve
Kubernetes-Deployment-YAML-Datei erstellen.#
Die Kubernetes-Deployment-YAML-Datei dient als Leitfaden für die Verwaltung Ihres Docker-Containers in einem Kubernetes-Pod. Sie gibt wichtige Informationen wie das Container-Image, Portkonfigurationen, Umgebungsvariablen und verschiedene Einstellungen klar an. Nachfolgend finden Sie eine einfache Deployment-Vorlage, die Sie einfach an Ihre Bedürfnisse anpassen können.
Hinweis: Sie müssen das Geheimnis zuerst mit base64 kodieren und <encoded_secret> als ‚open-ai-connection-api-key‘ in der Deployment-Konfiguration eingeben. Sie können zum Beispiel die folgenden Befehle unter Linux ausführen
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
Deployment anwenden.#
Bevor Sie Ihre Anwendung bereitstellen können, stellen Sie sicher, dass Sie einen Kubernetes-Cluster eingerichtet und kubectl installiert haben, falls dies noch nicht geschehen ist. In dieser Dokumentation verwenden wir Minikube als Beispiel. Um den Cluster zu starten, führen Sie den folgenden Befehl aus
minikube start
Sobald Ihr Kubernetes-Cluster betriebsbereit ist, können Sie mit der Bereitstellung Ihrer Anwendung fortfahren, indem Sie den folgenden Befehl verwenden
kubectl apply -f deployment.yaml
Dieser Befehl erstellt die notwendigen Pods, um Ihre Anwendung innerhalb des Clusters auszuführen.
Hinweis: Sie müssen <pod_name> unten durch Ihren spezifischen pod_name ersetzen. Sie können diesen abrufen, indem Sie kubectl get pods -n web-classification ausführen.
Flow-Service-Protokolle des Containers abrufen#
Der Befehl kubectl logs wird verwendet, um die Protokolle eines Containers abzurufen, der in einem Pod ausgeführt wird. Dies kann für die Fehlerbehebung, Überwachung und Diagnose von Anwendungen, die in einem Kubernetes-Cluster bereitgestellt werden, nützlich sein.
kubectl -n <your-namespace> logs <pod-name>
Verbindungen#
Wenn der Dienst Verbindungen beinhaltet, werden alle zugehörigen Verbindungen als YAML-Dateien exportiert und in Containern neu erstellt. Geheimnisse in Verbindungen werden nicht direkt exportiert. Stattdessen exportieren wir sie als Referenz auf Umgebungsvariablen.
$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
Sie müssen die Umgebungsvariablen im Container einrichten, damit die Verbindungen funktionieren.
Testen des Endpunkts#
Option 1
Nachdem Sie den Dienst gestartet haben, können Sie eine Verbindung zwischen einem lokalen Port und einem Port im Pod herstellen. Dies ermöglicht es Ihnen, den Endpunkt bequem von Ihrem lokalen Terminal aus zu testen. Führen Sie dazu den folgenden Befehl aus
kubectl port-forward <pod_name> <local_port>:<container_port> -n <your-namespace>
Mit der Portweiterleitung können Sie den curl-Befehl verwenden, um den Endpunkt-Test zu starten
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"
Option 2
minikube service web-classification-service --url -n <your-namespace>läuft als Prozess und erstellt einen Tunnel zum Cluster. Der Befehl stellt den Dienst direkt für jedes Programm zur Verfügung, das auf dem Host-Betriebssystem ausgeführt wird.Der obige Befehl ruft die URL eines Dienstes ab, der innerhalb eines Minikube Kubernetes-Clusters ausgeführt wird (z. B. http://
:<assigned_port>), den Sie anklicken können, um mit dem Flow-Dienst in Ihrem Webbrowser zu interagieren. Alternativ können Sie den folgenden Befehl zum Testen des Endpunkts verwenden Hinweis: Minikube verwendet seinen eigenen externen Port anstelle von nodePort, um auf den Dienst zu lauschen. Ersetzen Sie also <assigned_port> durch den oben erhaltenen 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"
Nächste Schritte#
Probieren Sie das Beispiel hier aus.