Partage via


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.

Pour des déploiements Kubernetes entièrement pris en charge, envisagez plutôt l’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 évoluer jusqu'à zéro instance (lorsqu'aucun événement ne se produit) et jusqu'à 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 créer votre Dockerfile, vous pouvez toujours l'appeler func init à nouveau depuis la racine de votre projet de code.

  1. (Facultatif) Si vous devez créer votre Dockerfile, utilisez la commande func init avec l'option --docker-only :

    func init --docker-only
    

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

  2. Utilisez la commande func kubernetes deploy pour créer votre image et déployer votre application de fonction conteneurisée sur Kubernetes :

    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 de déploiement exécute ces tâches :

    • Le Dockerfile créé précédemment est utilisé pour créer une image locale pour votre application de fonction conteneurisée.
    • L’image locale est étiquetée et envoyée au registre de conteneurs dans lequel l’utilisateur est connecté.
    • 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.

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

Les étapes de déploiement précédentes fonctionnent également pour les registres privés. Si vous extrayez votre image de conteneur à partir d'un registre privé, incluez l'indicateur --pull-secret qui fait référence au secret Kubernetes contenant les informations d'identification du registre privé lors de l'exécution 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 faire évoluer les Azure Functions HTTP d’une à plusieurs instances n.

Étapes suivantes

Pour plus d’informations, consultez les ressources suivantes :