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.
(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
.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 ressourceScaledObject
etSecrets
, englobant les variables d’environnement importées du fichierlocal.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 :
Azure Functions Core Tools : en utilisant la commande
func kubernetes remove
.Helm : reportez-vous aux étapes de désinstallation sur le site KEDA.
Déclencheurs pris en charge dans KEDA
KEDA prend en charge les déclencheurs Azure Function suivants :
- Files d’attente Stockage Azure
- Azure Service Bus
- Azure Event / IoT Hubs
- Apache Kafka
- File d’attente RabbitMQ
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 :