All Products
Search
Document Center

Alibaba Cloud Service Mesh:Peluncuran kanari ujung ke ujung dengan Argo CD

Last Updated:Jun 21, 2026

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

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

  1. Buat contoh peluncuran kanari ujung ke ujung untuk aplikasi mock.

    1. 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. Pilih PRUNE RESOURCES untuk 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.

  2. Setelah menyelesaikan konfigurasi, klik CREATE di bagian atas halaman.

    Di halaman Applications di Argo CD, Anda dapat melihat status aplikasi mock yang baru saja dibuat.

    Status aplikasi harus Healthy dan status sinkronisasi harus Synced, yang menunjukkan bahwa aplikasi berhasil diterapkan dan disinkronkan.

  3. Klik aplikasi mock untuk 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.

  1. Dapatkan alamat IP publik gerbang dari Konsol ASM. Untuk informasi selengkapnya, lihat Dapatkan alamat IP gerbang ASM.

  2. Jalankan perintah berikut untuk menetapkan variabel lingkungan.

    Ganti xxx.xxx.xxx.xxx dengan alamat IP dari langkah sebelumnya.

    export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx
  3. 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, dan mockc. Rantai pemanggilan layanan adalah mockamockbmockc, 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 mocka, mockb, dan mockc.

swimlanegroup.yaml

Definisi grup jalur. Grup jalur dikaitkan dengan satu atau beberapa jalur lalu lintas dan mendefinisikan informasi bersama untuk mereka. Ini menentukan services yang memerlukan lingkungan terisolasi dan aturan gerbang ingress untuk mengakses layanan dalam grup jalur tersebut.

swimlanes.yaml

Definisi jalur lalu lintas. File ini mendefinisikan dua resource ASMSwimLane: v1 dan v2. Jalur lalu lintas terutama menggunakan labelSelector untuk membedakan versi layanan berdasarkan label mereka.

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:

  1. Tambahkan file argo-cd/swimlane/mock-v3.yaml.

    File YAML ini mendefinisikan Penyebaran (Deployments) untuk versi v3 layanan mocka, mockb, dan mockc.

    YAML

    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: mocka-v3
     labels:
     app: mocka
     version: v3
    spec:
     replicas: 1
     selector:
     matchLabels:
     app: mocka
     version: v3
     ASM_TRAFFIC_TAG: v3
     template:
     metadata:
     labels:
     app: mocka
     version: v3
     ASM_TRAFFIC_TAG: v3
     spec:
     containers:
     - name: default
     image: registry.cn-beijing.aliyuncs.com/aliacs-app-catalog/go-http-sample:1.0
     imagePullPolicy: IfNotPresent
     env:
     - name: version
     value: v3
     - name: app
     value: mocka
     - name: upstream_url
     value: "http://mockb:8000/"
     ports:
     - containerPort: 8000
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: mockb-v3
     labels:
     app: mockb
     version: v3
    spec:
     replicas: 1
     selector:
     matchLabels:
     app: mockb
     version: v3
     ASM_TRAFFIC_TAG: v3
     template:
     metadata:
     labels:
     app: mockb
     version: v3
     ASM_TRAFFIC_TAG: v3
     spec:
     containers:
     - name: default
     image: registry.cn-beijing.aliyuncs.com/aliacs-app-catalog/go-http-sample:1.0
     imagePullPolicy: IfNotPresent
     env:
     - name: version
     value: v3
     - name: app
     value: mockb
     - name: upstream_url
     value: "http://mockc:8000/"
     ports:
     - containerPort: 8000
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: mockc-v3
     labels:
     app: mockc
     version: v3
    spec:
     replicas: 1
     selector:
     matchLabels:
     app: mockc
     version: v3
     ASM_TRAFFIC_TAG: v3
     template:
     metadata:
     labels:
     app: mockc
     version: v3
     ASM_TRAFFIC_TAG: v3
     spec:
     containers:
     - name: default
     image: registry.cn-beijing.aliyuncs.com/aliacs-app-catalog/go-http-sample:1.0
     imagePullPolicy: IfNotPresent
     env:
     - name: version
     value: v3
     - name: app
     value: mockc
     ports:
     - containerPort: 8000
  2. Modifikasi file argo-cd/swimlane/swimlanes.yaml dengan konten berikut.

    Jalur lalu lintas (ASMSwimLane) baru bernama v3 ditambahkan. Resource ini dikaitkan dengan grup jalur mock (ASMSwimLaneGroup) dan menentukan bahwa Pod dengan label version:v3 termasuk dalam versi layanan v3.

    YAML

    apiVersion: istio.alibabacloud.com/v1
    kind: ASMSwimLane
    metadata:
     labels:
     swimlane-group: mock
     name: v1
    spec:
     labelSelector:
     version: v1
    ---
    apiVersion: istio.alibabacloud.com/v1
    kind: ASMSwimLane
    metadata:
     labels:
     swimlane-group: mock
     name: v2
    spec:
     labelSelector:
     version: v2
    ---
    apiVersion: istio.alibabacloud.com/v1
    kind: ASMSwimLane
    metadata:
     labels:
     swimlane-group: mock
     name: v3
    spec:
     labelSelector:
     version: v3
  3. Modifikasi file argo-cd/swimlane/mock-route.yaml dengan konten berikut.

    VirtualService bernama mock dimodifikasi dengan menambahkan versi v3 layanan mocka ke tujuan rute. Bidang subset dipetakan ke nama jalur lalu lintas (ASMSwimLane). Bidang weight dalam VirtualService disesuaikan untuk membagi lalu lintas antara versi v1, v2, dan v3 dengan rasio 6:3:1.

    YAML

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
     name: ingressgateway
     namespace: istio-system
    spec:
     selector:
     istio: ingressgateway
     servers:
     - port:
     number: 80
     name: http
     protocol: HTTP
     hosts:
     - '*'
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
     name: mock
     namespace: istio-system
    spec:
     gateways:
     - ingressgateway
     hosts:
     - '*'
     http:
     - match:
     - uri:
     exact: /mock
     route:
     - destination:
     host: mocka.default.svc.cluster.local
     subset: v1
     weight: 60
     - destination:
     host: mocka.default.svc.cluster.local
     subset: v2
     weight: 30
     - destination:
     host: mocka.default.svc.cluster.local
     subset: v3
     weight: 10