Qu’est-ce que CaaS – Conteneurs en tant que service ?

Couverture des conteneurs en tant que service

Dans cet article, nous parlerons des conteneurs en tant que service (CaaS). Il s’agit de l’un des modèles de cloud les plus récents mais les plus puissants. Vous découvrirez ses principales fonctionnalités, ses avantages et ses inconvénients, comment il se compare aux autres modèles de cloud et comment déployer une application simple à l’aide de conteneurs.

Contents

Principaux enseignements

  • CaaS facilite le développement et le déploiement en toute transparence grâce à des fonctionnalités intégrées.
  • Le CaaS offre une grande évolutivité et une grande portabilité, ce qui permet d’éviter le verrouillage des fournisseurs.
  • Les limites du CaaS sont notamment les risques potentiels en matière de sécurité et la courbe d’apprentissage abrupte.

Qu’est-ce que les conteneurs en tant que service ?

La définition de CaaS (Containers as a Service) est un modèle d’informatique en nuage qui permet aux développeurs de télécharger, de construire, de mettre à l’échelle et de gérer des conteneurs.

Les conteneurs DevOps sont des paquets exécutables légers et autonomes qui comprennent tout ce qui est nécessaire à l’exécution d’une application. Il s’agit du moteur d’exécution, du code, des bibliothèques, des fichiers de configuration, etc. Les conteneurs sont très portables, de petite taille et efficaces.

En utilisant CaaS, les développeurs et les équipes d’exploitation informatique n’ont pas à se préoccuper de l’infrastructure sous-jacente. Au lieu de cela, ils peuvent penser à un niveau beaucoup plus élevé.

Il leur suffit de coder l’application, de la dockeriser et de l’envoyer dans le nuage. Le fournisseur de services en nuage s’occupe alors de tout le reste, comme la mise à l’échelle, l’équilibrage de la charge et la surveillance !

En outre, CaaS est excellent car il favorise le développement agile, prend en charge l’architecture microservice et est extrêmement utile pour créer rapidement des applications hautement évolutives.

Quelles sont les principales fonctionnalités des conteneurs en tant que service ?

Il n’existe pas de spécification officielle définissant les fonctionnalités qu’un CaaS doit inclure. Elles diffèrent d’un fournisseur à l’autre. Néanmoins, les fonctionnalités les plus élémentaires des conteneurs en tant que service sont les suivantes :

  • Exécution du conteneur (responsable de l’exécution de vos applications conteneurisées)
  • Registre de conteneurs (permet de stocker et de distribuer des images Docker déjà construites)
  • Mise à l’échelle automatique (augmentation ou diminution du nombre de conteneurs en fonction du trafic)
  • Système CI/CD intégré (tire votre code d’un système VCS tel que GitHub ou GitLab)
  • Répartition de la charge (répartit le trafic entre plusieurs conteneurs pour améliorer les performances)
  • Surveillance et journalisation (offre des capacités avancées de surveillance des conteneurs)

Quels sont les avantages des conteneurs en tant que service ?

Développement et déploiement plus rapides

En utilisant CaaS, vous pouvez accélérer considérablement votre processus de développement et de déploiement de logiciels. Les conteneurs facilitent la mise en place d’environnements de développement locaux pour les développeurs en phase d’intégration. Il leur suffit d’exécuter une ou deux commandes au lieu d’installer un grand nombre de dépendances ou de manipuler les paramètres du système d’exploitation.

En outre, une fois que votre projet est conteneurisé, il peut être facilement déployé auprès de n’importe quel fournisseur de CaaS.

Efficacité des ressources

Les conteneurs sont par nature respectueux des ressources. Ils sont conçus pour utiliser efficacement les ressources du système telles que l’unité centrale, la mémoire et le stockage. Avec les conteneurs, vous pouvez généralement exécuter plus d’applications avec moins de ressources système. Par rapport aux machines virtuelles, les conteneurs sont plus optimisés en termes de ressources.

Portabilité

Les applications conteneurisées sont très portables car elles ne dépendent pas du système d’exploitation ou du matériel sous-jacent. Grâce à CaaS, vous n’aurez plus jamais le problème du “ça tourne sur ma machine”.

