Démarrage rapide : déploiement d'une application Web et stockage des données - Amazon EKS

Aidez à améliorer cette page

Vous souhaitez contribuer à ce guide de l'utilisateur ? Faites défiler cette page vers le bas et sélectionnez Modifier cette page sur GitHub. Vos contributions aideront à améliorer notre guide de l'utilisateur pour tous.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Démarrage rapide : déploiement d'une application Web et stockage des données

Ce didacticiel de démarrage rapide explique les étapes à suivre pour déployer l'exemple d'application de jeu 2048 et conserver ses données sur un EKS cluster Amazon à l'aide d'eksctl. eksctl est un infrastructure-as-code utilitaire qui vous permet de configurer un cluster entièrement fonctionnel, avec tous les composants essentiels. AWS CloudFormation Ces composants incluent un Amazon VPC et un IAM rôle conçu pour fournir des autorisations aux AWS services que nous avons définis. Au fur et à mesure de notre progression, nous vous expliquerons le processus de configuration du cluster, en incorporant Amazon EKS EKSModules complémentaires Amazon pour doter votre cluster de capacités opérationnelles. Enfin, vous allez déployer un exemple de charge de travail avec les annotations personnalisées requises pour une intégration complète aux AWS services.

Dans ce tutoriel

À l'aide du modèle de cluster eksctl ci-dessous, vous allez créer un EKS cluster Amazon avec des groupes de nœuds gérés. Il configure les composants suivants :

VPCConfiguration

Lorsque vous utilisez le modèle de cluster eksctl qui suit, eksctl crée automatiquement un cloud privé IPv4 virtuel (VPC) pour le cluster. Par défaut, eksctl configure un VPC qui répond à toutes les exigences du réseau, en plus de créer des points de terminaison publics et privés.

Type d’instance

Utilisez le type d'instance t3.medium. Ce type d'instance offre une combinaison équilibrée de ressources de calcul, de mémoire et de réseau, idéale pour les applications à CPU utilisation modérée susceptibles de connaître des pics de demande occasionnels.

Authentification

Établissez les IRSA mappages pour faciliter la communication entre les pods et les services Kubernetes. AWS Le modèle est configuré pour configurer un point de terminaison OpenID Connect (OIDC) pour l'authentification et l'autorisation. Il établit également un compte de service pour le AWS Load Balancer Controller (LBC), un contrôleur chargé d'exposer les applications et de gérer le trafic.

Persistance des données

Intégrez le module complémentaire géré par le AWS EBSCSIpilote pour garantir la persistance des données d'application, même dans les scénarios impliquant le redémarrage ou la défaillance du pod. Le modèle est configuré pour installer le module complémentaire et établir un compte de service

Accès aux applications externes

Configurez et intégrez le module complémentaire AWS Load Balancer Controller (LBC) pour exposer l'application de jeu 2048, en utilisant le LBC pour provisionner dynamiquement un Application Load Balancer (). ALB

Prérequis

Étape 1 : Configuration du cluster

Dans cette section, vous allez créer un cluster géré basé sur un groupe de nœuds à l'aide d'instances t3.medium contenant deux nœuds. La configuration inclut un compte de service pour le module complémentaire AWS Load Balancer Controller (LBC) et l'installation de la dernière version du pilote AWS Amazon EBS CSI. Pour connaître tous les eksctl modules complémentaires disponibles, consultez la section Découverte des modules complémentaires dans eksctl la documentation.

  • Créez un cluster-config.yaml fichier et collez-y le contenu suivant. Remplacez le code de région par une région valide, telle que us-east-1

    L'exemple de sortie se présente comme suit :

    apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: web-quickstart region: region-code managedNodeGroups: - name: eks-mng instanceType: t3.medium desiredCapacity: 2 iam: withOIDC: true serviceAccounts: - metadata: name: aws-load-balancer-controller namespace: kube-system wellKnownPolicies: awsLoadBalancerController: true addons: - name: aws-ebs-csi-driver wellKnownPolicies: # Adds an IAM service account ebsCSIController: true cloudWatch: clusterLogging: enableTypes: ["*"] logRetentionInDays: 30

Étape 2 : Création du cluster

Nous sommes maintenant prêts à créer notre EKS cluster Amazon. Ce processus prend plusieurs minutes. Si vous souhaitez surveiller l'état, consultez la AWS CloudFormationconsole.

  • Créez le EKS cluster Amazon et spécifiez le cluster-config.yaml.

    eksctl create cluster -f cluster-config.yaml
    Note

    Si vous recevez un Error: checking STS access in dans la réponse, assurez-vous que vous utilisez l'identité d'utilisateur correcte pour la session shell en cours. Vous devrez peut-être également spécifier un profil nommé (par exemple,--profile clusteradmin) ou obtenir un nouveau jeton de sécurité pour le AWS CLI.

    À la fin, vous devriez voir le résultat de réponse suivant :

    2024-07-04 21:47:53 [✔] EKS cluster "web-quickstart" in "region-code" region is ready

