Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam tutorial ini, Anda akan mempelajari cara menyebarkan aplikasi Spring Boot di kluster Azure Kubernetes Service (AKS) dengan Apa itu Azure Database for MySQL - Server Fleksibel? di backend, berkomunikasi dengan aman satu sama lain dalam jaringan virtual Azure.
Catatan
Tutorial ini mengasumsikan pemahaman dasar tentang konsep Kube, Java Spring Boot dan MySQL. Untuk aplikasi Spring Boot, sebaiknya gunakan Azure Spring Apps. Namun, Anda masih dapat menggunakan Azure Kubernetes Services sebagai tujuan. Lihat Panduan Tujuan Beban Kerja Java untuk saran.
Prasyarat
- Langganan Azure jika Anda belum memiliki langganan Azure, buat akun gratis Azure sebelum memulai. Saat ini, dengan akun gratis Azure, Anda dapat mencoba Azure Database for MySQL - Server Fleksibel gratis selama 12 bulan. Untuk informasi selengkapnya, lihat Menggunakan akun gratis Azure untuk mencoba Azure Database for MySQL - Server Fleksibel secara gratis.
- Antarmuka Tingkat Panggilan Azure (CLI).
- Kit Pengembangan Java yang didukung, versi 8 (disertakan di Azure Cloud Shell).
- Alat pembangun Apache Maven.
- Klien Git.
- Klien Docker.
Membuat Server Fleksibel Azure Database for MySQL
Buat grup sumber daya
Grup sumber daya Azure adalah grup logis tempat sumber daya Azure disebarkan dan dikelola. Mari membuat grup sumber daya rg-mysqlaksdemo menggunakan perintah az group create di lokasi eastus.
Buka perintah.
Masuk menggunakan akun Azure Anda.
az loginPilih langganan Azure Anda.
az account set -s <your-subscription-ID>Membuat grup sumber daya.
az group create --name rg-mysqlaksdemo --location eastus
Membuat instans Server Fleksibel Azure Database for MySQL
Sekarang kita akan membuat instans Azure Database for MySQL Flexible Server dalam jaringan virtual (metode konektivitas akses privat).
Buat jaringan virtual Azure vnet-mysqlaksdemo untuk semua sumber daya dalam tutorial ini, dan subnet subnet-mysql untuk instans Azure Database for MySQL Flexible Server.
az network vnet create \ --resource-group rg-mysqlaksdemo \ --name vnet-mysqlaksdemo \ --address-prefixes 155.55.0.0/16 \ --subnet-name subnet-mysql \ --subnet-prefix 155.55.1.0/24Buat instans Server Fleksibel Azure Database for MySQL mysql-mysqlaksdemo di subnet yang dibuat di atas, menggunakan perintah az mysql flexible-server create . Ganti nilai Anda untuk kata sandi dan nama pengguna admin.
az mysql flexible-server create \ --name mysql-mysqlaksdemo \ --resource-group rg-mysqlaksdemo \ --location eastus \ --admin-user <your-admin-username> \ --admin-password <your-admin-password> \ --vnet vnet-mysqlaksdemo \ --subnet subnet-mysqlAnda sekarang telah membuat instans Azure Database for MySQL Flexible Server di wilayah eastus dengan komputasi Burstable B1MS, penyimpanan 32 GB, periode retensi cadangan 7 hari, dan di subnet-mysql subnet yang disediakan. Subnet yang disediakan tidak boleh memiliki sumber daya lain yang disebarkan di dalamnya dan subnet ini akan didelegasikan ke Microsoft.DBforMySQL/flexibleServers.
Konfigurasikan database
demoServer Fleksibel Azure Database for MySQL baru untuk digunakan dengan Aplikasi Spring Boot.az mysql flexible-server db create \ --resource-group rg-mysqlaksdemo \ --server-name mysql-mysqlaksdemo \ --database-name demo
Membuat Azure container registry
Buat registri kontainer Azure privat di grup sumber daya. Tutorial ini mendorong aplikasi sampel sebagai gambar Docker ke registri ini di langkah selanjutnya. Ganti mysqlaksdemoregistry dengan nama unik untuk registri Anda.
az acr create --resource-group rg-mysqlaksdemo \
--location eastus \
--name mysqlaksdemoregistry \
--sku Basic
Kodekan aplikasi
Pada bagian ini, kita akan mengodekan aplikasi demo. Jika Anda ingin berjalan lebih cepat, Anda dapat mengunduh aplikasi berkode yang tersedia di https://github.com/Azure-Samples/tutorial-springboot-mysql-aks dan melompat ke bagian berikutnya - Membangun gambar dan mendorong ke ACR.
Hasilkan aplikasi menggunakan Spring Initializr.
curl https://start.spring.io/starter.tgz \ -d dependencies=web,data-jdbc,mysql \ -d baseDir=springboot-mysql-aks \ -d bootVersion=2.5.6.RELEASE \ -d artifactId=springboot-mysql-aks \ -d description="Spring Boot on AKS connecting to Azure DB for MySQL" \ -d javaVersion=1.8 | tar -xzvf -Aplikasi Spring Boot dasar akan dihasilkan di
springboot-mysql-aksdalam folder.Gunakan editor teks favorit Anda seperti VSCode atau IDE apa pun untuk langkah berikut.
Konfigurasikan Spring Boot untuk menggunakan Server Fleksibel Azure Database for MySQL.
Buka file src/main/resources/application.properties, dan tambahkan cuplikan di bawah ini. Kode di bawah ini sedang membaca host database, nama database, nama pengguna, dan kata sandi dari file manifes Kube.
logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.url=jdbc:mysql://${DATABASE_HOST}:3306/${DATABASE_NAME}?serverTimezone=UTC spring.datasource.username=${DATABASE_USERNAME} spring.datasource.password=${DATABASE_PASSWORD} spring.datasource.initialization-mode=alwaysPeringatan
Properti konfigurasi
spring.datasource.initialization-mode=alwaysberarti bahwa Spring Boot akan secara otomatis menghasilkan skema database, menggunakan fileschema.sqlyang akan kita buat nanti, setiap kali server dimulai. Ini bagus untuk pengujian, tetapi ingat ini akan menghapus data Anda di setiap menghidupkan ulang, jadi ini tidak boleh digunakan dalam produksi!Catatan
Kita menambahkan
?serverTimezone=UTCke properti konfigurasispring.datasource.url, untuk memberi tahu driver JDBC agar menggunakan format tanggal UTC (atau Waktu Universal Terkoordinasi) saat menghubungkan ke database. Jika tidak, server Java kita tidak akan menggunakan format tanggal yang sama dengan database, yang akan mengakibatkan kesalahan.Buat skema database.
Spring Boot akan secara otomatis mengeksekusi
src/main/resources/schema.sqluntuk membuat skema database. Buat file tersebut dengan konten berikut:DROP TABLE IF EXISTS todo; CREATE TABLE todo (id SERIAL PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BOOLEAN);Kode aplikasi Java Spring Boot.
Selanjutnya, tambahkan kode Java yang akan menggunakan JDBC untuk menyimpan dan mengambil data dari server MySQL Anda. Tambahkan kelas Java
Todobaru, di samping kelasDemoApplication, dan tambahkan kode berikut:package com.example.springbootmysqlaks; import org.springframework.data.annotation.Id; public class Todo { public Todo() { } public Todo(String description, String details, boolean done) { this.description = description; this.details = details; this.done = done; } @Id private Long id; private String description; private String details; private boolean done; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getDetails() { return details; } public void setDetails(String details) { this.details = details; } public boolean isDone() { return done; } public void setDone(boolean done) { this.done = done; } }Kelas ini adalah model domain yang dipetakan pada tabel
todoyang Anda buat sebelumnya.Untuk mengelola kelas itu, Anda memerlukan repositori. Tentukan
TodoRepositoryantarmuka baru dalam paket yang sama:package com.example.springbootmysqlaks; import org.springframework.data.repository.CrudRepository; public interface TodoRepository extends CrudRepository<Todo, Long> { }Repositori ini adalah repositori yang dikelola Spring Data JDBC.
Selesaikan aplikasi dengan membuat pengontrol yang dapat menyimpan dan mengambil data. Terapkan kelas
TodoControllerdalam paket yang sama, dan tambahkan kode berikut:package com.example.springbootmysqlaks; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/") public class TodoController { private final TodoRepository todoRepository; public TodoController(TodoRepository todoRepository) { this.todoRepository = todoRepository; } @PostMapping("/") @ResponseStatus(HttpStatus.CREATED) public Todo createTodo(@RequestBody Todo todo) { return todoRepository.save(todo); } @GetMapping("/") public Iterable<Todo> getTodos() { return todoRepository.findAll(); } }Buat Dockerfile baru di direktori dasar springboot-mysql-aks dan salin cuplikan kode ini.
FROM openjdk:8-jdk-alpine RUN addgroup -S spring && adduser -S spring -G spring USER spring:spring ARG DEPENDENCY=target/dependency COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib COPY ${DEPENDENCY}/META-INF /app/META-INF COPY ${DEPENDENCY}/BOOT-INF/classes /app ENTRYPOINT ["java","-cp","app:app/lib/*","com.example.springbootmysqlaks.DemoApplication"]Buka file pom.xml dan perbarui koleksi
<properties>di file pom.xml dengan nama registri untuk Azure Container Registry Anda dan versi terbaru darijib-maven-plugin. Catatan: Jika nama ACR Anda berisi karakter huruf besar, pastikan untuk mengonversinya menjadi karakter huruf kecil.<properties> <docker.image.prefix>mysqlaksdemoregistry.azurecr.io</docker.image.prefix> <jib-maven-plugin.version>3.1.4</jib-maven-plugin.version> <java.version>1.8</java.version> </properties>Perbarui koleksi
<plugins>dalam file pom.xml sehingga terdapat elemen<plugin>yang berisi entri untukjib-maven-plugin, seperti yang ditampilkan dalam contoh berikut. Kami menggunakan gambar dasar dari Microsoft Container Registry (MCR):mcr.microsoft.com/java/jdk:8-zulu-alpine, yang berisi JDK yang didukung secara resmi untuk Azure. Untuk gambar dasar MCR lainnya dengan JDK yang didukung secara resmi, lihat hub docker.<plugin> <artifactId>jib-maven-plugin</artifactId> <groupId>com.google.cloud.tools</groupId> <version>${jib-maven-plugin.version}</version> <configuration> <from> <image>mcr.microsoft.com/java/jdk:8-zulu-alpine</image> </from> <to> <image>${docker.image.prefix}/${project.artifactId}</image> </to> </configuration> </plugin>
Membangun gambar dan mendorong ke ACR
Di perintaht, buka folder springboot-mysql-aks dan jalankan perintah berikut guna terlebih dahulu mengatur nama default untuk Azure Container Registry (jika tidak, Anda harus menentukan nama di az acr login), bangun gambar dan kemudian dorong gambar ke registri.
Pastikan daemon docker Anda berjalan saat menjalankan langkah ini.
az config set defaults.acr=mysqlaksdemoregistry
az acr login && mvn compile jib:build
Membuat kluster Kube di AKS
Kita sekarang akan membuat kluster AKS di jaringan virtual vnet-mysqlaksdemo.
Dalam tutorial ini, kita akan menggunakan jaringan Azure CNI di AKS. Jika Anda ingin mengonfigurasi jaringan kubenet sebagai gantinya, lihat Menggunakan jaringan kubenet di AKS.
Buat subnet subnet-aks untuk digunakan kluster AKS.
az network vnet subnet create \ --resource-group rg-mysqlaksdemo \ --vnet-name vnet-mysqlaksdemo \ --name subnet-aks \ --address-prefixes 155.55.2.0/24Dapatkan ID sumber daya subnet.
SUBNET_ID=$(az network vnet subnet show --resource-group rg-mysqlaksdemo --vnet-name vnet-mysqlaksdemo --name subnet-aks --query id -o tsv)Buat klaster AKS di jaringan virtual, dengan Azure Container Registry (ACR) mysqlaksdemoregistry terpasang.
az aks create \ --resource-group rg-mysqlaksdemo \ --name aks-mysqlaksdemo \ --network-plugin azure \ --service-cidr 10.0.0.0/16 \ --dns-service-ip 10.0.0.10 \ --docker-bridge-address 172.17.0.1/16 \ --vnet-subnet-id $SUBNET_ID \ --attach-acr mysqlaksdemoregistry \ --dns-name-prefix aks-mysqlaksdemo \ --generate-ssh-keysRentang alamat IP berikut juga ditentukan sebagai bagian dari proses pembuatan kluster:
--service-cidr digunakan untuk menetapkan alamat IP pada layanan internal di kluster AKS. Anda dapat menggunakan rentang alamat privat apa pun yang memenuhi persyaratan berikut:
- Tidak boleh berada dalam rentang alamat IP jaringan virtual kluster Anda
- Tidak boleh tumpang tindih dengan jaringan virtual lain yang dengannya rekan jaringan virtual kluster
- Tidak boleh tumpang tindih dengan IP lokal
- Tidak boleh dalam rentang 169.254.0.0/16, 172.30.0.0/16, 172.31.0.0/16, or 192.0.2.0/24
Alamat --dns-service-ip adalah Alamat IP untuk layanan DNS kluster. Alamat ini harus berada dalam rentang alamat layanan Kubernetes. Jangan gunakan alamat IP pertama di rentang alamat Anda. Alamat pertama dalam rentang subnet digunakan untuk alamat kubernetes.default.svc.cluster.local.
Alamat --docker-bridge-address adalah Alamat jaringan jembatan Docker mewakili alamat jaringan jembatan docker0 default yang ada di semua instalasi Docker. Anda harus memilih ruang alamat yang tidak bertabrakan dengan CIDR lainnya di jaringan Anda, termasuk CIDR layanan kluster dan CIDR pod.
Menyebarkan aplikasi ke kluster AKS
Buka sumber daya kluster AKS Anda di portal Microsoft Azure.
Pilih Tambahkan dan Tambahkan dengan YAML dari tampilan sumber daya apa pun (Namespace, Beban Kerja, Layanan dan ingress, Penyimpanan, atau Konfigurasi).
Tempelkan di YAML berikut. Ganti nilai Anda untuk nama pengguna dan kata sandi admin Azure Database for MySQL Flexible Server.
apiVersion: apps/v1 kind: Deployment metadata: name: springboot-mysql-aks spec: replicas: 1 selector: matchLabels: app: springboot-mysql-aks template: metadata: labels: app: springboot-mysql-aks spec: containers: - name: springboot-mysql-aks image: mysqlaksdemoregistry.azurecr.io/springboot-mysql-aks:latest env: - name: DATABASE_HOST value: "mysql-mysqlaksdemo.mysql.database.azure.com" - name: DATABASE_USERNAME value: "<your-admin-username>" - name: DATABASE_PASSWORD value: "<your-admin-password>" - name: DATABASE_NAME value: "demo" --- apiVersion: v1 kind: Service metadata: name: springboot-mysql-aks spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 selector: app: springboot-mysql-aksPilih Tambahkan di bagian bawah penyunting YAML untuk menyebarkan aplikasi.
Setelah file YAML ditambahkan, penampil sumber daya menunjukkan aplikasi Spring Boot Anda. Catat alamat IP eksternal tertaut yang disertakan dalam layanan eksternal.
Uji aplikasi
Untuk menguji aplikasi, Anda dapat menggunakan cURL.
Pertama, buat item "todo" baru dalam database menggunakan perintah berikut.
curl --header "Content-Type: application/json" \
--request POST \
--data '{"description":"configuration","details":"congratulations, you have deployed your application correctly!","done": "true"}' \
http://<AKS-service-external-ip>
Selanjutnya, ambil data dengan menggunakan permintaan cURL baru, atau dengan memasukkan klaster IP Eksternal di browser Anda.
curl http://<AKS-service-external-ip>
Perintah ini akan menampilkan daftar item "todo", termasuk item yang telah Anda buat.
[{"id":1,"description":"configuration","details":"congratulations, you have deployed your application correctly!","done":true}]
Berikut adalah cuplikan layar permintaan cURL ini:
Anda dapat melihat output serupa melalui browser Anda:
Selamat! Anda telah berhasil menyebarkan aplikasi Spring Boot pada kluster Azure Kubernetes Service (AKS) dengan Azure Database for MySQL Flexible Server di backend!
Membersihkan sumber daya
Untuk menghindari biaya Azure, Anda harus membersihkan sumber daya yang tidak diperlukan. Ketika kluster tidak lagi diperlukan, gunakan perintah hapus grup az untuk menghapus grup sumber daya, layanan kontainer, dan semua sumber daya terkait.
az group delete --name rg-mysqlaksdemo
Catatan
Saat Anda menghapus kluster, perwakilan layanan Microsoft Entra yang digunakan oleh kluster AKS tidak dihapus. Untuk langkah tentang cara menghapus perwakilan layanan, lihat Pertimbangan dan penghapusan perwakilan layanan AKS. Jika Anda menggunakan identitas terkelola, identitas dikelola oleh platform dan tidak memerlukan penghapusan.


