Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menerapkan contoh layanan mikro Java di Amazon EKS dan mengekspos layanan mikro menggunakan Application Load Balancer
Vijay Thompson dan Akkamahadevi Hiremath, Amazon Web Services
Ringkasan
Pola ini menjelaskan cara menerapkan contoh layanan mikro Java sebagai aplikasi kontainer di Amazon Elastic Kubernetes Service (Amazon EKS) dengan menggunakan eksctl utilitas baris perintah dan Amazon Elastic Container Registry (Amazon ECR). Anda dapat menggunakan Application Load Balancer untuk memuat keseimbangan lalu lintas aplikasi.
Prasyarat dan batasan
Prasyarat
Akun AWS yang aktif
AWS Command Line Interface (AWS CLI) versi 1.7 atau yang lebih baru, diinstal dan dikonfigurasi di macOS, Linux, atau Windows
Daemon Docker
yang sedang berjalan Utilitas baris
eksctlperintah, diinstal dan dikonfigurasi di macOS, Linux, atau Windows (Untuk informasi selengkapnya, lihat Memulai Amazon EKS — eksctl dalam dokumentasi Amazon EKS.)Utilitas baris
kubectlperintah, diinstal dan dikonfigurasi di macOS, Linux, atau Windows (Untuk informasi selengkapnya, lihat Menginstal atau memperbarui kubectl dalam dokumentasi Amazon EKS.)
Batasan
Pola ini tidak mencakup pemasangan sertifikat SSL untuk Application Load Balancer.
Arsitektur
Tumpukan teknologi target
Amazon ECR
Amazon EKS
Penyeimbang Beban Elastis
Arsitektur target
Diagram berikut menunjukkan arsitektur untuk containerizing Java microservice di Amazon EKS.

Alat
Amazon Elastic Container Registry (Amazon ECR) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.
Amazon Elastic Kubernetes Service (Amazon EKS) membantu Anda menjalankan Kubernetes di AWS tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.
AWS Command Line Interface (AWS CLI) adalah alat sumber terbuka yang membantu Anda berinteraksi dengan layanan AWS melalui perintah di shell baris perintah Anda.
Elastic Load Balancing secara otomatis mendistribusikan lalu lintas masuk ke beberapa target, seperti instans Amazon Elastic Compute Cloud ( EC2Amazon), container, dan alamat IP, dalam satu atau beberapa Availability Zone.
eksctl
membantu Anda membuat cluster di Amazon EKS. kubectl
memungkinkan untuk menjalankan perintah terhadap cluster Kubernetes. Docker
membantu Anda membangun, menguji, dan mengirimkan aplikasi dalam paket yang disebut kontainer.
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat klaster Amazon EKS. | Untuk membuat klaster Amazon EKS yang menggunakan dua EC2 instance Amazon t2.small sebagai node, jalankan perintah berikut:
catatanProsesnya bisa memakan waktu antara 15 hingga 20 menit. Setelah cluster dibuat, konfigurasi Kubernetes yang sesuai ditambahkan ke file kubeconfig Anda. Anda dapat menggunakan | Pengembang, Admin Sistem |
Verifikasi cluster Amazon EKS. | Untuk memverifikasi bahwa cluster dibuat dan Anda dapat terhubung dengannya, jalankan | Pengembang, Admin Sistem |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat repositori Amazon ECR. | Ikuti petunjuk dari Membuat repositori pribadi di dokumentasi Amazon ECR. | Pengembang, Admin Sistem |
Buat file XMLPOM. | Buat | Pengembang, Admin Sistem |
Buat file sumber. | Buat file sumber yang disebut
Pastikan untuk menggunakan struktur direktori berikut:
| |
Buat Dockerfile. | Buat | Pengembang, Admin Sistem |
Bangun dan dorong gambar Docker. | Di direktori tempat Anda
catatanUbah Wilayah AWS, nomor akun, dan detail repositori di perintah sebelumnya. Pastikan untuk mencatat URL gambar untuk digunakan nanti. pentingSistem macOS dengan chip M1 memiliki masalah dalam membangun gambar yang kompatibel dengan Amazon EKS yang berjalan pada platform. AMD64 Untuk mengatasi masalah ini, gunakan docker buildx untuk membuat image Docker |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat file penyebaran. | Buat file YAMM yang disebut catatanGunakan URL gambar yang Anda salin sebelumnya sebagai jalur file gambar untuk repositori Amazon ECR. | Pengembang, Admin Sistem |
Menerapkan layanan mikro Java di kluster Amazon EKS. | Untuk membuat penerapan di cluster Amazon EKS Anda, jalankan | Pengembang, Admin Sistem |
Verifikasi status pod. |
| Pengembang, Admin Sistem |
Buat sebuah layanan. |
| Pengembang, Admin Sistem |
Instal add-on AWS Load Balancer Controller. | Ikuti petunjuk dari Menginstal add-on AWS Load Balancer Controller dalam dokumentasi Amazon EKS. catatanAnda harus memiliki add-on yang diinstal untuk membuat Application Load Balancer atau Network Load Balancer untuk layanan Kubernetes. | Devloper, Sistem Admin |
Buat sumber daya ingress. | Buat file YAMM yang disebut | Pengembang, Admin Sistem |
Buat Application Load Balancer. | Untuk menyebarkan sumber daya ingress dan membuat Application Load Balancer, jalankan perintah. | Pengembang, Admin Sistem |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Uji dan verifikasi aplikasi. |
| Pengembang, Admin Sistem |
Sumber daya terkait
Membuat repositori pribadi (dokumentasi Amazon ECR)
Mendorong gambar Docker (dokumentasi Amazon ECR)
Pengontrol Ingress
(Lokakarya Amazon EKS)
Informasi tambahan
Contoh file 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>
Contoh 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"]
Contoh berkas penyebaran
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
Contoh file layanan
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
Contoh file sumber daya ingress
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