Aller au contenu
Home » Blog » Azure Container Apps : des conteneurs en mode serverless sans tracas d’orchestration

Azure Container Apps : des conteneurs en mode serverless sans tracas d’orchestration

Microsoft a annoncé lors de la conférence Ignite la semaine dernière un nouveau service que je trouve très intéressant. Il s’agit d’Azure Container Apps.

Qu’est-ce qu’Azure Container Apps ?

Container Apps est un service de conteneurs serverless entièrement managé pour la création et le déploiement d’applications modernes à grande échelle.

Pourquoi Conteneur Apps ?

Prenons, par exemple, les deux services de conteneurs populaires d’Azure suivants : Azure Container Instance (ACI) et Azure Kubernetes Services (AKS).

ACI est un excellent service pour l’exécution d’une solution conteneurisée qui n’a pas beaucoup d’exigences : mise à l’échelle, gestion de plusieurs instances, etc.

Si votre application rencontre du succès et que vous avez besoin d’une nouvelle instance, vous devez passer par le déploiement de cette dernière dans une nouvelle instance ACI et configurer un LoadBalancer pour répartir les charges. À ce moment, ce service devient moins intéressant. Vous devez donc vous tourner vers Kubernetes en utilisant notamment AKS.

Avec AKS vous serez capables de déployer et orchestrer plusieurs conteneurs. Si votre application rencontre du succès, les mécanismes de scaling automatiques vont permettre de provisionner de nouveaux nœuds qui seront utilisés par les nouvelles instances qui seront créées pour votre application.

Toutefois, l’utilisation de Kubernetes demande une bonne maitrise de son architecture et surtout de la gestion des clusters. Par ailleurs, les mécanismes de mise à l’échelle de Kubernetes reposent sur des métriques liées à la consommation des ressources. Il n’est pas possible de mettre à l’échelle en fonction des évènements, par exemple. Pour un tel besoin, vous devez vous tourner vers des outils supplémentaires comme Kubeless.

À ce moment, une offre comme Azure Container Apps est ce qui répondra potentiellement à vos attentes. Azure Container Apps est un service qui permet d’avoir à disposition un Kubernetes avec en supplément des fonctionnalités de scalling basés sur des évènements, ceci sans la complexité de la gestion du cluster et des APIs Kubernetes. De plus à moindre cout grâce à l’approche Serverless.

Les applications basées sur Azure Container Apps peuvent être mises à l’échelle dynamiquement en fonction des caractéristiques suivantes :

Les applications basées sur Container Apps sont déployées dans un environnement isolé. La technologie KEDA est utilisée pour la mise en l’échelle et le runtime Darp (Distributed Application Runtime) est directement intégré à la solution.

Environnement Container Apps

Les applications de conteneur individuelles sont déployées dans un environnement d’applications à conteneur unique, qui joue le rôle de limite sécurisée autour des groupes d’applications de conteneur. Les applications de conteneur d’un même environnement sont déployées dans le même réseau virtuel et écrivent les journaux dans le même espace de travail Log Analytics.

Les raisons de déployer des applications de conteneur dans le même environnement sont les suivantes :

  • Gérer les services connexes
  • Déployer différentes applications sur le même réseau virtuel
  • Faire en sorte que les applications communiquent entre elles à l’aide de Dapr
  • Permettre aux applications de partager la même configuration Dapr
  • Faire en sorte que les applications partagent le même espace de travail analytique des journaux d’activité

KEDA

Azure Containers Apps utilise la technologie KEDA (Kubernetes-based Event Driven Auto-Scaler). Keda est un Autoscaler Kubernetes basé sur les évènements. Avec KEDA, vous pouvez piloter la mise à l’échelle de n’importe quel conteneur dans Kubernetes en fonction du nombre d’évènements à traiter.

Dapr

