
Serverless sur Kubernetes (Knative, OpenFaaS)
Découvrez comment exécuter des charges de travail Serverless (FaaS, scale-to-zero) sur Kubernetes avec des plateformes comme Knative et OpenFaaS, alliant flexibilité et contrôle.
Le paradigme Serverless rencontre l'orchestration Kubernetes
Le terme "Serverless" fait référence à un modèle d'exécution cloud où le fournisseur de cloud gère dynamiquement l'allocation et le provisionnement des serveurs. Les développeurs écrivent et déploient du code sans se soucier de l'infrastructure sous-jacente. Les caractéristiques clés incluent souvent le "scale-to-zero" (ne pas consommer de ressources lorsqu'il n'y a pas de trafic) et la facturation basée sur l'utilisation réelle (pay-as-you-go). Le modèle Function-as-a-Service (FaaS) est l'implémentation la plus connue du serverless.
Bien que les plateformes FaaS publiques (AWS Lambda, Google Cloud Functions, Azure Functions) soient populaires, de nombreuses organisations souhaitent bénéficier des avantages du modèle serverless tout en conservant le contrôle sur leur infrastructure et en évitant la dépendance vis-à-vis d'un fournisseur spécifique. Exécuter des charges de travail serverless sur Kubernetes offre cette possibilité : combiner la flexibilité du serverless avec la portabilité et la puissance de l'écosystème Kubernetes. Plusieurs plateformes open-source permettent de construire des expériences serverless sur Kubernetes.
Knative : Une plateforme pour construire des applications serverless
Knative (prononcé "kay-native") est une plateforme open-source basée sur Kubernetes pour construire, déployer et gérer des charges de travail serverless modernes. Initiée par Google avec des contributions d'acteurs majeurs, c'est maintenant un projet CNCF incubé. Knative fournit un ensemble de composants qui étendent Kubernetes pour offrir des fonctionnalités serverless clés.
Knative est composé de deux principaux modules :
- Knative Serving : Se concentre sur le déploiement et le service de conteneurs serverless. Il gère automatiquement le cycle de vie des charges de travail basées sur les requêtes, y compris le scale-to-zero rapide (et le scale-from-zero lors de la première requête), le routage du trafic (avec support pour les déploiements canary et blue/green via des révisions immuables), et l'abstraction des détails réseau. Il introduit des CRDs comme
Service(à ne pas confondre avec le Service K8s natif),Route,Configuration, etRevision. Sous le capot, Knative Serving orchestre des ressources Kubernetes comme les Deployments, ReplicaSets, Services, et s'appuie souvent sur une couche réseau comme Istio, Contour, ou Kourier pour gérer le trafic entrant. - Knative Eventing : Fournit les briques pour construire des applications serverless pilotées par les événements. Il permet de créer des systèmes où des producteurs d'événements (sources) peuvent envoyer des événements qui sont acheminés via des canaux (channels) ou des brokers vers des consommateurs (services Knative, services Kubernetes, etc.) qui y sont abonnés via des triggers. Cela permet de découpler les producteurs et les consommateurs et de construire des architectures événementielles robustes.
Avantages : Offre une expérience serverless riche (scale-to-zero, eventing, révisions), portable sur n'importe quel cluster Kubernetes, s'intègre bien avec l'écosystème (Istio, Tekton pour CI/CD). Idéal pour les API stateless, les webhooks, le traitement d'événements.
Considérations : Peut avoir une courbe d'apprentissage en raison de ses différentes composantes et CRDs. Les dépendances réseau (comme Istio) peuvent ajouter de la complexité.
OpenFaaS : Un framework axé sur les fonctions et la simplicité
OpenFaaS (Functions as a Service) est un autre projet open-source populaire qui vise à rendre le serverless simple pour les développeurs. Il permet de packager n'importe quel code (ou binaire) dans une image Docker pour en faire une fonction serverless, en mettant l'accent sur la facilité d'utilisation et une large compatibilité linguistique.
L'architecture d'OpenFaaS sur Kubernetes (via son provider `faas-netes`) comprend :
- API Gateway : Le point d'entrée unique pour toutes les fonctions. Elle gère l'authentification, le routage des requêtes vers les bonnes fonctions, la collecte de métriques (via Prometheus) et initie le scaling (en communiquant avec le provider).
- Provider (
faas-netes) : Le composant spécifique à Kubernetes qui interagit avec l'API Server pour créer/mettre à jour/supprimer les Deployments et Services correspondant aux fonctions déployées. - Watchdog : Un petit processus Go injecté dans chaque conteneur de fonction. Il sert de point d'entrée HTTP standardisé, reçoit la requête de la Gateway, puis la transmet au processus de la fonction via
stdin/stdoutou un port HTTP interne. Cela permet à n'importe quel exécutable de devenir une fonction OpenFaaS. - Queue Worker (NATS Streaming) : Permet les invocations asynchrones de fonctions. Les requêtes sont placées dans une file d'attente NATS et traitées ultérieurement par les instances de fonction disponibles.
Fonctionnement et Scaling : Les développeurs créent des fonctions en utilisant des modèles pré-définis (templates) pour différents langages ou en fournissant leur propre Dockerfile. Ils déploient ensuite ces fonctions via la CLI `faas-cli` ou l'interface utilisateur web. La Gateway route les appels et, en fonction de la charge (souvent mesurée par les requêtes par seconde via Alertmanager), le provider scale le nombre de réplicas du Deployment Kubernetes de la fonction. Le scale-to-zero n'est pas toujours activé par défaut dans la version communautaire mais peut être configuré ou est disponible dans les versions commerciales/pro.
Avantages : Très facile à démarrer, excellente expérience développeur avec `faas-cli` et les templates, supporte n'importe quel langage via Docker, dispose d'un "Store" (marketplace) de fonctions prêtes à l'emploi, bonne gestion des invocations synchrones et asynchrones.
Considérations : Le modèle de scaling par défaut est basé sur le nombre de réplicas du Deployment, le scale-to-zero peut nécessiter une configuration supplémentaire. Moins nativement intégré aux concepts d'eventing complexes que Knative.
Serverless sur Kubernetes : Flexibilité et contrôle
Le choix entre Knative et OpenFaaS (ou d'autres solutions comme Kubeless, Fission) dépend des besoins spécifiques. Knative offre une plateforme plus intégrée et puissante pour des charges de travail serverless variées avec un fort accent sur le scale-to-zero et l'eventing, au prix d'une complexité potentiellement plus élevée. OpenFaaS brille par sa simplicité, son expérience développeur axée sur les fonctions classiques et sa flexibilité grâce à Docker.
Dans tous les cas, exécuter des charges de travail serverless sur Kubernetes permet aux organisations de bénéficier de l'agilité et de l'efficacité du modèle serverless tout en gardant le contrôle de leur plateforme d'exécution, en tirant parti de leurs investissements existants dans Kubernetes et en évitant la dépendance vis-à-vis d'un seul fournisseur de cloud. C'est une tendance forte qui continue d'évoluer au sein de l'écosystème Cloud Native.