Orchestration de conteneurs sur AWS : démo de déploiement d’une application avec EKS

Quels sont les services d’orchestration et de déploiement des conteneurs Docker ? Comment facilitent-ils la gestion des clusters Docker et comment AWS a introduit Kubernetes pour la gestion des conteneurs Docker ? Le 19 juin 2018 dernier lors du AWS Summit, Abby Fuller a abordé ces sujets dans la sessions “Containers on AWS: Fargate, EKS”. Dans cet article, nous vous proposons de revenir sur les grandes lignes de ce talk, puis de concrétiser ce sujet par la démo de déploiement d’une application avec Kubernetes et EKS.

Quels sont les services d’orchestration et de déploiement des conteneurs Docker et comment facilitent ils la gestion des clusters Docker ?

Le conteneur est l’ensemble du code d’une application et ses dépendances (le runtime, les bibliothèques, etc.) isolés de son environnement extérieur. Les conteneurs sont portables, légers, standardisés et simples à déployer. Mais lorsqu’on parle de milliers de conteneurs, la gestion manuelle devient complexe et fastidieuse.

Pour cela, il existe des orchestrateurs de conteneurs, et AWS propose maintenant à ses clients de déployer les conteneurs docker dans le Cloud d’une manière scalable, simple et hautement performante en utilisant soit le service Elastic Container Service (ECS), ou bien Elastic Container Service for Kubernetes (EKS).

ECS, lancé en 2014, est un service d’orchestration et de déploiement des conteneurs Docker sur le cloud AWS. Il existe 3 composants dans ECS :

  • Instance Container: Ce sont les instances EC2 dans lesquelles tournent les conteneurs Docker.
  • Task: C’est le conteneur qui tourne dans ECS. Il est définit par un “Task definition” sous format json.
  • Service: C’est un ensemble des tasks qui tournent simultanément. Le service scheduler assure que le task n’échoue jamais en le relançant chaque fois qu’il termine.

 

Il y a deux modes de déploiement des conteneurs dans AWS :

  • Le mode EC2 dans lequel l’utilisateur doit configurer tous les composants :
    • Les ressources du computing (VPC,EC2, Autoscaling, le choix de AMI ecs-optimized, type de l’instance adéquate, etc.)
    • le task et le service en utilisant des APIs ECS.
  • Fargate, qui fait abstraction de tout ce qui est gestion des ressources du computing bas niveau (EC2, VPC, Autoscaling…etc) et permet de se concentrer sur l’application. Dans ce mode l’utilisateur fait seulement la configuration des tasks et services ECS par les APIs.

De ECS à EKS

Aujourd’hui plus de 57% des clusters Kubernetes tournent sur AWS, et AWS a lancé récemment le service Elastic Container Service for Kubernetes (EKS). Ce service utilise Kubernetes pour l’orchestration des conteneurs Docker au lieu de l’orchestrateur ECS.

Le scénario d’EKS :

Le service EKS commence automatiquement par le provisionnement du cluster en créant le Kubernetes master, ensuite l’utilisateur ajoute des “worker load” dans le cluster. Puis, l’utilisateur se connecte à EKS Cluster par l’utilitaire en ligne de commande Kubectl. Enfin, l’utilisateur lance le déploiement de son application dans le cluster.

Demo: déploiement d’une application avec EKS

Les prérequis :

Kubectl : C’est un client Kubernetes qui permet l’interaction entre l’utilisateur et Kubernetes server pour réaliser des actions bien définies.
Heptio-authenticator-aws: C’est un outil qui permet d’utiliser AWS IAM (Identity Access Management) pour s’authentifier à Kubernetes. Avec Heptio, l’utilisateur n’a pas besoin de gérer les accès séparément.

Remarque :
Les service EKS est disponible pour le moment dans les régions US West (Oregon) (us-west-2) et US East (N. Virginia) (us-east-1). Pour cette raison nous utiliserons la region US West(Oregon) pour le déploiement des ressources AWS utilisées.

Creation du EKS IAM role :

Dans la console AWS:

  1. Choisir Roles et puis cliquer sur le bouton Create Role.
  2. Choisir le service EKS puis cliquer sur “Allows Amazon EKS to manage your clusters on your behalf” et puis cliquer sur “Permissions”
  3. Choisir “Next:Review”
  4. Taper le nom du Role et puis “Apply”

Vous allez trouver le rôle affiché dans la liste des rôles.

Creation du vpc :

En utilisant un template du vpc stack fourni par AWS vous pouvez créer le VPC avec Cloudformation :

Creation du Cluster EKS :

En utilisant la CLI, vous pouvez créer le Cluster EKS en spécifiant les subnets et les “sécurity groups” créés dans le VPC et aussi le rôle EKS créé dans IAM avec la commande :

Configuration du Kubectl pour Amazon EKS :

Après quelques minutes le cluster EKS est totalement créé. Nous avons besoin de l’URL, du certificat et du nom du cluster pour configurer Kubectl. Nous pouvons les extraire avec les commandes suivantes :

  • Extraction endpoint URL : 
  • Extraction du Certificats d’autorisation du EKS :
aws eks describe-cluster --name [name-cluster] --query cluster.endpoint --region [region-id]

Nous allons utiliser ces informations pour configurer le fichier ~/.kube/conf sans oublier d’utiliser le nom du cluster:
Il faut ajouter à la clé “server” l’url de l’endpoint du Cluster EKS. Et pour la clé “certificate-authority-data”, le certificat d’autorisation du EKS cluster. Et finalement il faut ajouter le nom du cluster qui est “demo” à la clé “args”.

Vérification de la configuration :

Lancement du worker EKS nodes :

En utilisant un template Cloudformation fourni par AWS, vous pouvez créer les worker nodes avec cette commande :

Téléchargez et configurez AWS authenticator map :

Téléchargez, avec la commande

curl -O https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/aws-auth-cm.yaml

AWS authenticator map pour Kubectl et attribuez à la clé “rolearn” la valeur de IAM role “NodeInstanceRole” créée par la stack “demo-worker-nodes”.

Appliquez la configuration :

Pour appliquer la configuration il faut taper la commande :

Vérifiez que les noeuds sont bien installés :

Avec la commande

kubectl get nodes --watch

on peut vérifier l’état des noeuds qui doivent être “Ready”:

Maintenant on est prêt à déployer les conteneurs dans AWS :

Il faut vérifier que les pods ont bien fonctionné :

Extraire l’adresse du load balancer :

Enfin, testez les conteneurs en utilisant l’URL affichée dans “EXTERNAL-IP” :

 

Voilà ! Vous avez pu découvrir l’utilisation du service EKS à travers cette démo, en commençant par la création du Cluster, puis celle des noeuds Worker,  la connexion sécurisée du Kubectl avec le cluster et enfin le déploiement des conteneurs en utilisant les commandes du Kubectl.

Si vous voulez tester chez vous, voici le lien Github de la démo.

 

Commentaires :

A lire également sur le sujet :