En outre, les conteneurs éliminent le risque de verrouillage du fournisseur. Si vous n’êtes pas satisfait de votre fournisseur actuel, vous pouvez facilement passer d’un fournisseur à l’autre sans trop modifier votre code.

Évolutivité

Les conteneurs associés à des logiciels d’orchestration tels que Kubernetes sont très évolutifs. La plupart des fournisseurs de CaaS intègrent des capacités de mise à l’échelle automatique, d’équilibrage de la charge, etc. Cela leur permet de s’adapter à n’importe quel trafic et de réduire rapidement l’échelle une fois que le pic de trafic est terminé.

Fonctionnement simplifié

CaaS comble le fossé entre l’environnement de développement et de production. En outre, il simplifie le processus DevOps en offrant un système CI/CD intégré, qui s’intègre à votre système VCS.

Mieux encore, CaaS vous permettra de réduire considérablement vos coûts puisque vous n’aurez plus besoin d’administrateurs système ni d’ingénieurs DevOps.

Quelles sont les limites des conteneurs en tant que service ?

Problèmes de sécurité

Les conteneurs offrent une isolation et une sécurité moindres que les machines virtuelles puisqu’ils partagent le même noyau système. Cela peut constituer un risque potentiel pour la sécurité. Si vous exécutez les processus de votre conteneur Docker en tant que root, un pirate pourrait s’échapper du conteneur et prendre le contrôle du système hôte.

Manque de contrôle

Les plateformes CaaS offrent généralement un niveau de contrôle inférieur à celui des autres modèles de cloud. Les clients ne peuvent pas régler avec précision les machines sur lesquelles leurs conteneurs s’exécutent ou configurer l’évolution de leurs applications.

Courbe d’apprentissage

Le modèle des conteneurs en tant que service est plus difficile à mettre en œuvre que le PaaS ou le BaaS. Il nécessite de nombreuses connaissances techniques en matière de programmation, de technologie de conteneurisation, de Docker, etc. La courbe d’apprentissage est plus raide, mais sa maîtrise peut vous faire gagner beaucoup de temps et d’argent.

Persistance des données

Les conteneurs sont conçus pour être sans état. Ils ne doivent pas être utilisés pour stocker des fichiers, des bases de données ou quoi que ce soit d’autre qui nécessite la persistance des données. En utilisant CaaS, vous devrez utiliser un service tiers pour héberger des fichiers, comme AWS S3, Google Cloud Storage, etc. En ce qui concerne la base de données, vous pouvez opter pour une solution de base de données gérée.

Quel rôle jouent Docker et Kubernetes dans une plateforme CaaS ?

Docker et Kubernetes jouent un rôle crucial dans la plupart des plateformes CaaS.

Docker est une plateforme gratuite et open-source pour la construction, le déploiement, l’exécution et la gestion de conteneurs. Elle a été lancée en 2013 et est devenue la norme de facto pour l’emballage des logiciels conteneurisés.

Kubernetes (parfois aussi appelé K8s) est un logiciel d’orchestration. Il fonctionne à un niveau supérieur à celui de Docker. L’objectif de Kubernetes est de s’assurer que les grappes de conteneurs fonctionnent bien ensemble. Il s’occupe de la mise à l’échelle, de l’équilibrage de la charge, du remplacement des conteneurs défectueux, etc.

Comment les conteneurs en tant que service se comparent-ils aux autres modèles ?

Dans cette section, nous comparerons CaaS à d’autres services de cloud computing, notamment IaaS, PaaS et BaaS. Ils présentent tous des avantages et des inconvénients qu’il convient de prendre en compte lors du déploiement de votre projet.

Sur la base des couches d’abstraction, le CaaS se situe quelque part entre le IaaS et le PaaS (comme le montre l’image ci-dessous).

Iaas vs Caas vs PaaS vs BaaS

CaaS vs IaaS

