Partager via


Combinaison de conteneurs et d’approches serverless

Conseil

Ce contenu est un extrait du livre électronique, Cloud Native .NET apps for Azure (Architecture d’applications .NET natives cloud pour Azure), disponible dans la documentation .NET ou au format PDF à télécharger gratuitement pour le lire hors connexion.

Miniature de la couverture du livre électronique Applications .NET natives cloud pour Azure.

Les applications natives cloud implémentent généralement des services qui tirent parti des conteneurs et de l’orchestration. Il est souvent possible d’exposer certains des services de l’application sous la forme de fonctions Azure. Toutefois, avec une application native cloud déployée sur Kubernetes, il serait intéressant de tirer parti de fonctions Azure dans ce même ensemble d’outils. Heureusement, vous pouvez envelopper (wrap) des fonctions Azure dans des conteneurs Docker et les déployer avec les mêmes processus et outils que le reste de votre application Kubernetes.

Quand est-il judicieux d’utiliser des conteneurs avec l’approche serverless ?

Votre fonction Azure n’a aucune connaissance de la plateforme sur laquelle elle est déployée. Pour certains scénarios, vous aurez peut-être des besoins spécifiques qui vous demanderont de personnaliser l’environnement sur lequel votre code de fonction s’exécutera. Vous aurez besoin d’une image personnalisée prenant en charge les dépendances ou une configuration non prise en charge par l’image par défaut. Dans ces cas, il est logique de déployer votre fonction dans un conteneur Docker personnalisé.

Quand devriez-vous éviter d’utiliser des conteneurs avec des fonctions Azure ?

Si vous souhaitez utiliser une facturation de la consommation, vous ne pouvez pas exécuter votre fonction dans un conteneur. De plus, si vous déployez votre fonction sur un cluster Kubernetes, vous ne bénéficierez plus de la mise à l’échelle intégrée fournie par Azure Functions. Vous devrez utiliser les fonctionnalités de mise à l’échelle de Kubernetes, décrites précédemment dans ce chapitre.

Comment combiner des conteneurs serverless et Docker

Pour envelopper une fonction Azure dans un conteneur Docker, installez Azure Functions Core Tools et exécutez la commande suivante  :

func init ProjectName --worker-runtime dotnet --docker

Une fois le projet créé, il comprend un fichier Dockerfile et le runtime worker configuré sur dotnet. Vous pouvez maintenant créer et tester votre fonction localement. Générez-la et exécutez-la en utilisant les commandes docker build et docker run. Pour obtenir des instructions détaillées permettant de commencer à créer des fonctions Azure avec la prise en charge de Docker, consultez le tutoriel Créer une fonction sur Linux à l’aide d’une image personnalisée.

Comment combiner approche serverless et Kubernetes avec KEDA

Dans ce chapitre, vous avez vu que la plateforme Azure Functions effectue automatiquement un scale-out pour répondre à la demande. Toutefois, lors du déploiement de fonctions conteneurisées sur AKS, vous perdez la fonctionnalité de mise à l’échelle intégrée. KEDA (Kubernetes-based Event Driven) arrive à la rescousse. Il permet une mise à l’échelle automatique affinée pour event-driven Kubernetes workloads, y compris les fonctions conteneurisées.

KEDA fournit une fonctionnalité de mise à l’échelle pilotée par des événements pour le runtime des fonctions dans un conteneur Docker. KEDA peut effectuer un scale-out de zéro instance (quand aucun événement ne se produit) à n instances, en fonction de la charge. Il offre une mise à l’échelle automatique en exposant des métriques personnalisées à l’utilitaire de mise à l’échelle automatique de Kubernetes (Horizontal Pod Autoscaler). L’utilisation de conteneurs Functions avec KEDA permet de répliquer des fonctionnalités de fonction serverless dans n’importe quel cluster Kubernetes.

À noter que le projet KEDA est maintenant géré par la CNCF (Cloud Native Computing Foundation).