Étape 3 : configurer l'accès externe aux applications à l'aide du AWS Load Balancer Controller (LBC)

Le cluster étant opérationnel, notre prochaine étape consiste à rendre ses applications conteneurisées accessibles de l'extérieur. Cela se fait en déployant un Application Load Balancer (ALB) pour diriger le trafic extérieur au cluster vers nos services, en d'autres termes, nos applications. Lorsque nous avons créé notre cluster, nous avons établi un IAMrôle pour les comptes de service (IRSA) pour le Load Balancer Controller (LBC) avec les autorisations nécessaires pour créer dynamiquementALBs, facilitant ainsi le routage du trafic externe vers nos services Kubernetes. Dans cette section, nous allons configurer le AWS LBC sur notre cluster.

Pour configurer les variables d'environnement

  1. Définissez la variable d'CLUSTER_REGIONenvironnement pour votre EKS cluster Amazon. Remplacez la valeur d’exemple de region-code.

    export CLUSTER_REGION=region-code
  2. Définissez la variable d'CLUSTER_VPCenvironnement pour votre EKS cluster Amazon.

    export CLUSTER_VPC=$(aws eks describe-cluster --name web-quickstart --region $CLUSTER_REGION --query "cluster.resourcesVpcConfig.vpcId" --output text)

Pour installer le AWS Load Balancer Controller () LBC

Le AWS Load Balancer Controller (LBC) utilise les définitions de ressources personnalisées () de Kubernetes pour gérer AWS les Elastic Load Balancers (CRDs). ELBs Ils CRDs définissent des ressources personnalisées telles que les équilibreurs de charge et TargetGroupBindings, en activant Kubernetes cluster pour les reconnaître et les gérer.

  1. Utilisez Helm pour ajouter le référentiel de EKS graphiques Amazon à Helm.

    helm repo add eks https://aws.github.io/eks-charts
  2. Mettez à jour les référentiels pour que Helm soit au courant des dernières versions des graphiques :

    helm repo update eks
  3. Exécutez la commande Helm suivante pour installer simultanément les définitions de ressources personnalisées (CRDs) et le contrôleur principal du AWS Load Balancer Controller ()AWS LBC. Pour ignorer l'CRDinstallation, passez le --skip-crds drapeau, ce qui peut être utile s'CRDsils sont déjà installés, si une compatibilité de version spécifique est requise ou dans des environnements soumis à des exigences strictes en matière de contrôle d'accès et de personnalisation.

    helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ --namespace kube-system \ --set clusterName=web-quickstart \ --set serviceAccount.create=false \ --set region=${CLUSTER_REGION} \ --set vpcId=${CLUSTER_VPC} \ --set serviceAccount.name=aws-load-balancer-controller

    Le résultat de la réponse devrait être le suivant :

    NAME: aws-load-balancer-controller LAST DEPLOYED: Wed July 3 19:43:12 2024 NAMESPACE: kube-system STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: AWS Load Balancer controller installed!

Étape 4 : Déployer l'exemple d'application du jeu 2048

Maintenant que l'équilibreur de charge est configuré, il est temps d'activer l'accès externe pour les applications conteneurisées du cluster. Dans cette section, nous vous expliquons les étapes à suivre pour déployer le célèbre « jeu 2048 » en tant qu'exemple d'application au sein du cluster. Le manifeste fourni inclut des annotations personnalisées pour l'Application Load Balancer ALB (), en particulier l'annotation « schéma » et l'annotation « type cible ». Ces annotations s'intègrent au AWS Load Balancer Controller LBC () et lui demandent de gérer le trafic HTTP entrant comme « orienté vers Internet » et de l'acheminer vers le service approprié dans l'espace de noms « game-2048 » en utilisant le type de cible « ip ». Pour plus d'annotations, consultez la section Annotations dans la AWS LBC documentation.

  1. Créez un espace de noms Kubernetes appelé game-2048 avec le drapeau. --save-config

    kubectl create namespace game-2048 --save-config

    Le résultat de la réponse devrait être le suivant :

    namespace/game-2048 created
  2. Déployez l'application 2048 Game Sample.

    kubectl apply -n game-2048 -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.8.0/docs/examples/2048/2048_full.yaml

    Ce manifeste définit un déploiement, un service et une entrée Kubernetes pour l'espace de game-2048 noms, créant ainsi les ressources nécessaires pour déployer et exposer l'application au sein du game-2048 cluster. Cela inclut la création d'un service nommé service-2048 qui expose le déploiement sur le port80, et d'une ressource d'entrée nommée ingress-2048 qui définit les règles de routage pour le HTTP trafic entrant et les annotations pour un Application Load Balancer () connecté à Internet. ALB Le résultat de la réponse devrait être le suivant :

    namespace/game-2048 configured deployment.apps/deployment-2048 created service/service-2048 created ingress.networking.k8s.io/ingress-2048 created
  3. Exécutez la commande suivante pour obtenir la ressource Ingress pour l'espace de game-2048 noms.

    kubectl get ingress -n game-2048

    Le résultat de la réponse devrait être le suivant :

    NAME CLASS HOSTS ADDRESS PORTS AGE ingress-2048 alb * k8s-game2048-ingress2-eb379a0f83-378466616.region-code.elb.amazonaws.com 80 31s

    Vous devrez attendre plusieurs minutes le temps que l'Application Load Balancer (ALB) soit provisionné avant de commencer les étapes suivantes.

  4. Ouvrez un navigateur Web et entrez le code ADDRESS de l'étape précédente pour accéder à l'application Web. Par exemple, k8s-game2048-ingress2-eb379a0f83-378466616.region-code.elb.amazonaws.com. Vous devriez voir le jeu 2048 dans votre navigateur. Jouez !

    Jouer au jeu 2048