L’infrastructure en tant que service (IaaS) est un modèle flexible d’informatique en nuage dans lequel un fournisseur d’informatique en nuage offre l’infrastructure de base dans un environnement virtualisé. Cela comprend les serveurs, le stockage, les systèmes d’exploitation et le réseau. L’IaaS est l’option la moins abstraite et donne aux clients un contrôle total sur leur infrastructure.

Le CaaS est moins flexible et offre un niveau de contrôle inférieur à celui de l’IaaS. En revanche, il est beaucoup plus facile à gérer et permet une plus grande évolutivité et portabilité. En règle générale, utilisez IaaS si vous avez besoin d’un contrôle de haut niveau et CaaS si vous avez besoin d’un moyen rapide de déployer des applications conteneurisées évolutives.

CaaS vs PaaS

La plateforme en tant que service (PaaS) est un service d’informatique en nuage qui fournit aux développeurs les outils nécessaires pour créer et déployer leurs applications. Le PaaS permet aux utilisateurs de se concentrer sur leur application sans se soucier de l’infrastructure sous-jacente. La plupart des fournisseurs de PaaS vous permettent de faire fonctionner votre application en un ou deux clics !

Le CaaS est plus souple et plus évolutif que le PaaS. Le CaaS vous permet de déployer pratiquement n’importe quoi, alors que les fournisseurs de PaaS sont généralement limités à quelques langages de programmation. En termes d’outils et de fonctionnalités de développement de logiciels, le PaaS est plus avancé. Le PaaS est plus adapté aux applications monolithiques, tandis que le CaaS dépasse l’architecture microservice.

Pour en savoir plus sur la plateforme en tant que service, consultez la page Qu’est-ce que le Paas ?

CaaS vs BaaS

Le Backend as a Service (BaaS) est un modèle d’informatique en nuage qui fait abstraction de l’aspect backend d’un projet. Il comprend une base de données, le stockage de fichiers, la gestion des utilisateurs, des API, des SDK, des notifications push et l’authentification, pour n’en citer que quelques-uns. Le BaaS vous permet de vous concentrer sur votre frontend et votre logique commerciale au lieu de perdre du temps et de l’argent dans des tâches de programmation répétitives.

CaaS peut être utilisé pour déployer des backends et des frontends, tandis que BaaS sert principalement à déployer des backends. BaaS est extrêmement facile à utiliser et ne nécessite parfois aucun code. Le CaaS, quant à lui, nécessite une bonne dose de connaissances techniques en matière de programmation, de dockerisation et de DevOps.

Pour en savoir plus sur le Backend as a Service, consultez la page Qu’est-ce que le BaaS ?

Quels sont les meilleurs fournisseurs de services de conteneurs ?

Back4app Containers

Back4app Containers est un service cloud puissant qui offre une plateforme CaaS pour le déploiement et la mise à l’échelle d’applications sur des conteneurs distribués à l’échelle mondiale.

Elle permet aux développeurs de se concentrer sur leur logiciel et sur le processus de dockérisation sans se soucier de DevOps. La plateforme dispose d’un système CI/CD intégré, d’une intégration GitHub et prend en charge les déploiements sans temps d’arrêt.

Mieux encore, il propose un plan gratuit et vous permet de lancer votre application en quelques minutes !

Amazon Elastic Container Service

Amazon Elastic Container Service (ECS ) est un service d’orchestration de conteneurs entièrement géré qui simplifie la gestion et le déploiement de logiciels conteneurisés. Il vous suffit de décrire votre application et les ressources nécessaires, et AWS s’occupe du reste.

Il n’y a pas de frais exclusifs pour ECS car ECS utilise d’autres services AWS en arrière-plan. Pour utiliser efficacement ECS, vous devez être familiarisé avec l’écosystème AWS. AWS propose également un niveau gratuit pour les nouveaux clients.

Google Cloud Kubernetes

Google Cloud Kubernetes (GKE ) est la plateforme d’orchestration de Google basée sur Kubernetes. Elle vous permet de mettre vos conteneurs en pilote automatique, éliminant ainsi la nécessité de gérer les nœuds. Elle est livrée avec des applications et des modèles Kubernetes préconstruits, des capacités de mise à l’échelle automatique, la gestion de plusieurs clusters, et bien plus encore !

