Conteneuriser et exploiter un cluster via AKS

Dans cet article nous allons suivre le tutoriel de la doc de microsoft tutorial-kubernetes-prepare-app J’ai pour ma part totalement effacé toute resource sur Azure (free trial) pour partir d’une feuille blanche car certain nom de resource été similaire. Ce tuto part du principe que l’on a une application qui fonctionne en dev. On souhaite la conteneuriser, la distribuer sur un registry online puis s’en servir via AKS. Ensuite on verra comment scaler l’app. Ce tuto est plutot long, mais je pense complet sur les sujet essentiels.   1 – Création d’une image docker On va cloner une app de demo sur github, mais si vous avez la votre, prennez la. Ouvrez un terminal, créer un répertoire de travail et se mettre dedans puis taper : git clone https://github.com/Azure-Samples/azure-voting-app-redis.git L’image est très légère. Faut dire que le code aussi. En se rendant dans le repertoire azure-voting-app-redis on peut voir quelques fichiers dont un qui va particulièrement nous intéresser : docker-compose.yaml version: ‘3’ services:   azure-vote-back:     image: redis     container_name: azure-vote-back     ports:         – « 6379:6379 »   azure-vote-front:     build: ./azure-vote     image: azure-vote-front     container_name: azure-vote-front     environment:       REDIS: azure-vote-back     ports:         – « 8080:80 » Ce fichier est relativement simple. Nous avons deux services basées sur une image redis et une app web dont l’image est azure-vote-front. L’image Redis proviendra du registry Docker Hub (version officielle) et la seconde sera buildé avec un dockerfile situé dans le projet web azure-vote. Voici ce dockerfile : FROM tiangolo/uwsgi-nginx-flask:python3.6 RUN pip install redis ADD /azure-vote /app Ce dockerfile va créer un conteneur basé sur l’image tiangolo/uwsgi-nginx-flask (950 Mo) (avec python 3.6). On execute ensuite une commande pour installer redis (via python) et on ajoute le code source du site web dans un repertoire sur le conteneur nommé app. On a plus qu’a taper la commande docker-compose up -d ce qui va monter les deux images dans le registry local. Dans un premier temps cela va télécharger les image de  tiangolo et redis si vous ne les avez pas déjà sur votre poste. Ensuite docker-compose va builder l’image de notre app. (attention, il faudra la rebuilder pour la mettre a jour dans une prochaine image). La commande suivante va lister vos images locales : $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE azure-vote-front latest 9cc914e25834 40 seconds ago 694MB redis latest a1b99da73d05 7 days ago 106MB tiangolo/uwsgi-nginx-flask flask 788ca94b2313 9 months ago $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 82411933e8f9 azure-vote-front « /usr/bin/supervisord » 57 seconds ago Up 30 seconds 443/tcp, 0.0.0.0:8080->80/tcp azure-vote-front b68fed4b66b6 redis « docker-entrypoint… » 57 seconds ago Up 30 seconds 0.0.0.0:6379->6379/tcp azure-vote-back En lisant nos conteneurs lancé par docker on voit bien nos deux images. On a plus qu’à tester l’url http://localhost:8080 et on devrait voir notre app tourner localement! Un petit docker-compose down pour libérer ces process docker et cette partie est finie. 2 – Envoyer nos conteneurs vers Azure Container Registry La première chose à faire est de créer une instance d’Azure Container Registry (ACR) En premier lieu on créer le groupe de ressources : az group create –name myResourceGroup –location eastus Pour info celui ci n’apparaitra pas sur le portail pour le moment car il est vide. Il faut lui rajouter un élement. Voici la commande pour créer un ACR : az acr create –resource-group myResourceGroup –name myACR35 –sku Basic Le nom du registry doit être unique car il sera accessible publiquement via une url comme celle ci myacr.azurecr.io En tapant cette commande, azure nous indique que ce nom est déjà occupé et nous livre une adress web pour vérifier les nom existant. On va renommer noter myACR en qq chose de libre, myACR35 à l’air de passer : > az acr create –resource-group myResourceGroup –name myACR35 –sku Basic { « adminUserEnabled »: false, « creationDate »: « 2020-01-30T10:12:36.101431+00:00 », « id »: « /subscriptions/eaeaae83-9dcd-405b-8f02-4e58e0e30bbb/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries /myACR35 », « location »: « eastus », « loginServer »: « myacr35.azurecr.io », « name »: « myACR35 », « networkRuleSet »: null, « policies »: { « quarantinePolicy »: { « status »: « disabled » }, « retentionPolicy »: { « days »: 7, « lastUpdatedTime »: « 2020-01-30T10:12:37.145663+00:00 », « status »: « disabled » }, « trustPolicy »: { « status »: « disabled », « type »: « Notary » } }, « provisioningState »: « Succeeded », « resourceGroup »: « myResourceGroup », « sku »: { « name »: « Basic », « tier »: « Basic » }, « status »: null, « storageAccount »: null, « tags »: {}, « type »: « Microsoft.ContainerRegistry/registries » } L’ACR myACR35 étant créé on va s’y connecter : > az acr login –name myACR35 Uppercase characters are detected in the registry name. When using its server url in docker commands, to avoid authentication errors, use al l lowercase. Login Succeeded Le retour de cette commande nous indique qu’il serait préférable à l’avenir d’utiliser un  nom en minuscule. Balisage (tag) Pour utiliser l’image conteneur azure-vote-front avec ACR, on doit baliser cette image avec l’adresse du serveur de connexion de votre registre. Celle ci se trouve dans le retour json précedent : « loginServer »: « myacr35.azurecr.io » Si vous ne l’avez plus, vous pouvez l’obtenir avec la commande suivante : az acr list –resource-group myResourceGroup –query « [].{acrLoginServer:loginServer} » –output table À présent, étiquetez votre image azure-vote-front locale avec l’adresse myacr35.azurecr.io (en minuscule) du registre de conteneurs. Pour indiquer la version de l’image, ajoutez :v1 à la fin du nom de l’image :  docker tag azure-vote-front myacr35.azurecr.io/azure-vote-front:v1 PS D:\Kubernetes\AKSText2\azure-voting-app-redis> docker images REPOSITORY TAG IMAGE ID CREATED SIZE azure-vote-front latest df60d4cc1f96 About an hour ago 965MB myacr35.azurecr.io/azure-vote-front v1 df60d4cc1f96 About an hour ago 965MB On remarque alors qu’une nouvelle image est présente dans la liste (docker image) celle ci étant balisé sur notre serveur distant. Envoyer l’image docker push myacr35.azurecr.io/azure-vote-front:v1 On envoit notre image via la commande docker push. Cela peut prendre qq minutes suivant la taille de celle ci. Quand celle ci sera uploadé, on ira vérifier avec cette commande qui liste les images de notre repo de conteneur distant : > az acr repository list –name myacr35 –output table Result —————- azure-vote-front Notre image est bien sur notre Azure Container Registery myACR35. 3 – Déployer un cluster az aks create –resource-group myResourceGroup –name myAKSCluster –node-count 2 –generate-ssh-keys –attach-acr myacr35 Cette commande permet la création d’un cluster de 2 nodes branché sur le registre ACR que l’on vient de créer. Vous devriez voir au bout de qq minutes un retour en JSON : { « aadProfile »: null, « addonProfiles »: null, « agentPoolProfiles »: [ { « availabilityZones »: null, « count »: 2, « enableAutoScaling »: null, « enableNodePublicIp »: null, « maxCount »: null, « maxPods »: 110, « minCount »: null, « name »: « nodepool1 », « nodeTaints »: null, « orchestratorVersion »: « 1.14.8 », « osDiskSizeGb »: 100, « osType »: « Linux », « provisioningState »: « Succeeded », « scaleSetEvictionPolicy »: null, « scaleSetPriority »: null, « type »:…

