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éployez un exemple de microservice Java sur Amazon EKS et exposez le microservice à l'aide d'un Application Load Balancer
Créée par Vijay Thompson (AWS) et Akkamahadevi Hiremath (AWS)
Récapitulatif
Ce modèle décrit comment déployer un exemple de microservice Java en tant qu'application conteneurisée sur Amazon Elastic Kubernetes Service (Amazon EKS) à l'eksctl
aide de l'utilitaire de ligne de commande et d'Amazon Elastic Container Registry (Amazon ECR). Vous pouvez utiliser un Application Load Balancer pour équilibrer la charge du trafic des applications.
Conditions préalables et limitations
Prérequis
Un compte AWS actif
Interface de ligne de commande AWS (AWS CLI) version 1.7 ou ultérieure, installée et configurée sur macOS, Linux ou Windows
Un démon Docker en cours d'
exécution L'utilitaire de ligne de
eksctl
commande, installé et configuré sous macOS, Linux ou Windows (pour plus d'informations, consultez Getting started with Amazon EKS — eksctl dans la documentation Amazon EKS.)L'utilitaire de ligne de
kubectl
commande, installé et configuré sous macOS, Linux ou Windows (pour plus d'informations, consultez Installation ou mise à jour de kubectl dans la documentation Amazon EKS.)
Limites
Ce modèle ne couvre pas l'installation d'un certificat SSL pour l'Application Load Balancer.
Architecture
Pile technologique cible
Amazon ECR
Amazon EKS
Elastic Load Balancing
Architecture cible
Le schéma suivant montre une architecture permettant de conteneuriser un microservice Java sur Amazon EKS.

Outils
Amazon Elastic Container Registry (Amazon ECR) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
Amazon Elastic Kubernetes Service (Amazon EKS) vous aide à exécuter Kubernetes sur AWS sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
L'interface de ligne de commande AWS (AWS CLI) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.
Elastic Load Balancing distribue automatiquement votre trafic entrant sur plusieurs cibles, telles que les instances, les conteneurs et les adresses IP Amazon Elastic Compute Cloud (Amazon EC2), dans une ou plusieurs zones de disponibilité.
eksctl
vous aide à créer des clusters sur Amazon EKS. kubectl permet d'
exécuter des commandes sur des clusters Kubernetes. Docker
vous permet de créer, de tester et de fournir des applications dans des packages appelés conteneurs.
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Créez un cluster Amazon EKS. | Pour créer un cluster Amazon EKS qui utilise deux EC2 instances Amazon t2.small comme nœuds, exécutez la commande suivante :
NoteLe processus peut prendre entre 15 et 20 minutes. Une fois le cluster créé, la configuration Kubernetes appropriée est ajoutée à votre fichier kubeconfig. Vous pouvez utiliser le | Développeur, administrateur système |
Vérifiez le cluster Amazon EKS. | Pour vérifier que le cluster est créé et que vous pouvez vous y connecter, exécutez la | Développeur, administrateur système |
Tâche | Description | Compétences requises |
---|---|---|
Créez un référentiel Amazon ECR. | Suivez les instructions de la section Création d'un référentiel privé dans la documentation Amazon ECR. | Développeur, administrateur système |
Créez un fichier XML POM. | Créez un | Développeur, administrateur système |
Créez un fichier source. | Créez un fichier source appelé
Veillez à utiliser la structure de répertoire suivante :
| |
Créez un fichier Dockerfile. | Créez un code | Développeur, administrateur système |
Créez et publiez l'image Docker. | Dans le répertoire dans lequel vous souhaitez
NoteModifiez la région AWS, le numéro de compte et les détails du référentiel dans les commandes précédentes. N'oubliez pas de noter l'URL de l'image pour une utilisation ultérieure. ImportantUn système macOS doté d'une puce M1 ne parvient pas à créer une image compatible avec Amazon EKS exécuté sur une AMD64 plate-forme. Pour résoudre ce problème, utilisez docker buildx |
Tâche | Description | Compétences requises |
---|---|---|
Créez un fichier de déploiement. | Créez un fichier YAML appelé en NoteUtilisez l'URL de l'image que vous avez copiée précédemment comme chemin du fichier image pour le référentiel Amazon ECR. | Développeur, administrateur système |
Déployez les microservices Java sur le cluster Amazon EKS. | Pour créer un déploiement dans votre cluster Amazon EKS, exécutez la | Développeur, administrateur système |
Vérifiez l'état des capsules. |
| Développeur, administrateur système |
Créer un service. |
| Développeur, administrateur système |
Installez le module complémentaire AWS Load Balancer Controller. | Suivez les instructions de la section Installation du module complémentaire AWS Load Balancer Controller dans la documentation Amazon EKS. NoteLe module complémentaire doit être installé pour créer un Application Load Balancer ou un Network Load Balancer pour un service Kubernetes. | Développeur, administrateur système |
Créez une ressource d'entrée. | Créez un fichier YAML appelé en | Développeur, administrateur système |
Créez un Application Load Balancer. | Pour déployer la ressource d'entrée et créer un Application Load Balancer, exécutez | Développeur, administrateur système |
Tâche | Description | Compétences requises |
---|---|---|
Testez et vérifiez l'application. |
| Développeur, administrateur système |
Ressources connexes
Création d'un référentiel privé (documentation Amazon ECR)
Transférer une image Docker (documentation Amazon ECR)
Contrôleurs d'entrée
(Amazon EKS Workshop)
Informations supplémentaires
Exemple de fichier POM
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>helloWorld</groupId> <artifactId>helloWorld</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.sparkjava</groupId><artifactId>spark-core</artifactId><version>2.0.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version> <configuration><finalName>eksExample</finalName><archive><manifest> <addClasspath>true</addClasspath><mainClass>eksExample.HelloWorld</mainClass><classpathPrefix>dependency-jars/</classpathPrefix> </manifest></archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version> <configuration><source>1.8</source><target>1.8</target></configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <goals><goal>attached</goal></goals><phase>package</phase> <configuration> <finalName>eksExample</finalName> <descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs> <archive><manifest><mainClass>eksExample.HelloWorld</mainClass></manifest></archive> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
Exemple de Dockerfile
FROM bellsoft/liberica-openjdk-alpine-musl:17 RUN apk add maven WORKDIR /code # Prepare by downloading dependencies ADD pom.xml /code/pom.xml RUN ["mvn", "dependency:resolve"] RUN ["mvn", "verify"] # Adding source, compile and package into a fat jar ADD src /code/src RUN ["mvn", "package"] EXPOSE 4567 CMD ["java", "-jar", "target/eksExample-jar-with-dependencies.jar"]
Exemple de fichier de déploiement
apiVersion: apps/v1 kind: Deployment metadata: name: microservice-deployment spec: replicas: 2 selector: matchLabels: app.kubernetes.io/name: java-microservice template: metadata: labels: app.kubernetes.io/name: java-microservice spec: containers: - name: java-microservice-container image: .dkr.ecr.amazonaws.com/: ports: - containerPort: 4567
Exemple de fichier de service
apiVersion: v1 kind: Service metadata: name: "service-java-microservice" spec: ports: - port: 80 targetPort: 4567 protocol: TCP type: NodePort selector: app.kubernetes.io/name: java-microservice
Exemple de fichier de ressources d'entrée
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: "java-microservice-ingress" annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/load-balancer-name: apg2 alb.ingress.kubernetes.io/target-type: ip labels: app: java-microservice spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: "service-java-microservice" port: number: 80