GKE est exceptionnellement performant et flexible, mais nécessite une configuration initiale assez importante. Il ne convient donc pas aux débutants. Comme les deux autres options, Google offre également des crédits gratuits aux nouveaux utilisateurs.

Comment héberger une application simple à l’aide de conteneurs ?

Dans cette section, nous allons voir comment construire, dockeriser et déployer une simple application web Python. Ce guide a été conçu spécifiquement pour Back4app Containers, mais des étapes similaires peuvent être appliquées à n’importe quel autre fournisseur CaaS.

Objectifs

  1. Coder l’application.
  2. Dockeriser l’application et la tester.
  3. Publier le code source sur GitHub.
  4. Déployer l’application sur CaaS.

Code App

Pour démontrer le processus de déploiement, nous allons créer une API RESTful simple à l’aide de FastAPI, un framework Python moderne et performant pour la création d’API prêtes à la production.

Configuration du projet

Commencez par créer un dossier dédié au projet et un environnement virtuel :

$ mkdir fastapi-example && cd fastapi-example
$ python3.9 -m venv env && source env/bin/activate

Ensuite, installez FastAPI et toutes ses dépendances :

$ pip install "fastapi[all]"

L’utilisation du spécificateur extra installe certaines dépendances optionnelles, telles que le serveur Uvicorn, le moteur de templates Jinja2, etc. Si vous voulez le strict minimum, n’incluez pas l’option extra.

Créez un fichier main.py avec le contenu suivant :

# main.py

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Back4app Containers rocks!"}

Il s’agit de l’application FastAPI la plus basique que vous puissiez écrire. Nous avons dû importer FastAPI, l’initialiser et enregistrer le point de terminaison racine. Visiter / devrait retourner le message Back4app Containers rocks !

Exécuter et tester

Pour exécuter l’application web, vous pouvez utiliser le serveur ASGI intégré d’Uvicorn:

$ uvicorn main:app --reload

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [9528] using WatchFiles
INFO:     Started server process [26308]
INFO:     Waiting for application startup.
INFO:     Application startup complete.  

Nous avons ajouté l’option --reload car nous voulons que le serveur soit rechargé si nous apportons des modifications au code source.

Utilisez cURL pour envoyer une requête GET à la racine de l’API :

$ curl http://localhost:8000/

{
    "message": "Back4app Containers rocks!"
}

exigences.txt

Une autre chose à faire est de figer toutes les exigences dans un fichier requirements.txt. Cela permet aux autres d’installer rapidement toutes les dépendances nécessaires à notre projet.

$ pip freeze > requirements.txt

fastapi==0.97.0
pydantic==1.10.9
python-dotenv==1.0.0
...

Nous utiliserons ce fichier pour installer les dépendances Python dans le processus de construction de l’image Docker.

Dockerize App

Avant de continuer, assurez-vous que vous avez Docker sur votre machine locale. La meilleure façon de le vérifier est de lancer docker --version dans votre terminal.

Fichier Docker

Pour dockeriser notre projet, nous utiliserons un Dockerfile. Un Dockerfile est un fichier texte qui contient toutes les commandes qu’un utilisateur pourrait exécuter pour assembler une image.

Créez un fichier Docker à la racine du projet comme suit :

# Dockerfile

# Use Alpine Linux as the base image
# we're using it since it's tiny in size (~5 MB)
FROM python:3.9.6-alpine

# Set the working directory
WORKDIR /app

# Set environmental variables
ENV PYTHONDONTWRITEBYTECODE 1  # Prevents Python from writing out .pyc files
ENV PYTHONUNBUFFERED 1         # Keeps Python from buffering stdin/stdout

# Copy over the requirements file and install the dependencies
COPY ./requirements.txt .
RUN pip install --no-cache-dir --upgrade -r ./requirements.txt

# Copy over the source code
COPY . .

# Expose the port
EXPOSE 80

# Run the server
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

Consultez les commentaires pour comprendre comment fonctionnent les différentes instructions.