Kubernetes & AKS – Intro

Intro Kubernetes (communément appelé « K8S ») est un système open source qui vise à fournir une « plate-forme permettant d’automatiser le déploiement, la montée en charge et la mise en œuvre de conteneurs d’application sur des clusters de serveurs ». Il fonctionne avec toute une série de technologies de conteneurisation, et est souvent utilisé avec Docker. Il a été conçu à l’origine par Google, puis offert à la Cloud Native Computing Foundation. (Wikipedia) AKS (Azure Kubernete Service) est un service Kubernetes sur Azure. Il permet d’automatiser le déploiement, la mise à l’échelle et le fonctionnement de conteneurs d’application entre des clusters d’hôtes. C’est un orchestrateur de conteneur. Cela signifie qu’il est en charge de monter des conteneurs suivant un plan que l’on fixe. Il peut par exemple automatiser la charge (monter des conteneurs supplémentaire), relancer un conteneur défaillant, prévoir une réduction ou une augmentation de charge (planification) et donc adapter des besoins suivant des critères (horraire, ponctuel, exceptionnel, CPU, Bandwidth…) https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/ L’image ci dessous permet d’illustrer ce qu’est un cluster de conteneurs : Un cluster Kubernetes regroupe plusieurs hôtes Docker et les expose sous la forme d’un seul hôte Docker virtuel. Vous pouvez donc déployer plusieurs conteneurs sur le cluster et effectuer un scale-out d’un nombre illimité d’instances de conteneurs. Le cluster prend en charge tous les détails complexes de la gestion, comme la scalabilité, l’intégrité,etc. Structure et topologie Kubernetes dispose d’une structure basée sur un Master Node et des Nodes. Le Master Node contrôle les nodes. Ces dernières sont des machines virtuelles ou physique. Sur une node on peut retrouver un ou des Pods. Un namespace permet de segmenter des pods, volumes, secrets, configmap… On peut avoir deux namespaces (par exemple dev et staging) sur le même cluster. (là où d’habitude on travaillait avec des machines séparées sur une app monolithique) kubectl est l’application en ligne de commande permettant d’interragir avec Kubernetes. Il est possible d’utiliser Kubernetes sur votre machine locale avec Docker Desktop en cochant cet option : Il est donc possible de travailler localement et préparer ses fichier yaml pour AKS (dev, staging, prod) Pour cela il faut aussi préparer nos conteneurs et les déposer sur un registre (Docker Registry sur Azure) afin qu’ils puissent être utilisé par AKS. Ressources pour se former : Podcast Devapps.be Introduction à Kubernetes : https://www.youtube.com/watch?v=b5vJsYR-Vbo La doc microsoft : https://docs.microsoft.com/fr-fr/azure/aks/ Comprendre Kubernetes en 3 minutes : https://www.youtube.com/watch?v=uyiDNcSmwFw (perso j’ai rien compris…) Celle la est mieux https://www.youtube.com/watch?v=QJ4fODH6DXI xavki : https://www.youtube.com/watch?v=vFfngcRPj9M Web2Day 2017 : https://www.youtube.com/watch?v=zztKO0iRX_w&t=175s