Dapr est un runtime open source pour le développement des microservices en utilisant une architecture event driven. Dapr simplifie la création des applications distribuées résilientes et pilotées par les évènements.  Le Runtime Dapr est intégré en natif dans Azure Container Apps

Démarrer avec Azure Container Apps

Nous allons déployer une application conteneurisée dans Azure Container Apps en utilisant le CLI. L’image de l’application d’exemple à déployer est sur Docker Hub : https://hub.docker.com/r/romaric/containerapp

Vous devez avoir la dernière version du CLI Azure installer et être connecté (az login) à votre session Azure.

Etape 1 : Installer l’extension pour Azure Container Apps

Compte tenu du fait que Container Apps est encore en préversion. Les outils CLI pour la plateforme ne sont pas encore intégrés à Azure CLI. Vous devez donc les installer en exécutant la commande suivante :

az extension add --source https://workerappscliextension.blob.core.windows.net/azure-cli-extension/containerapp-0.2.0-py2.py3-none-any.whl

Il est également nécessaire d’enregistrer le fournisseur Microsoft.Web dans votre suscription Azure.

az provider register --namespace Microsoft.Web

Etape 2 – définir les variables à utiliser

Définissez les variables suivantes. Vous pouvez changer les valeurs, si besoin :

RESOURCE_GROUP="RgContainerapps"
LOCATION="canadacentral"
LOG_ANALYTICS_WORKSPACE="containerapps-logs"
CONTAINERAPPS_ENVIRONMENT="containerapps-env"

Etape 3 – créer un groupe de ressource

Nous devons créer un groupe de ressources pour organiser les services liés à notre nouvelle application.

az group create --name $RESOURCE_GROUP --location "$LOCATION"

Etape 4 : créer un espace de travail Log Analytics

Les applications de conteneur déployées dans le même environnement sont déployées dans le même réseau virtuel et écrivent les journaux dans le même espace de travail Log Analytics.

Nous devons donc commencer par créer un espace Log Analytics en exécutant la commande suivante :

az monitor log-analytics workspace create --resource-group $RESOURCE_GROUP --workspace-name $LOG_ANALYTICS_WORKSPACE

Etape 5 : récupérer l’ID client et la clé secrète client Log Analytics.

Nous allons exécuter successivement les deux commandes suivantes pour obtenir le client ID et le client secret de l’espace Log Analyctis dans de nouvelles variables.

Commande pour obtenir le client ID :

LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az monitor log-analytics workspace show --query customerId -g $RESOURCE_GROUP -n $LOG_ANALYTICS_WORKSPACE --out tsv`

Commande pour obtenir le client secret

LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET=`az monitor log-analytics workspace get-shared-keys --query primarySharedKey -g $RESOURCE_GROUP -n $LOG_ANALYTICS_WORKSPACE --out tsv`

Etape 6 : Créer l’environnement Container Apps

Les applications de conteneur sont déployées dans un environnement Azure Container Apps. Pour créer l’environnement, exécutez la commande suivante :

az containerapp env create \
  --name $CONTAINERAPPS_ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --logs-workspace-id $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
  --logs-workspace-key $LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET \
  --location "$LOCATION"

NB : je n’ai pas pu créer l’environnement depuis le CLI Bash sur mon PC. J’ai dû me tourner vers le CLI Azure dans le portail afin que cela marche. Il faut noter toutefois que l’outil est encore en préversion.

Etape 7 : Déployer l’application

Maintenant que vous avez créé un environnement, vous pouvez déployer votre première application de conteneur. Pour cela, nous allons utiliser la commande containerapp create pour déployer l’image sur Docker Hub dans Azure Container Apps.

az containerapp create \
  --name my-container-app \
  --resource-group $RESOURCE_GROUP \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --image  romaric/containerapp:dev \
  --target-port 80 \
  --ingress 'external'

Exécuter l’application

Récupérez le lien FQDN et exécutez l’application dans le navigateur de votre choix :

Page du service Azure Container Apps

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.