Untuk merilis versi baru aplikasi layanan mikro secara aman dan memvalidasi fitur baru secara bertahap, gunakan Argo CD untuk melakukan peluncuran kanari ujung ke ujung. Pendekatan ini menyediakan penjadwalan lalu lintas detail halus dan manajemen versi yang memastikan pergantian versi berlangsung mulus, sehingga meminimalkan dampak terhadap layanan online dan meningkatkan stabilitas sistem.
Prasyarat
-
Instans ASM Edisi Perusahaan atau Edisi Ultimate telah dibuat, dan versi instansnya adalah 1.20.6.27 atau lebih baru. Untuk informasi selengkapnya, lihat Buat instans ASM dan Tingkatkan instans ASM.
-
Argo CD telah diinstal dan gerbang ASM telah dibuat. Untuk informasi selengkapnya, lihat Langkah 1 hingga 3 dalam Integrasikan Argo CD dengan ASM untuk menerapkan GitOps.
-
Anda telah terhubung ke kluster Kubernetes menggunakan kubectl. Untuk informasi selengkapnya, lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.
Informasi latar belakang
Argo CD menggunakan pendekatan GitOps untuk menerapkan dan merilis layanan aplikasi. Pengembang melakukan commit manifes YAML untuk resource aplikasi seperti Penyebaran (Deployments) dan Layanan (Services), serta aturan manajemen lalu lintas seperti VirtualServices, Gateways, dan DestinationRules ke repositori Git. Argo CD memantau status resource tersebut di kluster dan membandingkannya dengan kondisi yang diinginkan yang didefinisikan di repositori Git. Dengan repositori Git sebagai sumber kebenaran, Argo CD dapat menyinkronkan resource secara otomatis atau manual ketika perubahan terdeteksi.
Service Mesh ASM mendukung penggunaan jalur lalu lintas (traffic lanes) untuk mengisolasi versi tertentu (atau karakteristik lain) dari suatu aplikasi ke dalam lingkungan runtime independen guna memfasilitasi rilis kanari ujung ke ujung untuk layanan aplikasi. Mulai dari versi 1.20.6.27, ASM mendukung pendefinisian jalur lalu lintas menggunakan dua resource kustom yang ditulis dalam YAML: ASMSwimLaneGroup dan ASMSwimLane. Anda dapat menggunakan Argo CD untuk mengelola resource kustom ini guna menerapkan rilis kanari ujung ke ujung. Untuk informasi selengkapnya, lihat Ikhtisar jalur lalu lintas.
Langkah 1: Terapkan aplikasi dan jalur lalu lintas
-
Buat contoh peluncuran kanari ujung ke ujung untuk aplikasi mock.
-
Di UI Argo CD, klik NEW APP dan konfigurasikan parameter berikut.
Parameter
Deskripsi
Application Name
Nama aplikasi. Pada contoh ini, masukkan
mock.SYNC POLICY
Kebijakan sinkronisasi aplikasi. Pada contoh ini, pilih
Automatically. Pengaturan ini secara otomatis menyinkronkan definisi resource terbaru dari repositori Git. PilihPRUNE RESOURCESuntuk memastikan bahwa resource dihapus dari kluster jika definisinya dihapus dari repositori Git.Repository URL
URL repositori Git sumber. Pada contoh ini, masukkan URL repositori contoh
https://github.com/AliyunContainerService/asm-labs.git. Jika Anda ingin memodifikasi contohnya, fork repositori ini dan masukkan URL repositori hasil fork Anda.Revision
Tag atau nama branch Git yang akan disinkronkan. Pada contoh ini, masukkan branch repositori contoh
argocd-asm.Path
Jalur di repositori yang berisi manifes resource. Pada contoh ini, masukkan jalur resource yang digunakan dalam contoh:
argo-cd/swimlane.Cluster URL
Alamat server API kluster tujuan. Pada contoh ini, masukkan alamat server API kluster Kubernetes tempat Argo CD diterapkan:
https://kubernetes.default.svc.
-
-
Setelah menyelesaikan konfigurasi, klik CREATE di bagian atas halaman.
Di halaman Applications di Argo CD, Anda dapat melihat status aplikasi
mockyang baru saja dibuat.Status aplikasi harus Healthy dan status sinkronisasi harus Synced, yang menunjukkan bahwa aplikasi berhasil diterapkan dan disinkronkan.
-
Klik aplikasi
mockuntuk melihat status sinkronisasi resource-nya.Tampilan resource menunjukkan bahwa status aplikasi Healthy dan status sinkronisasi Synced, serta semua resource telah disinkronkan tanpa error.
Selain resource Penyebaran (Deployment) dan Layanan (Service) yang mendefinisikan aplikasi, repositori Git juga berisi resource manajemen lalu lintas seperti VirtualService dan Gateway, serta resource jalur lalu lintas ASM seperti ASMSwimLaneGroup dan ASMSwimLane.
Langkah 2: Verifikasi peluncuran kanari ujung ke ujung
Pada contoh ini, resource ASMSwimLaneGroup dan ASMSwimLane mengisolasi lingkungan v1 dan v2 untuk layanan aplikasi. Resource VirtualService mengarahkan gerbang ASM untuk meneruskan lalu lintas ke kedua versi tersebut dengan rasio 1:1. Anda dapat mengakses gerbang ASM berulang kali untuk memverifikasi peluncuran kanari ujung ke ujung.
-
Dapatkan alamat IP publik gerbang dari Konsol ASM. Untuk informasi selengkapnya, lihat Dapatkan alamat IP gerbang ASM.
-
Jalankan perintah berikut untuk menetapkan variabel lingkungan.
Ganti
xxx.xxx.xxx.xxxdengan alamat IP dari langkah sebelumnya.export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx -
Jalankan perintah berikut untuk mengakses gerbang ASM berulang kali.
for i in {1..100}; do curl http://${ASM_GATEWAY_IP}/mock; echo ''; sleep 1; done;Output yang diharapkan:
-> mocka(version: v2, ip: 10.0.239.73)-> mockb(version: v2, ip: 10.0.239.136)-> mockc(version: v2, ip: 10.0.239.139) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) -> mocka(version: v2, ip: 10.0.239.73)-> mockb(version: v2, ip: 10.0.239.136)-> mockc(version: v2, ip: 10.0.239.139) -> mocka(version: v2, ip: 10.0.239.73)-> mockb(version: v2, ip: 10.0.239.136)-> mockc(version: v2, ip: 10.0.239.139) -> mocka(version: v2, ip: 10.0.239.73)-> mockb(version: v2, ip: 10.0.239.136)-> mockc(version: v2, ip: 10.0.239.139) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) -> mocka(version: v2, ip: 10.0.239.73)-> mockb(version: v2, ip: 10.0.239.136)-> mockc(version: v2, ip: 10.0.239.139) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) ...Output tersebut menunjukkan bahwa aplikasi contoh terdiri dari tiga layanan:
mocka,mockb, danmockc. Rantai pemanggilan layanan adalahmocka→mockb→mockc, dan setiap layanan memiliki versi v1 dan v2. Permintaan dikirim ke versi v1 dan v2 aplikasi dengan rasio kira-kira 1:1. Rantai pemanggilan layanan terisolasi untuk setiap versi menunjukkan keberhasilan peluncuran kanari ujung ke ujung.
Operasi terkait
Rilis versi layanan baru
Repositori Git contoh yang digunakan dalam contoh ini memiliki struktur file berikut:
|
File |
Deskripsi |
|
mock-v1.yaml mock-v2.yaml |
Definisi Penyebaran (Deployment) untuk versi v1 dan v2 layanan |
|
swimlanegroup.yaml |
Definisi grup jalur. Grup jalur dikaitkan dengan satu atau beberapa jalur lalu lintas dan mendefinisikan informasi bersama untuk mereka. Ini menentukan |
|
swimlanes.yaml |
Definisi jalur lalu lintas. File ini mendefinisikan dua resource |
|
mock-route.yaml |
Mendefinisikan resource Gateway dan VirtualService yang berlaku untuk gerbang ingress ASM. Resource manajemen trafik ini mengontrol cara gerbang ASM meneruskan permintaan ke layanan di setiap jalur lalu lintas. |
Untuk merilis versi layanan aplikasi baru, fork branch argocd-asm dari repositori contoh https://github.com/AliyunContainerService/asm-labs.git. Modifikasi resource YAML di jalur argo-cd/swimlane dan lakukan commit perubahan tersebut. Setelah Anda mendorong (push) commit tersebut, Argo CD akan secara otomatis menyinkronkan perubahan tersebut. Pastikan bahwa Repository URL di Langkah 1 diatur ke URL repositori hasil fork Anda.
Sebagai contoh, untuk merilis versi v3 baru untuk layanan mocka, mockb, dan mockc, modifikasi resource YAML di repositori Git Anda sebagai berikut:
-
Tambahkan file
argo-cd/swimlane/mock-v3.yaml.File YAML ini mendefinisikan Penyebaran (Deployments) untuk versi v3 layanan
mocka,mockb, danmockc. -
Modifikasi file
argo-cd/swimlane/swimlanes.yamldengan konten berikut.Jalur lalu lintas (ASMSwimLane) baru bernama
v3ditambahkan. Resource ini dikaitkan dengan grup jalurmock(ASMSwimLaneGroup) dan menentukan bahwa Pod dengan labelversion:v3termasuk dalam versi layanan v3. -
Modifikasi file
argo-cd/swimlane/mock-route.yamldengan konten berikut.VirtualService bernama
mockdimodifikasi dengan menambahkan versi v3 layananmockake tujuan rute. Bidangsubsetdipetakan ke nama jalur lalu lintas (ASMSwimLane). Bidangweightdalam VirtualService disesuaikan untuk membagi lalu lintas antara versi v1, v2, dan v3 dengan rasio 6:3:1.