Gerbang ASM mendukung peningkatan canary untuk pengalaman peningkatan yang mulus. Topik ini menggunakan contoh peningkatan in-place instans ASM untuk menunjukkan cara menjalankan satu Pod pada versi baru sehingga Anda dapat memverifikasi traffic sebelum semua Pod gerbang ditingkatkan.
Prasyarat
-
Instans dan versi ASM — Pastikan Anda telah menambahkan kluster ke instans ASM, dan versi ASM adalah 1.20 atau lebih baru. Untuk petunjuk peningkatan instans ASM, lihat Upgrade an ASM instance.
-
Gerbang masuk — Pastikan Anda telah membuat ingress gateway.
-
Shutdown yang mulus — Aktifkan graceful shutdown untuk gerbang sebelum melakukan peningkatan guna meminimalkan risiko kehilangan traffic selama proses tersebut. Untuk petunjuknya, lihat Enable graceful shutdown to prevent traffic loss.
-
Tidak ada konflik nama dengan Canary Deployment — Pastikan tidak ada Deployment di namespace gerbang yang namanya sama dengan nama Deployment gerbang ditambah akhiran
-canary. Misalnya, jika gerbang bernamaingressgateway, pastikan tidak ada Deployment bernamaistio-ingressgateway-canarydi namespaceistio-system. -
Akses bidang data — Dapatkan file KubeConfig bidang data agar Anda dapat menjalankan perintah kubectl terhadap kluster bidang data.
Cara kerja peningkatan canary gerbang
Sebagai titik masuk dan keluar tunggal untuk service traffic, gerbang harus memenuhi persyaratan ketersediaan yang ketat. Peningkatan canary membantu Anda menjaga kelangsungan bisnis. Anda mengubah konfigurasi gerbang untuk pertama kali menjalankan Pod gerbang yang menggunakan versi baru dan memverifikasi traffic pada Pod tersebut. Gerbang hanya akan sepenuhnya ditingkatkan setelah verifikasi berhasil. Jika terjadi masalah selama verifikasi, Anda dapat menghapus Pod baru ini kapan saja, lalu melanjutkan peningkatan setelah masalah terselesaikan.
Peningkatan canary gerbang ASM berbeda dengan peningkatan canary instans ASM. Peningkatan canary gerbang ASM tersedia terlepas dari apakah Anda melakukan peningkatan in-place atau peningkatan canary pada instans ASM.
Di ASM, peningkatan lapisan kontrol dan peningkatan bidang data dilakukan secara terpisah. Bidang data dapat ditingkatkan setelah peningkatan lapisan kontrol selesai.
Peningkatan canary gerbang membuat Deployment dengan replika tunggal yang sesuai dengan versi lapisan kontrol saat ini. Deployment ini disebut Canary Deployment, dan satu-satunya Pod yang dikelolanya adalah canary pod. Canary Deployment termasuk dalam Service yang sama dengan Deployment asli gerbang. Perbedaannya adalah nama Canary Deployment merupakan nama Deployment asli ditambah akhiran -canary.
Jika Deployment dengan nama yang sama dan akhiran -canary sudah ada di namespace gerbang, Deployment tersebut tidak akan ditimpa.
Kedua jalur peningkatan instans ASM berikut mendukung peningkatan canary gerbang. Identifikasi jalur Anda sebelum memulai:
-
Peningkatan in-place instans ASM — Setelah peningkatan lapisan kontrol selesai, gerbang masih menjalankan versi sebelumnya. Lakukan Langkah 1 hingga Langkah 4 dalam topik ini.
-
Peningkatan canary instans ASM — Langkah 1 dalam topik ini tidak berlaku. Selama peningkatan canary instans ASM, setelah Anda mengalihkan versi baru sebagai lapisan kontrol default, gerbang menunggu untuk ditingkatkan. Lanjutkan dari Langkah 2 untuk men-deploy canary pod untuk gerbang, verifikasi traffic, lalu tingkatkan gerbang setelah verifikasi berhasil.
Langkah 1: Tingkatkan lapisan kontrol
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Di halaman Upgrade Management, pada tab In-place Upgrades, klik Perform Upgrade Precheck. Di kotak dialog Note, klik OK.
CatatanJika halaman menampilkan Currently, it is the latest version and does not need to be upgraded., mesh layanan sudah menggunakan versi terbaru dan tidak dapat ditingkatkan.
-
Setelah pemeriksaan awal peningkatan berhasil, klik Upgrade. Di kotak dialog Note, klik OK.
Langkah 2: Deploy canary pod untuk gerbang ASM
Untuk men-deploy canary pod untuk gerbang ASM, tambahkan anotasi asm.alibabacloud.com/enable-canary-deployment: "true" ke bagian annotations di bawah bidang metadata dalam file YAML gerbang ASM. Gunakan Konsol ASM atau baris perintah kubectl.
Metode 1: Gunakan Konsol ASM
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Di halaman Ingress Gateway, klik View YAML di sebelah kanan gerbang target. Di kotak dialog Edit, tambahkan anotasi tersebut, lalu klik OK.
Metode 2: Gunakan perintah kubectl
-
Jalankan perintah berikut untuk membuka file YAML gerbang ASM.
kubectl edit IstioGateway <YOUR-INGRESSGATEWAY-NAME> -n istio-system -
Edit file YAML untuk menambahkan anotasi, lalu simpan file tersebut.
Contoh file YAML berikut menunjukkan konfigurasi gerbang ASM dengan anotasi yang telah ditambahkan. Hasilnya sama untuk kedua metode.
apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
labels:
asm-gateway-type: ingress
annotations:
asm.alibabacloud.com/enable-canary-deployment: "true" # Tambahkan anotasi ini.
name: ingressgateway
namespace: istio-system
spec:
clusterIds:
- xxxxxxxxxxxxxx
disableContainerPortExposed: true
dnsPolicy: ClusterFirst
externalTrafficPolicy: Local
gatewayType: ingress
ports:
- name: http-0
port: 80
protocol: HTTP
targetPort: 80
replicaCount: 1
resources:
limits:
cpu: '2'
memory: 4G
requests:
cpu: 200m
memory: 256Mi
rollingMaxSurge: 25%
rollingMaxUnavailable: 25%
serviceAnnotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain: 'on'
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout: '10'
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: PayByCLCU
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
serviceType: LoadBalancer
Verifikasi canary pod dan traffic-nya
Lakukan langkah-langkah berikut terlepas dari metode yang Anda gunakan untuk menambahkan anotasi.
-
Gunakan file KubeConfig bidang data untuk menjalankan perintah berikut guna melihat Canary Deployment yang telah dideploy. Dalam contoh ini, nama gerbang adalah
ingressgateway. Gantilah sesuai skenario aktual Anda.kubectl -n istio-system get deployment | grep ingressgatewayOutput yang diharapkan:
istio-ingressgateway 1/1 1 1 10m istio-ingressgateway-canary 1/1 1 1 55sDeployment dengan akhiran
-canaryadalah Canary Deployment. Tunggu hingga jumlah replika siap mencapai1/1, seperti yang ditunjukkan pada output di atas. -
Setelah canary pod siap, sebagian traffic akan diarahkan ke canary pod tersebut. Periksa apakah traffic yang mencapai gerbang berjalan normal.
Jika traffic normal, lanjutkan ke Langkah 3 untuk meningkatkan gerbang. Jika traffic tidak normal, kembalikan canary pod seperti yang dijelaskan pada bagian berikut.
Kembalikan jika verifikasi gagal
Jika traffic yang mencapai gerbang tidak normal, lakukan langkah-langkah berikut:
-
Simpan log gerbang.
-
Hapus anotasi
asm.alibabacloud.com/enable-canary-deployment: "true"yang telah Anda konfigurasi. Canary pod akan dihapus, dan seluruh traffic akan diarahkan kembali ke Pod gerbang yang menjalankan versi sebelumnya. -
Setelah Anda menyelesaikan masalah tersebut, tambahkan kembali anotasi untuk menerapkan ulang canary pod, lalu verifikasi traffic sekali lagi.
Langkah 3: Tingkatkan gerbang setelah verifikasi berhasil
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Di bagian Data Plane, pada kolom Upgrade, pilih gerbang target lalu klik Upgrade Gateway. Di kotak dialog Note, klik OK dan tunggu hingga peningkatan gerbang selesai.
Langkah 4: Hapus canary pod
Setelah peningkatan gerbang selesai, hapus anotasi yang Anda tambahkan di Langkah 2. Canary pod akan dihapus secara otomatis. Untuk memastikan hasilnya, tampilkan kembali Deployment di namespace gerbang dan pastikan Deployment dengan akhiran -canary sudah tidak ada.
Canary pod selalu mengikuti versi lapisan kontrol. Jika Anda tidak menghapusnya, canary pod akan ditingkatkan bersama lapisan kontrol saat Anda melakukan peningkatan lapisan kontrol berikutnya.