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

GUIDE DE MISE EN ROUTE

Module 1 : créer un cluster EKS

Dans ce module, vous apprendrez à créer un cluster Amazon EKS.

Introduction

Avant de déployer l'application conteneurisée, nous devons créer un cluster Kubernetes. Pour ce faire, nous utiliserons Amazon EKS. Dans ce guide, le cluster Amazon EKS comporte un plan de contrôle et utilise Amazon EC2 en tant que composants master. Nous allons utiliser AWS CDK afin de créer le cluster Kubernetes. AWS CDK offre de la flexibilité pour permettre l'approvisionnement d'un cluster Kubernetes de façon prévisible et reproductible.

Ce que vous apprendrez

  • Concevoir une application AWS CDK pour créer un cluster Amazon EKS avec Amazon EC2 en tant que composants master
  • Tester et exécuter des opérations de base sur un cluster Kubernetes

 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

Une fois que vous avez défini le rôle IAM et le cluster EKS, l'étape suivante consiste à déployer la pile CDK. Vous devez au préalable configurer CDK afin de savoir quel ID de compte et quelle région utiliser en modifiant eks/cluster/app.py et en supprimant les commentaires de la ligne 24 :

Concevoir une application AWS CDK

Au cours de cette étape, vous préparerez vos dossiers de travail. Vous créerez deux dossiers différents au sein du dossier racine eks. Le premier dossier, k8s-cluster, est destiné à la création du cluster et hébergera votre code CDK pour le créer. Le deuxième dossier, cdk8s, contiendra le code pour créer et déployer votre application sur le cluster à l'aide de cdk8s. Créez les répertoires puis créez votre projet CDK à l'aide de Python en exécutant :

mkdir eks
cd eks
mkdir cluster cdk8s
cd cluster

cdk init app --language=python

Cela créera le squelette de l'appli CDK, ainsi que quelques sorties de commande utiles :

cdk init app --language=python
Applying project template app for python

# Welcome to your CDK Python project!

This is a blank project for Python development with CDK.

The `cdk.json` file tells the CDK Toolkit how to execute your app.

...

To add additional dependencies, for example other CDK libraries, just add
them to your `setup.py` file and rerun the `pip install -r requirements.txt`
command.

## Useful commands

 * `cdk ls`          list all stacks in the app
 * `cdk synth`       emits the synthesized CloudFormation template
 * `cdk deploy`      deploy this stack to your default AWS account/region
 * `cdk diff`        compare deployed stack with current state
 * `cdk docs`        open CDK documentation

Enjoy!

Please run 'python3 -m venv .venv'!
Executing Creating virtualenv...

Veuillez vous assurer d'exécuter python3 -m venv .venv par la suite.

Les deux ressources principales que vous devez créer dans ce module sont le cluster Amazon EKS et le rôle IAM AWS. En créant un rôle IAM et en l'attachant au cluster, il attribuera des privilèges aux maîtres du système. Pour ce faire, nous devons ajouter les bibliothèques aws_cdk.aws-iam et aws_cdk.aws-eks à notre application CDK. Les bibliothèques aws_cdk.aws-ec2 et pyyaml sont requises pour l'étape de déploiement. Vous devez vous assurer d'utiliser les bibliothèques correspondant à votre version de CDK. Afin de vérifier la version de CDK, exécutez cdk --version :

cdk --version

1.121.0 (build 026cb8f)

À l'aide du numéro de version qui s'affiche, ouvrez eks/cluster/requirements.txt et ajoutez les lignes suivantes :

aws_cdk.core==1.121.0
aws_cdk.aws-iam==1.121.0
aws_cdk.aws-eks==1.121.0
aws_cdk.aws_ec2==1.121.0
pyyaml

Afin d'installer ces bibliothèques, exécutez pip3 install -r requirements.txt.

La création d'un nouveau VPC est une bonne pratique pour la conception d'un cluster Kubernetes à l'aide EKS. Pour en savoir plus, consultez la documentation. Dans ce guide, nous utiliserons le VPC par défaut fourni avec chaque nouveau compte afin de simplifier le déploiement. Afin de créer votre cluster EKS, ouvrez eks/cluster/cluster_stack.py et ajoutez les lignes suivantes :

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


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,
        )

Une fois que vous avez défini le rôle IAM et le cluster EKS, l'étape suivante consiste à déployer la pile CDK. Vous devez au préalable configurer CDK afin de savoir quel ID de compte et quelle région utiliser en modifiant eks/cluster/app.py et en supprimant les commentaires de la ligne 24 :

env=core.Environment(account=os.getenv('CDK_DEFAULT_ACCOUNT'), region=os.getenv('CDK_DEFAULT_REGION')),

