Déploiement d'une appli web conteneurisée sur Amazon EKS

GUIDE DE MISE EN ROUTE

Module 4 : déploiement avec AWS CDK

Dans ce module, vous créerez un déploiement à l'aide de CDK et vous lancerez votre application.

Introduction

Dans ce module, nous déploierons une application dans votre tout nouveau cluster EKS, à l'aide des fichiers de configuration générés par CDK8S depuis le module précédent. Ces fichiers de configuration seront utilisés par le kit CDK afin de déployer l'application.

Ce que vous apprendrez

  • Intégrer AWS CDK8S à AWS CDK
  • Déploiement à l'aide d'AWS CDK
  • Utiliser le cluster avec Kubectl

 Durée

10 minutes

 Prérequis du module

  • Compte AWS avec accès administrateur**
  • Dernière version de Chrome ou de Firefox (recommandé)

[**] Les comptes créés dans les dernières 24 heures sont susceptibles de ne pas encore avoir accès aux services nécessaires pour ce didacticiel.

Implémentation

Définir l'application

Les fichiers de configuration Kubernetes sont stockées au format Yaml, vous devez donc importer la bibliothèque yaml afin de les analyser. Ajoutez l'importation yaml sous les autres importations en haut de eks/cluster/cluster/cluster_stack

Vous ajouterez ensuite deux blocs de code afin de lire les deux fichiers Yaml en variables à passer au cluster :

# Read the deployment config
with open("../cdk8s/dist/cdk8s-deployment.k8s.yaml", 'r') as stream:
      deployment_yaml = yaml.load(stream, Loader=yaml.FullLoader)

# Read the service config
with open("../cdk8s/dist/cdk8s-service.k8s.yaml", 'r') as stream:
      service_yaml = yaml.load(stream, Loader=yaml.FullLoader)

Vous passerez ensuite ces fichiers Yaml au cluster EKS à l'aide de la méthode add_manifest, une fois pour chaque fichier :

eks_cluster.add_manifest(f"{construct_id}-app-deployment", yaml_app_deployment)

eks_cluster.add_manifest(f"{construct_id}-app-service", yaml_app_service)

Votre fichier cluster_stack.py se présentera comme suit :

from aws_cdk import core as cdk
from aws_cdk import aws_iam as iam
from aws_cdk import aws_eks as eks
from aws_cdk import aws_ec2 as ec2
import yaml

class ClusterStack(cdk.Stack):

    def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # Look up the default VPC
        vpc = ec2.Vpc.from_lookup(self, id="VPC", is_default=True)

        # Create master role for EKS Cluster
        iam_role = iam.Role(self, id=f"{construct_id}-iam",
                            role_name=f"{construct_id}-iam", assumed_by=iam.AccountRootPrincipal())

        # Creating Cluster with EKS
        eks_cluster = eks.Cluster(
            self, id=f"{construct_id}-cluster", 
            cluster_name=f"{construct_id}-cluster", 
            vpc=vpc, 
            vpc_subnets=vpc.public_subnets, 
            masters_role=iam_role, 
            default_capacity_instance=ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.MICRO), 
            version=eks.KubernetesVersion.V1_20,
        )

# Read the deployment config
with open("../cdk8s/dist/cdk8s-deployment.k8s.yaml", 'r') as stream:
      deployment_yaml = yaml.load(stream, Loader=yaml.FullLoader)

# Read the service config
with open("../cdk8s/dist/cdk8s-service.k8s.yaml", 'r') as stream:
      service_yaml = yaml.load(stream, Loader=yaml.FullLoader)

eks_cluster.add_manifest(f"{construct_id}-app-deployment", deployment_yaml)

eks_cluster.add_manifest(f"{construct_id}-app-service", service_yaml)

Afin de déployer l'application, nous devons basculer vers le répertoire eks/cluster. Si vous êtes actuellement dans le répertoire eks/cdk8s, exécutez la commande suivante (sinon, changez pour eks/cluster) :

cd ../cluster
cdk deploy

Une fois que AWS CDK a déployé la pile d'application, nous pouvons vérifier les statuts des pods avec kubectl. Avant d'utiliser kubectl, assurez-vous d'utiliser le bon contexte avec la commande kubectl config current-context.

Pour afficher le statut de l'application dans les pods, nous pouvons utiliser la commande kubectl get all et visualiser les résultats suivants :

$ kubectl get all
NAME                                             READY   STATUS    RESTARTS   AGE
pod/cdk8s-deployment-c8087a1b-659fb88f56-6qj52   1/1     Running   0          3m22s
pod/cdk8s-deployment-c8087a1b-659fb88f56-s82ft   1/1     Running   0          3m22s

NAME                             TYPE           CLUSTER-IP      EXTERNAL-IP                                                                    PORT(S)        AGE
service/cdk8s-service-c844e1e1   LoadBalancer   xxx.xxx.xxx.xxx   xxxxxxxxxxxxxx.eu-west-1.elb.amazonaws.com   80:30132/TCP   3m22s
service/kubernetes               ClusterIP      xxx.xxx.xxx.xxx      <none>                                                                         443/TCP        4h17m

NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/cdk8s-deployment-c8087a1b   2/2     2            2           3m22s

NAME                                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/cdk8s-deployment-c8087a1b-659fb88f56   2         2         2       3m22s

Afin de tester l'application, vous pouvez copier l'EXTERNAL-IP depuis la valeur LoadBalancer ci-dessus et l'ouvrir dans votre navigateur. Le résultat ressemblera à xxxxxxxxxxxxxx.eu-west-1.elb.amazonaws.com

Une fois chargée, vous verrez cette page :

Vous avez déployé avec succès une application dans un cluster Kubernetes à l'aide de CDK, afin d'approvisionner le cluster et de déployer les fichiers manifestes générés par CDK8S.

Conclusion

Dans ce guide, vous avez appris à utiliser les fichiers de configuration Kubernetes générés par CDK8S et à les déployer dans votre cluster EKS à l'aide de CDK. Dans le module suivant, vous procéderez au nettoyage de toutes les ressources créées dans ce guide.

À suivre : nettoyage des ressources

Dites-nous si nous avons répondu à vos attentes.