Azure Functions sur Kubernetes avec KEDA

Le runtime Azure Functions fournit une flexibilité d’hébergement où et comme vous le souhaitez. KEDA (Kubernetes-based Event Driven Autoscaling, ou mise à l’échelle automatique pilotée par événement basée sur Kubernetes) fonctionne parfaitement avec le runtime et les outils Azure Functions pour fournir une échelle pilotée par événement dans Kubernetes.

Important

L’exécution de vos applications de fonctions conteneurisées sur Kubernetes, que ce soit en utilisant KEDA ou par déploiement direct, est un effort open-source que vous pouvez utiliser gratuitement. Le support est assuré par les contributeurs et la communauté en utilisant les questions GitHub dans le référentiel Azure Functions. Veuillez utiliser ces questions pour signaler des bogues et demander des fonctionnalités. Les déploiements d’applications de fonctions conteneurisées vers Azure Container Apps, qui s’exécute sur des clusters Kubernetes managés dans Azure, est actuellement en préversion. Pour plus d’informations, consultez Hébergement Azure Container Apps d’Azure Functions.

Fonctionnement des fonctions basées sur Kubernetes

Le service Azure Functions se compose de deux composants clés : un runtime et un contrôleur d’échelle. Le runtime Functions s’exécute et exécute votre code. Le runtime inclut une logique sur le déclenchement, la consignation et la gestion des exécutions de fonction. Le runtime Azure Functions peut s’exécuter n’importe où. L’autre composant est un contrôleur d’échelle. Le contrôleur d’échelle supervise le taux d’événements qui ciblent votre fonction et met proactivement à l’échelle le nombre d’instances exécutant votre application. Pour en savoir plus, voir Mise à l’échelle et hébergement d’Azure Functions.

Functions basé sur Kubernetes fournit le runtime Functions dans un conteneur Docker avec mise à l’échelle piloté par événement via KEDA. KEDA peut faire l’objet d’un scale-in à 0 instance (quand aucun événement ne se produit) ou d’un scale-out à n instances. Pour cela, il expose des métriques personnalisées de l’autoscaler Kubernetes (autoscaler de pods élastique). L’utilisation de conteneurs Functions avec KEDA permet de répliquer des fonctionnalités de fonction serverless dans n’importe quel cluster Kubernetes. Ces fonctions peuvent également être déployées à l’aide de la fonctionnalité de nœuds virtuels Azure Kubernetes Service (AKS) pour l’infrastructure serverless.

Gestion de KEDA et des fonctions dans Kubernetes

Pour exécuter Functions sur votre cluster Kubernetes, vous devez installer le composant KEDA. Vous pouvez installer ce composant de l’une des façons suivantes :

  • Azure Functions Core Tools : en utilisant la commande func kubernetes install.

  • Helm : il existe plusieurs façons d’installer KEDA dans un cluster Kubernetes, y compris Helm. Les options de déploiement sont documentées sur le site KEDA.

Déploiement d’une application de fonction sur Kubernetes

Vous pouvez déployer n’importe quelle application de fonction sur un cluster Kubernetes en exécutant KEDA. Dans la mesure où vos fonctions s’exécutent dans un conteneur Docker, votre projet nécessite un fichier Dockerfile. Vous pouvez créer un Dockerfile en utilisant l’option --docker lors de l’appel de func init pour créer le projet. Si vous avez oublié de faire cela, vous pouvez toujours appeler func init de nouveau à partir de la racine de votre projet Functions, cette fois en utilisant l’option --docker-only, comme montré dans l’exemple suivant.

func init --docker-only

Pour en savoir plus sur la génération du fichier Dockerfile, consultez la référence func init.

Pour créer une image et déployer vos fonctions sur Kubernetes, exécutez la commande suivante :

func kubernetes deploy --name <name-of-function-deployment> --registry <container-registry-username>

Dans cet exemple, remplacez <name-of-function-deployment> par le nom de votre application de fonction.

La commande deploy exécute les actions suivantes :

  1. Le fichier Dockerfile créé plus tôt est utilisé afin de générer une image locale pour l’application de fonction.
  2. L’image locale est étiquetée et envoyée au registre de conteneurs dans lequel l’utilisateur est connecté.
  3. Un manifeste est créé et appliqué au cluster qui définit une ressource Kubernetes Deployment, une ressource ScaledObject et Secrets, englobant les variables d’environnement importées du fichier local.settings.json.

Pour plus d’informations, reportez-vous à la commande func kubernetes deploy.

Déployer une application de fonction à partir d’un registre privé

Le flux ci-dessus fonctionne également pour les registres privés. Si vous extrayez votre image de conteneur à partir d’un registre privé, incluez l’indicateur --pull-secret qui référence le secret Kubernetes contenant les informations d’identification de registre privé lors de l’exécution de func kubernetes deploy.

Suppression d’une application de fonction de Kubernetes

Après le déploiement, vous pouvez supprimer une fonction en supprimant le Deployment associé, ScaledObject, un Secrets créé.

kubectl delete deploy <name-of-function-deployment>
kubectl delete ScaledObject <name-of-function-deployment>
kubectl delete secret <name-of-function-deployment>

Désinstallation de KEDA de Kubernetes

Vous pouvez supprimer des KEDA de votre cluster de l’une des manières suivantes :

Déclencheurs pris en charge dans KEDA

KEDA prend en charge les déclencheurs Azure Function suivants :

Prise en charge de déclencheur HTTP

Vous pouvez utiliser Azure Functions qui exposent les déclencheurs HTTP, mais KEDA ne les gère pas directement. Vous pouvez utiliser le déclencheur KEDA Prometheus pour mettre à l’échelle les Azure Functions HTTP de 1 à n instances.

Étapes suivantes

Pour plus d’informations, consultez les ressources suivantes :