Accélérer la conception, le déploiement et le pilotage de vos applications avec Azure Kubernetes Service
L’intérêt des conteneurs n’est plus à démontrer : agilité, répétabilité, contrôle, flexibilité, indépendance de la plateforme et bien plus… Vous avez d’ailleurs peut-être déjà choisi cette technologie pour le développement de vos nouvelles applications ou accélérer la migration vers le cloud ? Comment passer à la vitesse supérieure ? Découvrez comment Microsoft Azure et Kubernetes vous permettent dès aujourd’hui d’accélérer la conception, le déploiement et l’orchestration de vos applications conteneurisées tout en respectant vos contraintes de scalabilité et de haute disponibilité.
Aujourd’hui il y a trois différents moyens de déployer un cluster Kubernetes sur Azure. Les deux premières sont un peu plus classiques. Tout d’abord avec Azure IaaS. De cette manière, vous travaillez avec les outils que vous connaissez, et vous avez un contrôle total sur le déploiement des clusters, des agents et l’installation de Kubernetes.
Si ce n’est pas votre but, ou que vous ne savez pas comment faire, il y a une étape intermédiaire avec AKS-Engine. C’est un outil open source de Microsoft, qui est disponible sur GitHub. C’est tout simplement une ligne de commande qui permet de générer le template Azure Resource Manager, qui permettra le déploiement du clusters (masters et agents) ainsi que l’installation et la configuration de Kubernetes. Vous n’avez pas à savoir comment ça marche, mais c’est là aussi une façon de travailler en IaaS, et vous conservez un contrôle total sur l’infrastructure qui est déployée.
Sinon vous pouvez laisser le soin de l’infrastructure à un fournisseur comme l’est Microsoft Azure et, dans ce cas-là vous ne vous occupez que de la conception, du déploiement et du pilotage de vos applications, sans vous soucier de l’infrastructure. Cette solution est plus automatisée. L’un des intérêts d’un service comme Azure Kubernetes Service (AKS) est notamment de faciliter la tâche de ses utilisateurs. Faire le choix de la solution IaaS n’est pas mauvais, c’est juste plus compliqué à utiliser et à administrer (mais dans certains cas plus flexibles !).
Enfin, avec un déploiement classique, ou les masters sont des VM, vous devez les gérer (mises à jour, surveillance, etc.) et vous les payez dans Azure. Avec un déploiement AKS, les masters sont gérés par Microsoft et le Hosted Control Plane est gratuit, toujours disponible et facile à mettre à jour.
Provisionning de l’infra & développement et déploiement de l’application
Il existe différents moyens de provisionner un cluster AKS. Il y a la manière dira-t-on classique. C’est l’approche impérative, avec laquelle vous pouvez créer assez facilement des clusters depuis le Portail Azure, PowerShell ou encore Azure CLI qui permet de travailler depuis Windows, Mac ou Linux. Mais le meilleur moyen de provisionner un cluster AKS, c’est certainement l’approche déclarative. Dans cette partie-là vous ne séquencez pas vos ordres pour pouvoir créer votre cluster. Vous déclarez ce que vous voulez comme résultat final, et ensuite un système automatique va faire le travail pour vous. Là aussi il y a trois solutions qui s’offrent à vous : Terraform, Ansible et Azure Resource Manager. Au choix, selon vos appétences et vos compétences.
Pour le déploiement sur Azure Kubernetes Services, vous avez la possibilité d’utiliser tous les outils classiques déjà présent sur Azure. Mais aussi des logiciels multi-plateformes comme l’est, par exemple, Terraform.
Le Monitoring
Place désormais à l’étape du monitoring. Il est important de surveiller le déploiement de ses clusters ainsi que leur niveau de performance afin de s’assurer que vos applications fonctionnent comme prévu. Il y a là encore deux options qui s’ouvrent à vous.
Depuis Azure Monitor, une fonctionnalité directement attachée à Azure Kubernetes Services. Il s’agit d’une simple option à activer sur votre cluster AKS pour voir remonter toutes les métriques relatives aux machines qui composent le cluster, mais aussi les métriques des différents conteneurs qui s’y exécutent.
Sinon vous disposez d’un écosystème très riche en open source avec des outils comme Grafana combinés avec Prometheus qui font également très bien le travail. Ici comme avec les étapes d’avant, le choix repose sur la solution que vous avez l’habitude d’utiliser.
Le Scaling
L’une des grandes forces d’Azure Kubernetes Services, c’est aussi sa capacité à se mettre à l’échelle. Azure Kubernetes propose deux niveau de scaling : Kubernetes Horizontal Pod Auto Scaling (HPA) : on demande à Kubernetes de rajouter des pods dans le cluster en fonction de certaines métriques (CPU, mémoire, personnalisée…) et ce jusqu’à ce que celui-ci ne soit plus en capacité d’en accepter.
Puis Kubernetes Cluster Autoscaler.
Lui va interagir d’une part avec le scheduler Kubernetes afin de connaitre l’état des pods et d’autre part avec la plateforme sous-jacente, ici Azure, pour aller augmenter le nombre de nœuds donc et créer automatiquement de nouvelles VM. On ne fait pas grossir la taille des VM, mais on grossit la taille des clusters, c’est-à-dire qu’on rajoute des VM à l’intérieur.Deux solutions qui permettent une élasticité du cluster afin qu’il s’adapte à la charge de vos applications.
Enfin, n’oubliez pas de définir des ressources limites sur tous vos déploiements. Instruction à donner au scheduler Kubernetes afin qu’il sache la quantité de ressource (CPU + RAM) à réserver pour vos pods et qu’il puisse donc les répartir correctement pour maximiser l’utilisation des ressources dans le cluster. Cette étape est très importante pour garantir le bon passage à l’échelle de vos applications dans un cluster Kubernetes.