Étape 5 : conserver les données à l'aide des nœuds Amazon EBS CSI Driver

Maintenant que le jeu 2048 est opérationnel sur votre EKS cluster Amazon, il est temps de vous assurer que vos données de jeu sont conservées en toute sécurité à l'aide du module complémentaire géré par Amazon EBS CSI Driver. Ce module complémentaire a été installé sur notre cluster lors du processus de création. Cette intégration est essentielle pour préserver la progression et les données du jeu même lorsque les pods ou nœuds Kubernetes sont redémarrés ou remplacés.

  1. Créez une classe de stockage pour le EBS CSI pilote :

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/examples/kubernetes/dynamic-provisioning/manifests/storageclass.yaml
  2. Créez une réclamation de volume persistante (PVC) pour demander le stockage de vos données de jeu. Créez un fichier nommé ebs-pvc.yaml et ajoutez-y le contenu suivant :

    apiVersion: v1 kind: PersistentVolumeClaim metadata: name: game-data-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: ebs-sc
  3. Appliquez le PVC à votre cluster :

    kubectl apply -f ebs-pvc.yaml

    Le résultat de la réponse devrait être le suivant :

    persistentvolumeclaim/game-data-pvc created
  4. Vous devez maintenant mettre à jour le déploiement de votre jeu 2048 pour l'utiliser PVC pour stocker des données. Le déploiement suivant est configuré pour utiliser le PVC pour stocker les données de jeu. Créez un fichier nommé ebs-deployment.yaml et ajoutez-y le contenu suivant :

    apiVersion: apps/v1 kind: Deployment metadata: namespace: game-2048 name: deployment-2048 spec: replicas: 3 # Adjust the number of replicas as needed selector: matchLabels: app.kubernetes.io/name: app-2048 template: metadata: labels: app.kubernetes.io/name: app-2048 spec: containers: - name: app-2048 image: public.ecr.aws/l6m2t8p7/docker-2048:latest imagePullPolicy: Always ports: - containerPort: 80 volumeMounts: - name: game-data mountPath: /var/lib/2048 volumes: - name: game-data persistentVolumeClaim: claimName: game-data-pvc
  5. Appliquez le déploiement mis à jour :

    kubectl apply -f ebs-deployment.yaml

    Le résultat de la réponse devrait être le suivant :

    deployment.apps/deployment-2048 configured

Grâce à ces étapes, votre jeu 2048 sur Amazon EKS est désormais configuré pour conserver les données à l'aide du EBS CSI pilote Amazon. Cela garantit la sécurité de votre progression et de vos données dans le jeu, même en cas de défaillance d'un pod ou d'un nœud. Si vous avez aimé ce didacticiel, faites-le nous savoir en nous faisant part de vos commentaires afin que nous puissions vous proposer d'autres didacticiels de démarrage rapide spécifiques à des cas d'utilisation, comme celui-ci.

Étape 6 : supprimer votre cluster et vos nœuds

Une fois que vous avez fini d'utiliser le cluster et les nœuds que vous avez créés pour ce didacticiel, vous devez effectuer un nettoyage en supprimant le cluster et les nœuds avec la commande suivante. Si vous souhaitez utiliser davantage ce cluster avant de le nettoyer, reportez-vous à la section Étapes suivantes.

eksctl delete cluster -f ./cluster-config.yaml

À la fin, vous devriez voir le résultat de réponse suivant :

2024-07-05 17:26:44 [✔] all cluster resources were deleted

Étapes suivantes

Les rubriques de documentation suivantes vous aident à étendre les fonctionnalités de votre cluster :

Pour découvrir comment créer différents types de clusters, procédez comme suit :