Cette opération utilisera l'ID de compte et la région configurés dans l'AWS CLI. Avant toute utilisation, le kit CDK doit être amorcé. Cette action a pour but de créer l'infrastructure dont a besoin le kit CDK pour gérer l'infrastructure de votre compte. Pour amorcer le kit CDK, exécutez cdk bootstrap. Le résultat devrait être similaire à celui-ci :

cdk bootstrap

#output
⏳  Bootstrapping environment aws://0123456789012/<region>...
✅  Environment aws://0123456789012/<region> bootstrapped

Au terme de l'action d'amorçage, vous exécuterez cdk deploy pour déployer le cluster. 

cdk deploy

Le résultat devrait être similaire à celui-ci :

gsg_build_eks_1

CDK vous interroge avant de créer l'infrastructure, car la création de l'infrastructure modifie la configuration de sécurité, dans votre cas, en créant des rôles IAM et des groupes de sécurité. Appuyez sur y puis sur Entrée pour déployer. CDK configure maintenant toute l'infrastructure que vous avez définie, ce qui prend quelques minutes. 

En cas de réussite de l'opération, vous obtiendrez les résultats suivants à la fin de l'exécution :

✅  ClusterStack

Outputs:
ClusterStack.ClusterStackclusterConfigCommand1CAA6E63 = aws eks update-kubeconfig --name ClusterStack-cluster --region eu-west-1 --role-arn arn:aws:iam::0123456789012:role/ClusterStack-iam
ClusterStack.ClusterStackclusterGetTokenCommand010D10BE = aws eks get-token --cluster-name ClusterStack-cluster --region eu-west-1 --role-arn arn:aws:iam::0123456789012:role/ClusterStack-iam
ClusterStack.ClusterStackoutclusterName = ClusterStack-cluster
ClusterStack.ClusterStackouteksSgId = sg-08b0517c72f0e2696
ClusterStack.ClusterStackoutkubectlRoleArn = arn:aws:iam::0123456789012:role/ClusterStack-ClusterStackclusterCreationRole9D9F21-29ZO9XWJLC4Q
ClusterStack.ClusterStackoutoidcArn = arn:aws:iam::0123456789012:oidc-provider/oidc.eks.eu-west-1.amazonaws.com/id/168AAF8C86B3F46909C6014D942FD39C
ClusterStack.ClusterStackoutvpcAz = ['eu-west-1a', 'eu-west-1b', 'eu-west-1c']
ClusterStack.ClusterStackoutvpcId = vpc-b8e25ec1

Stack ARN:
arn:aws:cloudformation:eu-west-1:0123456789012:stack/ClusterStack/91f4c430-1225-11ec-bb6c-027a967aed43

Trois avertissements s'afficheront et seront similaires à :

[Warning at /ClusterStack/ClusterStack-cluster] Could not auto-tag public subnet subnet-3a618f43 with "kubernetes.io/role/elb=1", please remember to do this manually

Ce guide utilise Kubernetes 1.20, et l'étiquetage des sous-réseaux n'était utilisé qu'avant 1.19. Vous pouvez donc ignorer ces avertissements. Votre cluster est prêt. Afin de l'exécuter, vous devez mettre à jour et régler la configuration Kubernetes (kubeconfig) afin que la commande kubectl fonctionne. Copiez la commande ConfigCommand depuis votre sortie de terminal et exécutez-la. Le résultat suivant devrait s'afficher :

aws eks update-kubeconfig --name ClusterStack-cluster --region eu-west-1 --role-arn arn:aws:iam::0123456789012:role/ClusterStack-iam
Added ew context arn:aws:eks:eu-west-1:0123456789012:cluster/ClusterStack-cluster to /home/ubuntu/.kube/config

Afin de confirmer que tout est correctement configuré, exécutez kubectl get all. Le résultat suivant devrait s'afficher :

kubectl get all

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   xxx.xxx.xxx.xxx   <none>        443/TCP   15m

Conclusion

Dans ce module, nous avons abordé la création d'un cluster Amazon EKS à l'aide de la CLI. Dans le module suivant, nous installerons et découvrirons CDK8S.

À suivre : installer CDK8S

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

Nous vous remercions pour votre commentaire
Nous sommes ravis que cette page vous ait été utile. Souhaitez-vous partager des détails supplémentaires pour nous aider à continuer à nous améliorer ?
Fermer
Nous vous remercions pour votre commentaire
Nous sommes désolés que cette page ne vous ait pas été utile. Souhaitez-vous partager des détails supplémentaires pour nous aider à continuer à nous améliorer ?
Fermer