Ne vous inquiétez pas, vous n’avez pas besoin de mémoriser toutes les instructions. Si vous êtes bloqué, vous pouvez toujours consulter la documentation de Docker. En outre, des fichiers Docker pour la plupart des langages et des frameworks peuvent être trouvés en ligne. Il vous suffit de les copier et de les adapter à vos besoins.

.dockerignore

Notre projet contient des fichiers et des répertoires que nous ne voulons pas inclure dans l’image Docker. Pour les ignorer, nous pouvons utiliser un fichier .dockerignore.

Créez un fichier .dockerignore à la racine du projet :

# .dockerignore

.git/
.idea/
venv/

N’hésitez pas à ajouter d’autres fichiers et répertoires.

Construire, exécuter et tester

Avant de déployer votre code sur CaaS, assurez-vous que votre projet se construit et s’exécute correctement sur votre machine.

Commencez par construire l’image Docker :

$ docker build -t fastapi-example:1.0 .

Récapitulatif des arguments :

  1. -t fastapi-example:1.0 marque/nomme l’image.
  2. . définit le contexte de construction.

Ensuite, vérifiez si l’image a été construite avec succès :

$ docker images

REPOSITORY        TAG       ID             CREATED AT      SIZE
fastapi-example   1.0       33feac11707d   4 seconds ago   72.8MB

Ensuite, utilisez l’image nouvellement créée pour démarrer un nouveau conteneur :

$ docker run -p 80:80 --name fastapi-example -d fastapi-example:1.0

Récapitulatif des arguments :

  1. -p 80:80 expose le port 80.
  2. --name fastapi-example nomme le conteneur.
  3. -d exécute le conteneur en mode détaché (sans occuper le terminal).
  4. fastapi-example:1.0 spécifie l’image à utiliser.

Vérifier les conteneurs en cours d’utilisation :

$ docker ps

ID        IMAGE                 COMMAND                CREATED   PORTS                
e67fdeg   fastapi-example:1.0   "uvicorn main:app.."   9s ago    0.0.0.0:80->80/tcp  

Enfin, envoyez une requête GET à l’index de l’API pour voir si vous obtenez le message :

$ curl http://localhost/

{
    "message": "Back4app Containers rocks!"
}

Pour arrêter le conteneur, vous pouvez utiliser la commande suivante :

$ docker kill fastapi-example

Pousser vers GitHub

Pour les étapes suivantes, vous devez disposer d’un compte GitHub. Si vous n’en avez pas, inscrivez-vous. De plus, assurez-vous que Git est installé et configuré sur votre machine.

Créer un référentiel

Vous serez redirigé vers votre tableau de bord lorsque vous vous connecterez à votre compte GitHub. Utilisez le bouton d’ajout en haut à droite de l’écran pour voir le formulaire de création de dépôt.

Créer un dépôt sur GitHub

Ensuite, donnez un nom descriptif à votre référentiel et cliquez sur le bouton “Créer un référentiel”.

Formulaire de création de dépôt GitHub

GitHub prendra quelques instants pour créer le dépôt. Une fois le dépôt créé, vous serez redirigé vers celui-ci. Prenez note de l'”URL du dépôt distant”.

GitHub Obtenir une URL distante

Pousser le code source

Retournez à votre projet local.

Avant de contrôler la version de votre code, il est conseillé de créer un fichier .gitignore. Un fichier .gitignore vous permet de définir quels fichiers et répertoires ne doivent pas être ajoutés au système de contrôle de version. Ce fichier fonctionne de la même manière qu’un fichier .dockerignore.

Créez un fichier .gitignore à la racine du projet avec le contenu suivant :

# .gitignore

.idea/
venv/
.env
build/

N’hésitez pas à modifier le fichier selon vos besoins.

Ensuite, ouvrez le terminal et exécutez la commande suivante pour initialiser le dépôt Git local :

$ git init

Ajoutez ensuite tous les fichiers à VCS et créez le commit initial :

$ git add .
$ git commit -m "my initial commit"

Enfin, ajouter l’origine GitHub distante et y pousser le code source :

$ git remote add origin <remote_url>
$ git push origin master

