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