Azure Functions in Kubernetes mit KEDA
Die Azure Functions-Runtime bietet Flexibilität im Hinblick auf Art und Ort des Hostings. KEDA (Kubernetes-based Event Driven Autoscaling, [Kubernetes-basierte ereignisgesteuerte automatische Skalierung]) lässt sich nahtlos an die Azure Functions-Runtime und -Tools koppeln, um eine ereignisgesteuerte Skalierung in Kubernetes bereitzustellen.
Wichtig
Das Ausführen ihrer containerisierten Funktions-Apps auf Kubernetes, entweder mithilfe von KEDA oder durch direkte Bereitstellung, ist ein Open-Source-Angebot, das Sie kostenlos nutzen können. Bestmögliche Unterstützung wird von Mitwirkenden und von der Community bereitgestellt, indem GitHub Issues im Azure Functions-Repository verwendet werden. Verwenden Sie diese Issues, um Fehler zu melden und Featureanforderungen azu stellen.
Für vollständig unterstützte Kubernetes-Bereitstellungen sollten Sie stattdessen Azure-Container-Apps als Hosting von Azure-Funktionen in Betracht ziehen.
Funktionsweise Kubernetes-basierter Funktionen
Der Azure Functions-Dienst besteht aus zwei Komponenten: einer Runtime und einem Skalierungscontroller. Die Functions-Runtime führt Ihren Code aus. Die Runtime enthält Logik zum Auslösen, Protokollieren und Verwalten von Funktionsausführungen. Die Azure Functions-Runtime kann überall ausgeführt werden. Die andere Komponente ist ein Skalierungscontroller. Der Skalierungscontroller überwacht die Rate der Ereignisse, die Ihre Funktion nutzen möchten, und skaliert proaktiv die Anzahl von Instanzen, die Ihre App ausführen. Weitere Informationen finden Sie unter Skalierung und Hosting von Azure Functions.
Die Kubernetes-basierte Version stellt die Functions-Runtime in einem Docker-Container bereit, während die ereignisgesteuerte Skalierung über KEDA erfolgt. KEDA kann eine horizontale Herunterskalierung auf 0 Instanzen (wenn keine Ereignisse stattfinden) und eine horizontale Hochskalierung auf bis zu n Instanzen durchführen. Zu diesem Zweck macht KEDA benutzerdefinierte Metriken für die automatische Kubernetes-Skalierung (automatische horizontale Podskalierung) verfügbar. Durch Verwendung von Functions-Container mit KEDA können serverlose Funktionen in jedem Kubernetes-Cluster repliziert werden. Diese Funktionen können auch mithilfe des Features für virtuelle AKS-Knoten (Azure Kubernetes Service) für serverlose Infrastrukturen bereitgestellt werden.
Verwalten von KEDA und Functions in Kubernetes
Um Functions in Ihrem Kubernetes-Cluster ausführen zu können, müssen Sie die KEDA-Komponenten installieren. Sie können die Komponente auf eine der folgenden Arten installieren:
Azure Functions Core Tools: mithilfe des
func kubernetes install
-BefehlsHelm: Es gibt verschiedene Möglichkeiten, KEDA in einem Kubernetes-Cluster, einschließlich Helm, zu installieren. Bereitstellungsoptionen sind auf der KEDA-Site dokumentiert.
Bereitstellen einer Funktions-App in Kubernetes
Sie können jede beliebige Funktions-App in einem Kubernetes-Cluster bereitstellen, in dem KEDA ausgeführt wird. Da Ihre Funktionen in einem Docker-Container ausgeführt werden, benötigt Ihr Projekt ein Dockerfile. Sie können das Dockerfile mithilfe der --docker
-Option erstellen, wenn Sie func init
aufrufen, um das Projekt zu erstellen. Wenn Sie vergessen haben, Ihre Dockerfile-Datei zu erstellen, können Sie func init
immer wieder aus dem Stammverzeichnis Ihres Codeprojekts aufrufen.
(Optional) Wenn Sie Ihre Dockerfile-Datei erstellen müssen, verwenden Sie den Befehl
func init
mit der Option--docker-only
:func init --docker-only
Weitere Informationen zur Generierung von Dockerfiles finden Sie in der
func init
-Referenz.Verwenden Sie den Befehl
func kubernetes deploy
, um Ihr Image zu erstellen und Ihre containerisierte Funktions-App in Kubernetes bereitzustellen:func kubernetes deploy --name <name-of-function-deployment> --registry <container-registry-username>
In diesem Beispiel ersetzen Sie
<name-of-function-deployment>
durch den Namen Ihrer Funktions-App. Der Befehl „deploy” führt die folgenden Aufgaben aus:- Das zuvor erstellte Dockerfile wird verwendet, um ein lokales Image für Ihre containerisierte Funktions-App zu erstellen.
- Das lokale Image wird markiert und an die Containerregistrierung gepusht, bei der der Benutzer angemeldet ist.
- Es wird ein Manifest erstellt und auf den Cluster angewandt. Dieses definiert eine Kubernetes-
Deployment
-Ressource, eineScaledObject
-Ressource undSecrets
, einschließlich aus Ihrer Dateilocal.settings.json
importierter Umgebungsvariablen.
Bereitstellen einer Funktions-App aus einer privaten Registrierung
Die vorherigen Bereitstellungsschritte funktionieren auch für private Registrierungen. Wenn Sie Ihr Containerimage aus einer privaten Registrierung abrufen, schließen Sie das --pull-secret
-Flag ein. Dieses verweist auf den geheimen Kubernetes-Schlüssel, der die Anmeldeinformationen für die private Registrierung beim Ausführen von func kubernetes deploy
enthält.
Entfernen einer Funktions-App aus Kubernetes
Nach dem Bereitstellen können Sie eine Funktion entfernen, indem Sie die zugehörigen erstellten Deployment
-, ScaledObject
- und Secrets
-Elemente entfernen.
kubectl delete deploy <name-of-function-deployment>
kubectl delete ScaledObject <name-of-function-deployment>
kubectl delete secret <name-of-function-deployment>
Deinstallieren von KEDA aus Kubernetes
Sie können KEDA auf eine der folgenden Arten aus Ihrem Cluster entfernen:
Azure Functions Core Tools: mithilfe des
func kubernetes remove
-Befehls.Helm: Befolgen Sie die Schritte zur Deinstallation auf der KEDA-Seite.
Unterstützte Trigger in KEDA
KEDA bietet Unterstützung für die folgenden Azure Functions-Trigger:
- Azure Storage-Warteschlangen
- Azure Service Bus
- Azure Event / IoT Hubs
- Apache Kafka
- RabbitMQ-Warteschlange
HTTP-Triggerunterstützung
Sie können Azure Functions verwenden, die HTTP-Trigger verfügbar machen, KEDA verwaltet diese jedoch nicht direkt. Sie können den prometheus-Trigger von KEDA nutzen, um die HTTP-Azure Functions von 1 bis n
Instanzen zu skalieren.
Nächste Schritte
Weitere Informationen finden Sie in den folgenden Ressourcen: