Argo Rollouts adalah sebuah controller Kubernetes yang mencakup satu set CustomResourceDefinition (CRDs). Anda dapat mengintegrasikan Service Mesh (ASM) dengan Argo Rollouts untuk memberikan kemampuan lebih kuat dalam rilis canary. Jika ingin memperbarui aplikasi di lingkungan Kubernetes dan mengurangi risiko terkait pembaruan, integrasi ASM dengan Argo Rollouts memungkinkan implementasi rilis canary. Dengan cara ini, Anda dapat secara bertahap mendorong versi baru aplikasi kepada pengguna dalam beberapa batch sambil mengamati kinerjanya secara real-time. Hal ini membantu mengendalikan risiko secara efektif, menjamin stabilitas layanan dan pengalaman pengguna, serta berhasil melakukan iterasi versi tanpa mengganggu kontinuitas bisnis.
Prasyarat
Sebuah instance ASM dengan versi 1.12.4.50 atau lebih baru telah dibuat. Untuk informasi lebih lanjut, lihat Buat Instance ASM.
Instance ASM telah terhubung menggunakan kubectl. Untuk informasi lebih lanjut, lihat Gunakan kubectl pada Control Plane untuk Mengakses Sumber Daya Istio.
Persiapan
Instal Argo Rollout
Untuk menginstal Argo Rollouts, ikuti langkah-langkah berikut. Untuk informasi lebih lanjut, lihat Instalasi.
Jalankan perintah berikut untuk menginstal server Argo Rollouts:
kubectl create namespace argo-rollouts kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yamlJalankan perintah berikut untuk menginstal plug-in kubectl Argo Rollout.
Plug-in kubectl Argo Rollouts menyediakan manajemen berbasis kubectl.
brew install argoproj/tap/kubectl-argo-rollouts
Aktifkan akses ke sumber daya Istio dari instance ASM pada data plane menggunakan Kubernetes API
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih .
Klik Enable di sebelah kanan Enable Data-plane KubeAPI access.

