L&L Kubernetes et AKS

Retrouvez notre Expert Christophe, dans une vidéo sur Kubernetes et AKS. La vidéo est Level 100, accessible à tous. URL sur Youtube: ici

Contenu: Il s’agit de prendre un projet Web API sous Visual Studio 2019 avec support Docker (container Linux) et de construire l’image Docker en local. Ensuite on pousse cette image dans une registry ACR afin de faire un déploiement dans un cluster AKS. Ensuite, on aborde kubectl, l’outil console de Kubernetes.

Pour réaliser toutes les opérations techniques, un HOWTO est à télécharger sur https://infeeny.com/net-core-sous-aks/

Chroniques Techniques sur le JDN

Retrouvez les 3 dernières chroniques de notre Leader de Domaine .NET (ChristopheP) sur le Journal du Net (JDN):

.NET 5 : introduction à la plateforme unifiée de Microsoft – A partir de novembre 2020, Microsoft fusionne .NET Framework et .NET Core 3.x pour créer .NET 5. Une plateforme unifiée pour les développeurs combinant dev .NET, Cloud, gaming, IoT, web, et l’IA.

Comment devenir un développeur expert Microsoft ? – Le monde du développement selon Microsoft est complexe. Il faut savoir décrypter les messages envoyés par le marketing du groupe pour pourvoir lire entre les lignes.

Comment j’ai démystifié Kubernetes, sous Linux Ubuntu – Kubernetes est la technologie cloud à la mode. On en parle partout. J’ai voulu m’intéresser à ça et maîtriser la chose en local avant de la mettre en oeuvre dans le cloud. Voici la synthèse de mon expérience.

Docker et les containers sous Linux

Pré-requis

Vous aurez besoin des éléments suivants pour suivre ce tutoriel :

  • Docker
  • Visual Studio 2019
  • Powershell (ou votre terminal favoris)
  • DotNet

Point d’attention : Il est important que vous pensiez à “switch” votre Docker (si ce n’est pas déjà fait) en Switch to Linux container.

On a essayé de comprendre au mieux le fonctionnement de Docker avec les containers sous Linux depuis un poste sous Windows. Dans cette démarche, nous avons effectués deux essais :

  • Le premier avec Visual Studio et le support Docker intégré.
  • Le second en ligne de commande avec un Dockerfile produit par nos soins.

Exemple d’un projet sous Visual Studio avec support Docker sous Linux

Voici les étapes suivies pour la création du projet (accès pour les néophytes qui ne connaîtraient pas l’environnement de Visual Studio) :

  • Créer un projet WebApplication avec ASP .NET Core 3.1
  • Prendre l’option API et cocher la case “Enable Docker support” avec pour option Linux

Le Dockerfile

Dans le cadre d’un projet avec Docker et des containers sous Linux, le Dockerfile est quelques peu différent :

Pour rappel : lors de la création d’un projet sous Visual Studio avec le support Docker, le Dockerfile est généré automatiquement, avec la commande FROM référençant l’ISO de l’OS choisit (dans notre cas : Linux) avec l’import de la librairie ASP .NET Core.

On a cherché à comprendre pourquoi il y avait deux EXPOSE. En nous renseignant au niveau de la documentation Docker officielle, nous avons compris l’utilité de ceux-ci, son fonctionnement in fine. Néanmoins, nous n’avons pas compris pourquoi notre API ne nous renvoie rien si nous changeons les ports avec la commande suivante (sous Powershell) :

docker run -d -p 42422:80 image_name

Cette commande, permet d’ajouter un host au port 80, dans notre cas 42422. Nous vous expliquerons les différentes options de cette ligne de commande un peu plus bas lors de notre second exemple.

Si on exécute avec le programme à l’aide du bouton “Docker” dans Visual Studio, celui-ci est correctement lancé (par défaut ça vous renverra au WeatherForecast si vous avez pris une API classique).

Exemple d’un projet en ligne de commande avec création d’un Dockerfile

Pour information, le début de notre exemple se base sur le tutoriel suivant qui lui se base sur des containers sous Windows. Par conséquent, il n’y a que le début de notre projet qui ressemble à cette documentation.

Dans le cadre de cet exemple, nous allons mettre en place les éléments suivants :

  • Création d’un dossier de travail
  • Création d’une application .NET
  • Création d’un fichier Dockerfile vide
  • Mise en place du Dockerfile Linux / ASP .NET Core
  • Création d’une image Docker de notre application à partir de notre Dockerfile
  • Création d’un container / exécution de notre container
  • Test de notre application
  • Modification des ports utilisés

Nous allons tout d’abord, créer un dossier dans lequel nous allons effectuer les différentes opérations que nous avons résumés juste au-dessus. Ce dossier s’appellera tuto, pour se faire, nous allons écrire dans notre commande Powershell la commande suivante :

mkdir tuto
cd tuto

