toolkit-maven-plugin mengotomatiskan rilis canary untuk aplikasi Spring Cloud, Dubbo, dan High-speed Service Framework (HSF) yang diterapkan di Enterprise Distributed Application Service (EDAS). Alih-alih memperbarui semua instans sekaligus, rilis canary menerapkan perubahan terlebih dahulu ke sejumlah kecil instans, lalu secara bertahap mempromosikan pembaruan tersebut ke instans yang tersisa dalam batch.
Cara kerja rilis canary
Rilis canary dengan toolkit-maven-plugin mengikuti proses dua tahap:
Tahap canary: Terapkan versi baru ke sejumlah instans tertentu (
gray). Instans-instans ini menerima traffic langsung, sehingga Anda dapat memvalidasi versi baru sebelum peluncuran penuh.Tahap peluncuran bertahap: Terapkan versi baru ke instans yang tersisa dalam batch terkendali (
batch), dengan interval yang dapat dikonfigurasi (batchWaitTime) antar setiap batch. Batch dapat berjalan secara otomatis atau memerlukan persetujuan manual.
Jenis strategi pembaruan EDAS untuk proses ini adalah GrayBatchUpdate.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Aplikasi Spring Cloud, Dubbo, atau HSF yang diterapkan di kluster Kubernetes EDAS
ID AccessKey dan Rahasia AccessKey untuk Pengguna Resource Access Management (RAM) (disarankan daripada menggunakan kredensial akun root)
ID aplikasi (
appId), atau ID ruang mikroservis (namespaceId) dan nama aplikasi (appName) dari aplikasi target
Persiapkan rilis canary
Untuk menyiapkan rilis canary, tambahkan dependensi plug-in, buat file konfigurasi, dan jalankan perintah deployment.
Langkah 1: Tambahkan dependensi plug-in
Tambahkan dependensi berikut ke pom.xml Anda:
<build>
<plugins>
<plugin>
<groupId>com.alibaba.cloud</groupId>
<artifactId>toolkit-maven-plugin</artifactId>
<version>1.1.9</version>
</plugin>
</plugins>
</build>Selalu gunakan versi toolkit-maven-plugin terbaru.
Langkah 2: Buat file konfigurasi
Buat tiga file YAML di direktori root proyek yang telah dikemas. Jika Anda menerapkan submodule Maven, buat file konfigurasi paket di direktori submodule tersebut.
Konfigurasi akun (toolkit_profile.yaml)
regionId: # Wilayah tempat aplikasi diterapkan, misalnya cn-hangzhou
accessKeyId: # ID AccessKey Pengguna RAM
accessKeySecret: # Rahasia AccessKey Pengguna RAM
jarPath: # (Opsional) Path ke paket penyebaran. Melewati packaging Maven jika ditentukan.Konfigurasi paket (toolkit_package.yaml)
apiVersion: V1
kind: AppPackage
spec:
packageType: # War, FatJar, Image, atau url
packageUrl: # (Opsional) URL paket penyebaran remote. Digunakan saat packageType adalah url.
imageUrl: # (Opsional) URL gambar. Digunakan saat packageType adalah Image.Konfigurasi deployment (toolkit_deploy.yaml)
apiVersion: V1
kind: AppDeployment
spec:
type: kubernetes
target:
appId: # ID aplikasi. Jika ditentukan, namespaceId dan appName tidak diperlukan.
namespaceId: # ID ruang mikroservis. Diperlukan jika appId tidak ditentukan.
appName: # Nama aplikasi. Diperlukan jika appId tidak ditentukan.
updateStrategy:
type: GrayBatchUpdate
grayUpdate:
gray: 2 # Jumlah instans yang diperbarui pada tahap canary
batchUpdate:
batch: 3 # Jumlah batch untuk instans yang tersisa
releaseType: auto # auto atau manual
batchWaitTime: 5 # Menit menunggu antar batchTabel berikut menjelaskan parameter rilis canary:
| Parameter | Deskripsi | Contoh |
|---|---|---|
appId | ID aplikasi EDAS | 6bbc57a2-a2a0-4edb-****-************ |
namespaceId | ID ruang mikroservis | cn-hangzhou:my-namespace |
gray | Jumlah instans canary | 2 |
batch | Jumlah batch peluncuran | 3 |
releaseType | auto (otomatis) atau manual (memerlukan persetujuan) | auto |
batchWaitTime | Menit antar batch | 5 |
Langkah 3: Jalankan perintah deployment
Buka direktori yang berisi pom.xml (atau pom.xml submodule) dan jalankan:
mvn clean package toolkit:deploy \
-Dtoolkit_profile=toolkit_profile.yaml \
-Dtoolkit_package=toolkit_package.yaml \
-Dtoolkit_deploy=toolkit_deploy.yamlJika deployment berhasil, output akan menampilkan BUILD SUCCESS.
Parameter perintah:
| Parameter | Deskripsi |
|---|---|
toolkit:deploy | Menerapkan aplikasi setelah packaging Maven selesai. |
-Dtoolkit_profile | Path ke file konfigurasi akun. |
-Dtoolkit_package | Path ke file konfigurasi paket. |
-Dtoolkit_deploy | Path ke file konfigurasi deployment. |
-Ddeploy_version | (Opsional) Versi deployment. Menggantikan versi di toolkit_deploy.yaml. Memerlukan toolkit-maven-plugin 1.0.6 atau lebih baru. |
Untuk melewati parameter -Dtoolkit_profile, -Dtoolkit_package, dan -Dtoolkit_deploy, letakkan file konfigurasi di direktori yang sama dengan pom.xml dan tambahkan titik di awal nama file (.toolkit_profile.yaml, .toolkit_package.yaml, .toolkit_deploy.yaml). Plug-in akan mendeteksinya secara otomatis.
Skenario deployment
Deploy dengan paket WAR atau FatJar lokal
Buat paket WAR atau FatJar secara lokal dan deploy ke aplikasi EDAS yang sudah ada.
toolkit_package.yaml:
apiVersion: V1
kind: AppPackage
spec:
packageType: War # Atau FatJartoolkit_deploy.yaml:
apiVersion: V1
kind: AppDeployment
spec:
type: kubernetes
target:
appId: # ID aplikasi
namespaceId: # (Opsional) ID namespace, wajib jika appId tidak ditentukan
appName: # (Opsional) Nama aplikasi, wajib jika appId tidak ditentukanDeploy dengan URL gambar yang sudah ada
Deploy aplikasi menggunakan gambar kontainer yang sudah ada di registri.
toolkit_package.yaml:
apiVersion: V1
kind: AppPackage
spec:
packageType: Image
imageUrl: registry.cn-beijing.aliyuncs.com/test/gateway:latesttoolkit_deploy.yaml:
apiVersion: V1
kind: AppDeployment
spec:
type: kubernetes
target:
appId: # ID aplikasi
namespaceId: # (Opsional) ID namespace, wajib jika appId tidak ditentukan
appName: # (Opsional) Nama aplikasi, wajib jika appId tidak ditentukanBuat dan dorong gambar Docker lokal
Buat gambar Docker secara lokal, dorong ke repository gambar kontainer Alibaba Cloud, lalu deploy.
toolkit_package.yaml:
apiVersion: V1
kind: AppPackage
spec:
packageType: Image
build:
docker:
dockerfile: Dockerfile
imageRepoAddress: # Alamat repository gambar
imageTag: # Tag gambar
imageRepoUser: # Username repository
imageRepoPassword: # Password repositorytoolkit_deploy.yaml:
apiVersion: V1
kind: AppDeployment
spec:
type: kubernetes
target:
appId: # ID aplikasi
namespaceId: # (Opsional) ID namespace, wajib jika appId tidak ditentukan
appName: # (Opsional) Nama aplikasi, wajib jika appId tidak ditentukanReferensi konfigurasi
Parameter paket
apiVersion: V1
kind: AppPackage
spec:
packageType: # War, FatJar, Image, atau url
imageUrl: # URL gambar. Wajib saat deploy dengan gambar.
packageUrl: # URL paket. Digunakan saat packageType adalah url.
build:
docker:
dockerfile: # Path Dockerfile. Wajib untuk pembuatan gambar lokal.
imageRepoAddress: # Alamat repository gambar Alibaba Cloud
imageTag: # Tag gambar
imageRepoUser: # Username repository
imageRepoPassword: # Password repository
oss:
bucket: # Nama bucket Object Storage Service (OSS)
key: # Path objek OSS
accessKeyId: # ID AccessKey untuk akses OSS
accessKeySecret: # Rahasia AccessKey untuk akses OSS