Di pesan yang muncul, klik OK.
Implementasikan rilis canary
Contoh berikut menunjukkan cara membuat versi stabil dan versi rilis canary serta bagaimana secara bertahap memindahkan lalu lintas dari versi stabil ke versi rilis canary berdasarkan rasio lalu lintas. Untuk informasi lebih lanjut tentang rilis canary, lihat Konfigurasikan Rilis Canary.
Langkah 1: Buat Aplikasi Rollout dan Layanan
Buat rollout.
Buat file rollout.yaml yang berisi konten berikut:
Bidang
strategymendefinisikan kebijakan rilis canary. Berikut ini menjelaskan parameter setWeight dan pause di bawah bidang strategy:setWeight: bobot lalu lintas yang akan diarahkan ke versi rilis canary.pause: menjeda Rollout. Jika tidak adadurationyang ditentukan untuk langkah jeda, Rollout harus diperbarui secara manual. Jikadurationditentukan untuk langkah jeda, sistem akan memperbarui Rollout secara otomatis setelah durasidurationberakhir.
Jalankan perintah berikut untuk menerapkan Rollout ke cluster yang ditambahkan ke instance ASM Anda:
kubectl apply -f rollout.yaml
Buat layanan.
Buat file service.yaml yang berisi konten berikut:
apiVersion: v1 kind: Service metadata: name: istio-rollout-canary spec: ports: - port: 80 targetPort: http protocol: TCP name: http selector: app: istio-rollout --- apiVersion: v1 kind: Service metadata: name: istio-rollout-stable spec: ports: - port: 80 targetPort: http protocol: TCP name: http selector: app: istio-rolloutJalankan perintah berikut untuk menerapkan layanan ke cluster yang ditambahkan ke instance ASM Anda:
kubectl apply -f service.yaml
Langkah 2: Buat Sumber Daya Istio Terkait
Buat layanan virtual bernama istio-rollout-vsvc.
Anda telah mengaktifkan akses ke sumber daya Istio dari instance ASM pada data plane menggunakan Kubernetes API. Oleh karena itu, Anda dapat menggunakan file kubeconfig pada data plane untuk mengakses sumber daya Istio seperti layanan virtual, gateway Istio, dan aturan tujuan. Sebagai alternatif, Anda dapat menggunakan Konsol ASM atau file kubeconfig untuk membuat sumber daya Istio.
Buat file istio-rollout-vsvc.yaml yang berisi konten berikut:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: istio-rollout-vsvc spec: gateways: - istio-rollout-gateway hosts: - '*' http: - match: - uri: prefix: / name: primary route: - destination: host: istio-rollout-stable weight: 100 - destination: host: istio-rollout-canaryJalankan perintah berikut untuk menerapkan istio-rollout-vsvc:
kubectl apply -f istio-rollout-vsvc.yaml
Buat gateway Istio bernama istio-rollout-gateway.
Buat file istio-rollout-gateway.yaml yang berisi konten berikut:
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: istio-rollout-gateway spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTPJalankan perintah berikut untuk menerapkan istio-rollout-gateway:
kubectl apply -f istio-rollout-gateway.yaml
Langkah 3: Terapkan Gateway Ingress
Buat gateway ingress dengan port 80 diaktifkan untuk pengujian akses layanan.
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih .
Di halaman Ingress Gateway, klik Create. Atur parameter gateway ingress dan klik Create.
Tabel berikut hanya menjelaskan beberapa parameter gateway ingress. Untuk informasi lebih lanjut tentang parameter lainnya dari gateway ingress, lihat Buat Gateway Ingress.
Parameter
Deskripsi
Name
Nama gateway ingress. Untuk contoh ini, atur parameter menjadi ingressgateway.
Gateway types
Tipe gateway ingress. Untuk contoh ini, atur parameter menjadi North-South IngressGateway.
Port Mapping
Pemetaan port gateway ingress. Klik Add Port. Di baris yang muncul, atur parameter Protocol menjadi HTTP dan parameter Service Port menjadi 80.
Langkah 4: Lihat Status Rollout
Jalankan perintah berikut untuk melihat status Rollout:
kubectl argo rollouts get rollout istio-rolloutOutput yang diharapkan:
kubectl argo rollouts get rollout istio-rollout
Name: istio-rollout
Namespace: default
Status: Healthy
Strategy: Canary
Step: 18/18
SetWeight: 100
ActualWeight: 100
Images: argoproj/rollouts-demo:blue (stable)
Replicas:
Desired: 1
Current: 1
Updated: 1
Ready: 1
Available: 1
NAME KIND STATUS AGE INFO
⟳ istio-rollout Rollout Healthy 52s
└──# revision:1
└──⧉ istio-rollout-7f96d86486 ReplicaSet Healthy 52s stable
└──□ istio-rollout-7f96d86486-vpqvb Pod ✔ Running 52s ready:2/2Langkah 5: Uji Status Awal Rollout
Dapatkan alamat IP gateway ingress.
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih .
Dapatkan Service address dari gateway ingress.
Gunakan browser untuk mengakses http://{alamat IP gateway ingress}/.
Gambar berikut menunjukkan hasil akses. Panggilan bersamaan ke http://{alamat IP gateway ingress}/color dipanggil di halaman ini untuk mengisi kotak-kotak dengan warna yang diperoleh. Warna yang ditentukan dalam Rollout istio-rollout adalah
biru, dan rilis canary belum dimulai. Oleh karena itu, warna biru ditampilkan.
Langkah 6: Perbarui Rollout
Dalam contoh ini, kuning digunakan untuk menunjukkan versi rilis canary. Ketika warna kotak-kotak di halaman http://{alamat IP gateway ingress}/ berubah dari biru menjadi kuning, rilis canary diimplementasikan.
Perbarui versi gambar kontainer untuk Rollout.
Jalankan perintah berikut untuk memperbarui versi gambar:
kubectl argo rollouts set image istio-rollout "*=argoproj/istio-rollout:kuning"Lihat versi gambar kontainer yang sesuai.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan cluster yang diinginkan dan klik namanya. Di panel kiri, pilih .
Di kolom Name, lihat versi gambar kontainer yang sesuai.
Pod di mana versi kuning (versi rilis canary) berjalan dibuat, tetapi pod di mana versi biru (versi stabil) berjalan juga masih ada, seperti yang ditunjukkan pada gambar berikut.

