La réalisation d'architectures serverless avec ou sans Kubernetes présente des différences significatives, principalement en termes de complexité de gestion, de contrôle et d'évolutivité. On se pose souvent la question, dois-je faire du full SAAS en utilisant les services proposés par les providers Cloud, ou tout contrôler moi même en utilisant un cluster kubernetes. Nous allons essayé de faire un petit comparatif :
Serverless avec Kubernetes en utilisant Knative
L'utilisation de Knative sur Kubernetes pour déployer des architectures serverless offre un ensemble de fonctionnalités avancées qui améliorent significativement la personnalisation, la portabilité, la gestion de l'infrastructure, l'intégration avec l'écosystème Kubernetes, et la scalabilité.
Contrôle et Personnalisation
- Environnement d'Exécution : Avec Knative sur Kubernetes, vous pouvez personnaliser l'environnement d'exécution des applications à un niveau très détaillé, y compris la gestion des ressources CPU et mémoire, les variables d'environnement et les configurations de sécurité.
- Mise en réseau : Knative offre des options avancées pour la configuration réseau, comme les règles d'ingress, les politiques de sécurité réseau et la gestion des services internes et externes. Il s’appuie sur des services mesh tel que istio, Kourier.
- Sécurité : Vous avez le contrôle sur les aspects de sécurité, tels que les stratégies de Role-Based Access Control (RBAC), les secrets et les certificats, et la configuration des politiques de sécurité des conteneurs.
Portabilité
- Multi-cloud et On-premise : Les applications serverless développées avec Knative peuvent être déployées uniformément sur différents clouds (AWS, GCP, Azure, etc.) ou sur des infrastructures on-premise, tant que ces environnements prennent en charge Kubernetes.
- Indépendance vis-à-vis des Fournisseurs : Cela réduit la dépendance à un fournisseur cloud spécifique, permettant une flexibilité et une adaptation aux changements de fournisseurs ou de politiques.
- Environnement de développement : Il est possible de rapidement déployer un environnement Knative sur une infrastructure local pour les équipes de développements afin qu’ils puissent tester leur code en toute simplicité.
Gestion de l'Infrastructure
- Complexité Technique : Gérer Kubernetes requiert une compréhension approfondie de ses composants - pods, services, volumes, namespaces, etc. Cela implique une courbe d'apprentissage plus rapide pour le déploiement et la maintenance. Knative apporte une surcouche qui permet de faciliter le déploiement sur Kubernetes.
- Automatisation et Orchestration : Kubernetes facilite l'automatisation et l'orchestration des conteneurs, y compris la réparation automatique, le rolling update, et la gestion du cycle de vie.
Intégration avec l'Écosystème Kubernetes
- Monitoring et Logging : Intégrez avec des outils comme Prometheus pour le monitoring et Elasticsearch ou Fluentd pour la journalisation.
- CI/CD et DevOps : Utilisez des outils tels que Azure DevOps, Jenkins, GitLab CI et Argo CD pour l'intégration et le déploiement continus.
Scalabilité Granulaire
- Auto-scaling : Knative offre un scaling dynamique et précis, y compris la capacité de scaling à zéro, ce qui signifie que les applications peuvent s'échelonner en réponse à la demande et réduire à aucune instance lorsqu'elles ne sont pas utilisées.
- Gestion des Ressources : Vous pouvez définir des politiques de scaling personnalisées basées sur des métriques telles que le nombre de requêtes par seconde, l'utilisation de la CPU ou de la mémoire.
Serverless sans Kubernetes
Lorsque l'on parle de développement serverless, choisir entre des solutions basées ou non sur Kubernetes peut avoir un impact considérable sur votre flux de travail. Pour les développeurs, travailler avec des plateformes telles que Cloud Function de Google, AWS Lambda ou Azure Functions présente un avantage majeur : la simplification radicale du processus de déploiement et de gestion. Ces plateformes prennent en charge l'infrastructure sous-jacente, ce qui permet aux développeurs de se concentrer entièrement sur la rédaction de code efficace sans se soucier de la configuration et de la maintenance des serveurs. Cela représente une réduction significative de la charge opérationnelle, libérant du temps et des ressources pour l'innovation et le développement de fonctionnalités. On va essayer de détailler ces points :
Simplicité et Facilité de Démarrage
- Déploiement Automatisé : Les plateformes comme AWS Lambda et Azure Functions gèrent automatiquement le déploiement des fonctions. Les développeurs n'ont qu'à fournir le code, et la plateforme s'occupe du reste, y compris de la sélection de l'environnement d'exécution approprié.
- Absence de Gestion des Serveurs : Ces plateformes éliminent la nécessité de gérer des serveurs ou des clusters, comme c'est le cas avec Kubernetes, réduisant ainsi la charge opérationnelle pour les développeurs. Et permet également de s’abstraire de la complexité d’implémentation.
Moins de Contrôle sur l'Environnement d'Exécution
- Environnements Préconfigurés : Les environnements d'exécution sont préconfigurés par le fournisseur de cloud. Cela limite la personnalisation au niveau de l'OS, des logiciels intermédiaires et des configurations réseau.
- Restrictions de Runtime : Les fonctions doivent généralement être écrites dans des langages de programmation spécifiques et dans les limites des runtime supportés par la plateforme.
Dépendance au Fournisseur de Cloud
- Verrouillage de Plateforme : En utilisant des services spécifiques d'un fournisseur, les applications deviennent dépendantes de cet environnement cloud, ce qui peut compliquer leur migration vers un autre fournisseur.
- APIs et Services Propriétaires : Les fonctions peuvent utiliser des services et des APIs spécifiques au fournisseur, renforçant cette dépendance.
Facilité d'Utilisation et Maintenance
- Gestion Automatisée : Le fournisseur gère la scalabilité, la haute disponibilité, la tolérance aux pannes et la maintenance, permettant aux développeurs de se concentrer sur le code.
- Mises à jour et Sécurité : Les mises à jour de l'infrastructure et les mesures de sécurité sont également gérées par le fournisseur.
Scaling Automatique et Gestion des Ressources
- Élasticité : Les plateformes ajustent automatiquement les ressources en fonction de la charge, permettant une scalabilité efficace sans intervention manuelle.
- Optimisation des coûts : La facturation se base sur l'utilisation réelle, avec des modèles de tarification à la demande ou basés sur le nombre d'exécutions.
Quoi choisir ?
Le choix entre le serverless sur Kubernetes avec Knative et les solutions serverless natives du cloud n’est pas toujours simple. Il faut prendre en compte le contexte de votre implémentation. La décision ne se résume pas seulement entre un choix entre la complexité et contrôle pour les architectures d'entreprise importantes, ou la simplicité et rapidité pour le développement de solutions plus petites. Avant toute prise de décision, il faut se poser les bonnes questions et surtout concevoir son architecture avant de prendre son choix. Pour moi :
Serverless avec Kubernetes en utilisant Knative
Knative, utilisé sur Kubernetes, est particulièrement adapté pour les grandes architectures d'entreprise nécessitant un contrôle approfondi et une personnalisation étendue. Il offre un niveau de contrôle élevé sur l'environnement d'exécution, la mise en réseau et la sécurité, ce qui est crucial pour les entreprises ayant des besoins spécifiques et complexes. La portabilité offerte par Kubernetes permet également aux entreprises de déployer des applications sur différents clouds ou sur site. Cependant, cette approche exige une compréhension approfondie de Kubernetes, augmentant la complexité technique et la courbe d'apprentissage.
Serverless sans Kubernetes (Cloud Native)
En revanche, les solutions serverless natives du cloud comme AWS Lambda et Azure Functions sont idéales pour un développement rapide et efficace de solutions plus petites. Elles simplifient considérablement le processus de déploiement et de gestion, permettant aux développeurs de se concentrer sur le code sans se soucier de l'infrastructure sous-jacente. Bien qu'elles offrent moins de contrôle sur l'environnement d'exécution et créent une dépendance vis-à-vis du fournisseur de cloud, elles sont parfaites pour les projets nécessitant une mise sur le marché rapide et une gestion simplifiée.
En résumé, Knative sur Kubernetes est plus adapté pour les entreprises recherchant une solution serverless robuste et personnalisable pour des architectures complexes, tandis que les solutions serverless natives du cloud sont idéales pour les développeurs qui cherchent à déployer rapidement des applications moins complexes sans la charge opérationnelle de la gestion de l'infrastructure.
Dans le prochain article nous détaillerons qu’est-ce que Knative et comment nous l’implémentons au sein de Winzana pour nos projets. Si vous avez des questions n’hésitez pas à nous contacter.