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. Die Bereitstellungen von containerisierten Funktions-Apps in Azure Container Apps, die mit verwalteten Kubernetes-Clustern in Azure ausgeführt wird, befindet sich derzeit in der Vorschauphase. Weitere Informationen finden Sie unter Azure Container Apps-Hosting von Azure Functions.

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-Befehls

  • Helm: 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 dies vergessen haben, können Sie func init erneut aus dem Stammverzeichnis Ihres Functions-Projekts aufrufen und dieses Mal die --docker-only-Option verwenden (wie im folgenden Beispiel dargestellt).

func init --docker-only

Weitere Informationen zur Generierung von Dockerfiles finden Sie in der func init-Referenz.

Um ein Image zu erstellen und Ihre Funktionen in Kubernetes bereitzustellen, führen Sie den folgenden Befehl aus:

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 Bereitstellungsbefehl bewirkt Folgendes:

  1. Das zuvor erstellte Dockerfile wird verwendet, um ein lokales Image für die Funktions-App zu erstellen.
  2. Das lokale Image wird markiert und an die Containerregistrierung gepusht, bei der der Benutzer angemeldet ist.
  3. Es wird ein Manifest erstellt und auf den Cluster angewandt. Dieses definiert eine Kubernetes-Deployment-Ressource, eine ScaledObject-Ressource und Secrets, einschließlich aus Ihrer Datei local.settings.json importierter Umgebungsvariablen.

Weitere Informationen finden Sie unter dem func kubernetes deploy-Befehl.

Bereitstellen einer Funktions-App aus einer privaten Registrierung

Der obige Flow funktioniert 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:

Unterstützte Trigger in KEDA

KEDA bietet Unterstützung für die folgenden Azure Functions-Trigger:

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: