Rilis canary standar hanya memvalidasi layanan yang Anda deploy, tetapi tidak memverifikasi interaksi layanan tersebut dengan dependensinya di hulu dan hilir. Misalnya, ketika layanan A memanggil layanan B yang kemudian memanggil layanan C, merilis versi canary hanya pada layanan A menyebabkan seluruh jalur permintaan tidak teruji.
Rilis canary ujung ke ujung mengatasi masalah ini dengan membuat traffic lanes. Traffic lane memberi tag pada permintaan di ingress dan menyebarkan tag tersebut melalui setiap layanan dalam rantai panggilan. Setiap layanan memeriksa tag tersebut dan mengarahkan permintaan ke versi canary-nya jika tersedia. Jika suatu layanan tidak memiliki versi canary yang dideploy, permintaan akan diteruskan ke versi dasarnya, tetapi tag tetap dipertahankan agar layanan hilir berikutnya dapat mengarahkan permintaan dengan benar. Hasilnya, traffic canary tetap terisolasi dari ingress hingga layanan hilir terakhir, sehingga Anda dapat memvalidasi perubahan beberapa layanan sekaligus sebelum mempromosikannya ke produksi.
Panduan ini mengintegrasikan Kruise Rollouts dengan Microservices Governance dari Microservices Engine (MSE) dalam kluster Container Service for Kubernetes (ACK). Setelah menyelesaikan langkah-langkah berikut, permintaan bertag akan mengalir melalui versi canary dari beberapa layanan, sementara traffic produksi tetap tidak terganggu.

Cara kerja Kruise Rollouts
Kruise Rollouts adalah komponen progressive delivery dari OpenKruise. Anda dapat menggunakan Kruise Rollouts untuk melakukan rilis canary, penyebaran biru-hijau, dan Pengujian A/B. Berbeda dengan alat yang mengharuskan Anda mengganti tipe workload, Kruise Rollouts beroperasi sebagai bypass component: Deployment, StatefulSet, atau CloneSet yang sudah ada tetap tidak berubah, dan Kruise Rollouts mengoordinasikan proses canary secara paralel. Proses rilis dapat diotomatisasi dalam batch dan dijeda berdasarkan metrik dari Managed Service for Prometheus. Anda hanya perlu membuat resource Rollouts di kluster ACK untuk mengotomatisasi rilis dan pembaruan aplikasi. Kruise Rollouts mendukung integrasi tanpa hambatan dengan Helm dan platform PaaS dengan biaya rendah.
Siklus hidup rilis canary
Ketika gambar Deployment berubah, Kruise Rollouts mengikuti urutan berikut:
Jeda pembaruan rolling native Deployment.
Buat Pod canary dengan versi gambar baru.
Konfigurasikan pengarahan traffic sehingga permintaan yang sesuai mencapai Pod canary.
Tunggu persetujuan manual (atau pemeriksaan metrik otomatis).
Jika disetujui, promosikan versi canary ke semua Pod menggunakan pembaruan rolling.
Hapus Pod canary dan kembalikan pengarahan traffic native.

Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Kluster ACK yang menjalankan Kubernetes 1.19 atau lebih baru. Untuk informasi selengkapnya, lihat Buat Kluster ACK yang dikelola.
kubectl-kruise terinstal. Untuk informasi selengkapnya, lihat kubectl-kruise.
Microservices Governance diaktifkan. Untuk informasi selengkapnya, lihat Aktifkan Microservices Governance.
Langkah 1: Instal komponen yang diperlukan
Instal ack-kruise
Masuk ke ACK console. Pada panel navigasi di sebelah kiri, klik Clusters.
Pada halaman Clusters, temukan kluster target Anda dan klik namanya. Di panel navigasi sebelah kiri, pilih Operations > Add-ons.
Pada halaman Manage Components, klik tab Manage Applications.
Temukan kartu ack-kruise dan klik Install.
Pada dialog konfirmasi, klik OK.
Instal MSE Ingress Controller
Buat resource MseIngressConfig dan IngressClass untuk mengaktifkan ingress berbasis MSE di kluster Anda. Untuk langkah-langkah detail, lihat Gunakan MSE Ingresses untuk mengakses aplikasi di kluster ACK.
Aktifkan Microservices Governance
Aktifkan Microservices Governance untuk aplikasi target Anda. Untuk langkah-langkah detail, lihat Aktifkan Microservices Governance untuk aplikasi layanan mikro di kluster ACK.
Langkah 2: Deploy aplikasi demo
Demo ini menggunakan tiga aplikasi Spring Cloud — A, B, dan C — yang membentuk rantai panggilan: A memanggil B, yang kemudian memanggil C. Server Nacos menangani penemuan layanan, dan instans MySQL menyediakan penyimpanan data.
Buat resource aplikasi
Buat file bernama
mse-demo.yamldengan konten berikut:Deploy aplikasi:
kubectl apply -f mse-demo.yaml
Buat resource Ingress
Buat file bernama
mse-ingress.yamldengan konten berikut:Terapkan konfigurasi Ingress:
kubectl apply -f mse-ingress.yaml
Verifikasi deployment
Dapatkan alamat IP eksternal Ingress: Output yang diharapkan:
kubectl get ingressNAME CLASS HOSTS ADDRESS PORTS AGE spring-cloud-a <none> * EXTERNAL_IP 80 12mKirim permintaan uji. Ganti
<EXTERNAL_IP>dengan alamat IP dari output sebelumnya: Output yang diharapkan: Output ini mengonfirmasi bahwa rantai panggilan A -> B -> C berfungsi dan ketiga layanan menjalankan versi dasar.curl http://<EXTERNAL_IP>/a -H "User-Agent: xiaoming"A[192.168.42.115][config=base] -> B[192.168.42.118] -> C[192.168.42.101]
Langkah 3: Konfigurasikan rilis canary ujung ke ujung
Definisikan resource Rollout dan TrafficRouting
Dalam demo ini, rilis canary dilakukan dalam tiga batch:
Dilakukan Pengujian A/B. Permintaan yang berisi
header[User-Agent]=xiaomingdiarahkan ke versi canary. Permintaan lainnya diarahkan ke versi dasar.Separuh Pod menjalankan versi canary, dan separuh permintaan diarahkan ke versi canary.
Semua Pod menjalankan versi canary, dan semua permintaan diarahkan ke versi canary.
Buat dan terapkan resource Rollout sebagai berikut:
Buat file bernama
rollout.yamldengan konten berikut:Apa yang terjadi saat Anda menerapkan konfigurasi ini:
Setiap resource Rollout memantau sebuah Deployment. Saat gambar Deployment berubah, Kruise Rollouts:
Menjeda pembaruan rolling native.
Membuat satu Pod canary (
replicas: 1) dengan versi gambar baru.Menerapkan label
patchPodTemplateMetadatake Pod canary:alicloud.service.tag: gray— memberi tahu MSE Microservices Governance untuk mengenali Pod ini sebagai bagian dari grup canary (gray).opensergo.io/canary-gray: gray— mengaktifkan pengarahan traffic lane yang kompatibel OpenSergo di seluruh rantai panggilan.
Menjeda dan menunggu persetujuan manual sebelum mempromosikan.
Resource TrafficRouting menetapkan aturan pemisahan traffic:
Permintaan dengan header
User-Agent: xiaomingsesuai dengan aturan canary.requestHeaderModifiermenyisipkan headerx-mse-tag: grayke permintaan yang sesuai. MSE menyebarkan header ini melalui seluruh rantai panggilan, memungkinkan pengarahan canary ujung ke ujung. Setiap layanan dalam rantai memeriksa header ini dan mengarahkan ke Pod canary-nya jika tersedia.
Deploy resource Rollout:
kubectl apply -f rollout.yamlVerifikasi status Rollout: Jika output menunjukkan
STATUS=Healthy, resource Rollout siap digunakan.kubectl get rollouts rollout-a -n default kubectl get rollouts rollout-c -n default
Picu rilis canary
Kruise Rollouts adalah konfigurasi sekali pakai. Setelah resource Rollout dideploy, picu rilis canary dengan memperbarui gambar Deployment Anda — tidak diperlukan konfigurasi Rollout tambahan. Selain kubectl, Anda juga dapat menggunakan Helm atau Vela untuk mendeploy Deployment ke kluster Anda.
Dalam
mse-demo.yaml, perbarui versi gambar untuk spring-cloud-a dan spring-cloud-c darimse-2.0.0menjadimse-2.0.1: Aplikasi B tetap padamse-2.0.0. Karena B tidak memiliki versi canary, permintaan yang diarahkan ke jalur canary melewati versi dasar B tetapi tetap melanjutkan ke versi canary C. Ini menunjukkan traffic lane ujung ke ujung: bahkan ketika suatu layanan di tengah rantai tidak memiliki deployment canary, tag canary tetap dipertahankan dan layanan hilir tetap mengarahkan dengan benar.# In the spring-cloud-a Deployment image: registry.cn-hangzhou.aliyuncs.com/mse-demo-hz/spring-cloud-a:mse-2.0.1 # In the spring-cloud-c Deployment image: registry.cn-hangzhou.aliyuncs.com/mse-demo-hz/spring-cloud-c:mse-2.0.1Terapkan Deployment yang diperbarui:
kubectl apply -f mse-demo.yamlPeriksa progres Rollout: Output yang diharapkan:
Field Value Meaning STATUSProgressingRilis canary sedang berlangsung CANARY_STATEStepPausedBatch canary telah dideploy dan rollout menunggu persetujuan manual kubectl get rollouts rollout-a -n default kubectl get rollouts rollout-c -n defaultNAME STATUS CANARY_STEP CANARY_STATE MESSAGE AGE rollout-a Progressing 1 StepPaused Rollout is in step(1/1), and you need manually confirm to enter the next step 41m rollout-c Progressing 1 StepPaused Rollout is in step(1/1), and you need manually confirm to enter the next step 41m
Verifikasi dan promosikan versi canary
Kirim permintaan uji canary dengan menyertakan header
User-Agent: xiaoming: Traffic canary mengalir melalui versi canary A dan C, sementara B menggunakan versi dasarnya. Verifikasi perilaku melalui log aplikasi dan metrik pemantauan.curl http://<EXTERNAL_IP>/a -H "User-Agent: xiaoming"Setelah memastikan versi canary berfungsi sesuai harapan, setujui rollout untuk mempromosikannya ke produksi. Jalankan perintah berikut untuk setiap Rollout yang memiliki versi canary yang dideploy (dalam demo ini,
rollout-adanrollout-c). Ganti<rollouts-demo>dengan nama resource Rollouts:rollout.rollouts.kruise.io/<rollouts-demo> approved
Kembalikan rilis canary
Jika versi canary tidak memenuhi harapan, kembalikan versi gambar dalam mse-demo.yaml ke nilai aslinya dan terapkan kembali:
kubectl apply -f mse-demo.yamlTidak diperlukan perubahan pada resource Rollout. Kruise Rollouts mendeteksi perubahan Deployment dan menangani rollback secara otomatis.
Fitur rilis canary ujung ke ujung dari Microservices Governance menyediakan jalur lalu lintas, yang sangat mempermudah verifikasi selama pengujian dan rilis. Anda dapat menggunakan Microservices Governance bersama Kruise Rollouts untuk meningkatkan stabilitas aplikasi online secara signifikan dalam proses DevOps.