Gunakan browser untuk mengakses http://{alamat IP gateway ingress}/.
Hasilnya menunjukkan bahwa 10% kotak biru berubah menjadi kuning, seperti yang ditunjukkan pada gambar berikut.
Ini karena bobot lalu lintas layanan virtual yang dikonfigurasi berubah. Secara spesifik, bobot lalu lintas versi stabil (versi biru) berubah dari 100 menjadi 90, sedangkan bobot lalu lintas versi rilis canary (versi kuning) berubah dari 0 menjadi 10. Rollout mengontrol bobot lalu lintas layanan virtual. Bobot lalu lintas yang Anda tentukan untuk versi rilis canary pada langkah pertama diatur ke 10saat Rollout dibuat. Oleh karena itu, ketika Rollout dimulai, controller Argo Rollouts mengubah bobot lalu lintas yang dikonfigurasi untuk layanan virtual di Rollout sesuai dengan itu. Selain itu, parameterpausedibiarkan kosong. Ini berarti Rollout perlu dikonfirmasi secara manual untuk melanjutkan ke tahap berikutnya.Lanjutkan riliscanary.
Jalankan perintah berikut untuk melanjutkan rilis canary:
kubectl argo rollouts promote istio-rolloutGunakan browser untuk mengakses http://{alamat IP gateway ingress}/.
Gambar berikut menunjukkan hasilnya. Bobot lalu lintas layanan virtual terus disesuaikan berdasarkan konfigurasi di Rollout. Pada tahap ini, durasi
pauseditentukan. Untuk informasi lebih lanjut, lihat Langkah 1. Oleh karena itu, sistem secara otomatis menyesuaikan bobot lalu lintas layanan virtual setelah durasi jeda yang ditentukan berakhir.
Periksa apakah rilis canary berhasil.
Tunggu sejenak. Kemudian, gunakan browser untuk mengakses http://{alamat IP gateway ingress}/.
Semua kotak biru diubah menjadi kuning, seperti yang ditunjukkan pada gambar berikut.
Jalankan perintah berikut untuk melihat status Rollout:
kubectl argo rollouts get rollout istio-rollout --watchOutput yang diharapkan:
Name: istio-rollout Namespace: default Status: Sehat Strategy: Canary Step: 18/18 SetWeight: 100 ActualWeight: 100 Images: argoproj/rollouts-demo:yellow (stabil) Replicas: Desired: 1 Current: 1 Updated: 1 Ready: 1 Available: 1 NAME KIND STATUS AGE INFO ⟳ istio-rollout Rollout Healthy 48m ├──# revision:4 │ └──⧉ istio-rollout-5fcf5864c4 ReplicaSet Healthy 27m stabil │ └──□ istio-rollout-5fcf5864c4-vw6kh Pod Running 26m ready:2/2 ├──# revision:3 │ └──Output menunjukkan bahwa versi gambar kontainer untuk Rollout diperbarui menjadi
yellow.
Gunakan Prometheus untuk mengimplementasikan rollback otomatis
Selama rilis canary, Anda dapat menjalankan perintah kubectl argo rollouts abort istio-rollout untuk kembali ke versi stabil. Anda juga dapat menggunakan sistem Prometheus untuk memantau status kesehatan aplikasi yang terlibat dalam rilis canary. Jika anomali metrik terjadi, versi rilis canary secara otomatis dikembalikan ke versi stabil dan ditandai sebagai Degraded.
Aktifkan Prometheus di ASM. Untuk informasi lebih lanjut, lihat Integrasi Managed Service for Prometheus untuk Memantau Instance ASM atau Pantau Instance ASM Menggunakan Instance Prometheus yang Dikelola Sendiri.
Konfigurasikan Argo AnalysisTemplate.
Buat file istio-success-rate.yaml yang berisi konten berikut.
Atur parameter
addressdari AnalysisTemplate ke titik akhir instance Prometheus yang terhubung ke ASM.apiVersion: argoproj.io/v1alpha1 kind: AnalysisTemplate metadata: name: istio-success-rate spec: args: - name: service - name: namespace metrics: - name: success-rate initialDelay: 60s interval: 20s successCondition: result[0] > 0.90 provider: prometheus: address: http://xxx.aliyuncs.com:9090/api/v1/prometheus/ query: >+ sum(irate(istio_requests_total{ reporter="source", destination_service=~"{{args.service}}.{{args.namespace}}.svc.cluster.local", response_code!~"5.*"}[40s]) ) / sum(irate(istio_requests_total{ reporter="source", destination_service=~"{{args.service}}.{{args.namespace}}.svc.cluster.local"}[40s]) )Jalankan perintah berikut untuk menerapkan Argo AnalysisTemplate:
kubectl apply -f istio-success-rate.yaml
Hubungkan Analisis dengan Rollout.
Buat file rollout.yaml yang berisi konten berikut.
Atur parameter
analysisdi bawahstrategysehingga Analisis dapat digunakan untuk pemantauan dan rollback otomatis mulai langkah kedua. Versi gambar awal kontainer untuk Rollout adalah yellow.Jalankan perintah berikut untuk memperbarui Rollout:
kubectl apply -f rollout.yaml
Jalankan perintah berikut untuk memperbarui versi gambar:
kubectl argo rollouts set image istio-rollout "*=argoproj/rollouts-demo:orange"Gunakan browser untuk mengakses http://{alamat IP gateway ingress}/. Gambar berikut menunjukkan hasilnya.

Konfirmasi pembaruan Rollout secara manual.
Jalankan perintah berikut untuk melanjutkan rilis canary.
Setelah Anda menjalankan perintah tersebut, rilis canary otomatis dimulai. Selain itu, pemantauan Prometheus diaktifkan mulai langkah kedua. Dalam hal ini, jika versi rilis canary memiliki tingkat kesalahan lebih dari 90%, rollback akan dipicu.
kubectl argo rollouts promote istio-rolloutJalankan perintah berikut untuk melihat status Rollout:
kubectl argo rollouts get rollout istio-rollout --watchKeluaran yang diharapkan:

Konfigurasikan tingkat kesalahan.
Dalam rilis progresif berikutnya, Anda dapat menyesuaikan tingkat kesalahan untuk versi rilis canary secara manual. Jika bilah kemajuan kesalahan mencapai 100%, semua grid oranye (versi rilis canary) dibingkai merah untuk menunjukkan kesalahan. Setelah beberapa saat, semua versi rilis canary secara otomatis dikembalikan ke versi stabil mereka (grid kuning).
Gambar 1. Gambar berikut menunjukkan bahwa rilis canary sedang dilaksanakan.

Gambar 2. Gambar berikut menunjukkan bahwa semua versi rilis canary telah dikembalikan secara otomatis ke versi stabil mereka.