Veillez à remplacer par l’URL de la télécommande de l’étape précédente.

Cela devrait être fait. Si vous consultez maintenant la page du dépôt GitHub, vous devriez voir que tous les fichiers ont été ajoutés avec succès.

Déployer l’application

Pour déployer une application dans les Back4app Containers, vous avez besoin d’un compte Back4app. Si vous n’en avez pas encore, inscrivez-vous.

Lorsque vous vous connectez, vous voyez la liste de vos applications. Cliquez sur le bouton “Créer une nouvelle application” pour lancer le processus de création d’une application.

Back4app Créer une application

Back4app vous permet de déployer deux types d’applications – soit Backend as a Service (BaaS), soit Containers as a Service (CaaS). Puisque nous déployons une application conteneurisée, optons pour l’option “Containers as a Service”.

Back4app Containers as a Service

Si vous avez encore besoin de lier votre profil GitHub et d’importer le dépôt que nous avons créé à l’étape précédente. Ensuite, sélectionnez-le.

Back4app Containers Select Repository

Back4app Containers vous permet de personnaliser le déploiement. Vous pouvez définir la branche de déploiement, le répertoire racine, activer le déploiement automatique et définir les variables environnementales.

Comme nous déployons une simple application, nous n’avons besoin d’aucune de ces options. Il suffit de définir le “Nom de l’application” et de cliquer sur le bouton “Créer une application”.

Back4app Containers Configure App

Back4app Containers prendra quelques instants pour extraire le code source de GitHub, construire l’image, et lancer un nouveau conteneur. Une fois que votre application est prête, le statut changera en “Prêt”.

Lorsque cela se produit, vous pouvez cliquer sur le lien vert à gauche de l’écran pour ouvrir votre application dans le navigateur. Vous pouvez également remarquer que Back4app Containers a émis un certificat SSL gratuit pour votre application.

Déploiement des conteneurs Back4app terminé

Bon travail, c’est tout !

Conclusion

En conclusion, vous avez appris à connaître CaaS, l’un des meilleurs modèles natifs du cloud pour l’architecture de microservices. Vous connaissez maintenant ses principales caractéristiques, ses avantages, ses limites et les meilleurs fournisseurs de CaaS. De plus, vous avez appris à déployer une simple application dockerisée sur Back4app Containers.

Le code source du projet est disponible sur le dépôt back4app-containers-fastapi.

Autres étapes

  1. Examinez les constructions en plusieurs étapes pour améliorer vos Dockerfiles et les rendre plus faciles à maintenir.
  2. Une bonne pratique de sécurité consiste à exécuter les processus de votre conteneur Docker avec un utilisateur non root.
  3. Consultez la documentation de Back4app Containers pour apprendre à déployer d’autres langages de programmation et frameworks.

FAQ

Qu’est-ce que Containers as a Service ?

Containers as a Service (CaaS) est un modèle de cloud computing qui permet aux développeurs de téléverser, construire, faire évoluer et gérer des conteneurs. Les conteneurs sont de petits paquets applicatifs exécutables qui peuvent être facilement déployés n’importe où. Avec le CaaS, les équipes de développement et d’opérations IT n’ont plus à se soucier de l’infrastructure sous-jacente. Elles peuvent ainsi se concentrer sur des aspects de plus haut niveau.

Quels sont les avantages du Containers as a Service ?

– Développement et déploiement plus rapides
– Efficacité des ressources
– Portabilité
– Scalabilité
– Fonctionnement simplifié

Quels sont les inconvénients du Containers as a Service ?

– Problèmes de sécurité
– Manque de contrôle
– Courbe d’apprentissage
– Persistance des données

Quels sont les meilleurs fournisseurs de Containers as a Service ?

– Back4app Containers
– Amazon Elastic Container Service (ECS)
– Google Cloud Kubernetes (GKE)

Comment déployer une application avec des conteneurs ?

1. Développez l’application.
2. Dockerisez l’application et testez-la en local.
3. Poussez le code source sur GitHub.
4. Déployez l’application sur Back4app Containers.


Leave a reply

Your email address will not be published.