La commande mkdir permet de créer le dossier tuto, et la commande cd permet de se placer au niveau du dossier tuto.

Pour la suite, nous allons créer un nouveau projet à l’intérieur du dossier tuto (puisque nous nous y trouvons) :

Nous faisons appel à dotnet car nous souhaitons créer une application .NET, le “new console” permet de définir le type de projet souhaité (ici une application Console). Le -o permet d’indiquer le path du projet app et le -n permet de lui donner un nom en l’occurrence ici : myapp.

Sur l’image ci-dessus, nous pouvons constater que nous nous sommes placés au niveau du dossier app, puis nous avons affichés le contenu du dossier.

Nous avons ensuite exécuter l’application avec la commande :

dotnet run

Cela nous affiche la chaîne de caractère “Hello World!”. En effet, lorsque nous lançons Visual Studio et que nous allons sur le fichier Program.cs, nous voyons que par défaut, la méthode Main affiche la string en question.

Ensuite, nous allons créer notre image Docker. Pour mener a bien cette tâche, nous avons besoin de deux choses :

  • De l’exécutable (.dll)
  • Du Dockerfile

Pour créer l’exécuter, nous avons utilisés la commande suivante:

Celle-ci nous sert à compiler l’application dans le dossier publish. Nous pouvons voir qu’après l’exécution de la commande, le path est indiqué.

Ici, nous vérifions bien que myapp a bien été compilé en myapp.dll.

Nous allons créer le fichier Dockerfile dans le dossier tuto (le fichier doit se trouver à la racine du projet). Il va être composé de la façon suivante :

  • Le FROM ressemble quasiment à celui qui se trouve plus haut dans le premier exemple, à la différence qu’il y a pas de AS base en plus.
  • Le COPY va permettre de copier tout se qui se trouve dans notre dossier publishdans le dossier app, qui lui sera crée dans notre container.
  • Le ENTRYPOINT va permettre d’indiquer à Docker qu’il est une application exécutable en partant de dll.

Nous allons maintenant créer notre image, pour se faire, nous allons retourner à la racine du projet tuto. Puis, nous exécuterons :

Nous allons examiner cette commande ensemble :

  • build : Créer une nouvelle image Docker
  • -t: Permet de donner un nom à cette image
  • -f: Permet de désigner le fichier que nous voulons sélectionner
  • Dockerfile: Correspond à notre fichier et le . derrière sert à indiquer qu’il doit chercher dans le dossier actuel (en l’occurrence le dossier tuto)

Nous pouvons constater, que Docker lors de la première étape va pull l’image de l’ISO, ainsi que les dépendances nécessaires. Durant la deuxième étape, la copie du contenu du dossier publish dans le dossier app va être réalisé. Et enfin, la troisième étape permet d’indiquer à Docker que c’est un exécutable.

Si maintenant, nous faisons un :

docker images

Nous pouvons voir que la dépendance aspnet de .NET Core a bien été pull correctement et que notre image est bien existante (myimage).

Pour la prochaine étape, nous allons créer et exécuter notre container via notre image avec la commande :

docker run image_name

Nous pouvons observer que notre commande nous renvoie la même chaîne de caractère que nous renvoyé notre app. Si nous exécutons :

docker ps -a

Cette commande nous permet d’afficher la liste des différents containers présent sur votre poste. On peut y voir :

  • L’ID du container
  • Le nom de l’image sur lequel il est basé
  • Le point d’entrée
  • La date de création
  • Le statut
  • Le ou les ports sur lequel il est hébergé
  • Le nom du container (généré par défaut)

En l’occurrence, nous n’avons pas de port indiqué sur l’image ci-dessus, car notre application n’est pas une application Web.

Dans le cas où vous auriez une application Web et non pas une application Console comme nous. Vous pourriez tout à fait exécuter la commande suivante :

docker run -d -p 42422:80 –name container_name image_name

Elle nous renvoie, l’ID du container crée et celui-ci sera hébergé sur le port 80 pour host le port 42422.

Nous vous proposons un récapitulatif des commandes docker, dotnet et bash
ci-dessous :

Bash :

  • mkdir : Permet de créer un dossier
  • cd : Permet de se déplacer d’un dossier à l’autre
  • ls : Permet d’indiquer le contenu d’un dossier

Dotnet :

  • dotnet run : Permet d’exécuter une application .NET
  • dotnet new : Permet de créer une application
  • dotnet publish : Permet de compiler une application

Docker :

  • docker build : Permet de créer une image
  • docker images : Permet d’afficher l’ensemble des images
  • docker run : Permet de créer et d’exécuter un container
  • docker ps -a : Permet de voir l’ensemble des containers
  • docker rm : Permet de supprimer un container

Article écrit par :

  • Julie LACOGNATA <julie.lacognata@infeeny.com>
  • Pierre KORE <pierre.kore@infeeny.com>
  • Kévin ANSARD <kevin.ansard@infeeny.com>