Dalam tutorial ini, Anda akan memandu kasus penggunaan umum meluncurkan deployment canary dengan Anthos Service Mesh.
Apa itu deployment canary?
Deployment canary mengarahkan sebagian kecil traffic ke versi baru microservice, lalu memungkinkan Anda meluncurkannya secara bertahap ke seluruh basis pengguna, sekaligus menghentikan dan menghentikan versi lama. Jika terjadi masalah selama proses ini, traffic dapat dialihkan kembali ke versi lama. Dengan Anthos Service Mesh, Anda dapat merutekan traffic untuk memastikan bahwa layanan baru diperkenalkan dengan aman.
Anda dapat membaca lebih lanjut tentang pengujian canary di Strategi deployment dan pengujian aplikasi.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tutorial ini, Anda dapat menghindari biaya berkelanjutan dengan menghapus resource yang Anda buat. Untuk informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara mengonfirmasi bahwa penagihan diaktifkan untuk project Anda.
Instal Anthos Service Mesh terkelola* di cluster GKE.
Clone repo:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples cd anthos-service-mesh-samples/docs/canary-service
Deploy Butik Online
Tetapkan konteks saat ini untuk
kubectl
ke cluster tempat Anda men-deploy Online Boutique:gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
Buat namespace untuk aplikasi contoh dan gateway masuknya:
kubectl create namespace onlineboutique
Beri label namespace
onlineboutique
untuk memasukkan proxy Envoy secara otomatis. Ikuti langkah-langkah tentang cara mengaktifkan injeksi file bantuan otomatis.Deploy aplikasi contoh. Untuk tutorial ini, Anda akan men-deploy Online Boutique, yaitu aplikasi demo microservice.
kubectl apply \ -n onlineboutique \ -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-service-mesh-samples/main/docs/shared/online-boutique/kubernetes-manifests.yaml
Tambahkan label
version=v1
ke deploymentproductcatalog
dengan menjalankan perintah berikut:kubectl patch deployments/productcatalogservice -p '{"spec":{"template":{"metadata":{"labels":{"version":"v1"}}}}}' \ -n onlineboutique
Melihat layanan yang telah Anda deploy:
kubectl get pods -n onlineboutique
Output yang diharapkan:
NAME READY STATUS RESTARTS AGE adservice-85598d856b-m84m6 2/2 Running 0 2m7s cartservice-c77f6b866-m67vd 2/2 Running 0 2m8s checkoutservice-654c47f4b6-hqtqr 2/2 Running 0 2m10s currencyservice-59bc889674-jhk8z 2/2 Running 0 2m8s emailservice-5b9fff7cb8-8nqwz 2/2 Running 0 2m10s frontend-77b88cc7cb-mr4rp 2/2 Running 0 2m9s loadgenerator-6958f5bc8b-55q7w 2/2 Running 0 2m8s paymentservice-68dd9755bb-2jmb7 2/2 Running 0 2m9s productcatalogservice-84f95c95ff-c5kl6 2/2 Running 0 114s recommendationservice-64dc9dfbc8-xfs2t 2/2 Running 0 2m9s redis-cart-5b569cd47-cc2qd 2/2 Running 0 2m7s shippingservice-5488d5b6cb-lfhtt 2/2 Running 0 2m7s
Semua pod untuk aplikasi Anda harus sudah aktif dan berjalan, dengan
2/2
di kolomREADY
. Hal ini menunjukkan bahwa pod memiliki proxy file bantuan Envoy yang berhasil dimasukkan.Deploy
VirtualService
danDestinationRule
Anda untuk v1productcatalog
:kubectl apply -f destination-vs-v1.yaml -n onlineboutique
Perlu diketahui bahwa hanya
v1
yang ada dalam resource.Buka aplikasi di browser menggunakan alamat IP eksternal ingress Anda:
kubectl get services -n GATEWAY_NAMESPACE
Bagian berikutnya akan membahas UI Anthos Service Mesh dan cara melihat metrik.
Men-deploy dan Melihat layanan Anda di Konsol Google Cloud
Di konsol Google Cloud, buka halaman GKE Enterprise Services.
Secara default, Anda melihat layanan dalam tampilan Tabel.
Ringkasan Tabel memungkinkan Anda mengamati semua layanan, serta metrik penting secara sekilas.
Di kanan atas, klik Topologi. Di sini Anda dapat melihat layanan Anda dan interaksinya satu sama lain.
Anda dapat memperluas layanan dan melihat permintaan per detik untuk setiap layanan dengan mengarahkan kursor ke layanan tersebut.
Kembali ke Tampilan Tabel.
Di Services Table, pilih
productcatalogservice
. Anda akan diarahkan ke ringkasan layanan.Di sisi kiri layar, klik Lalu lintas.
Pastikan 100% traffic masuk ke
productcatalogservice
dialokasikan ke layanan beban kerja.
Bagian berikutnya akan membahas pembuatan layanan productcatalog
v2.
Men-deploy v2 layanan
Untuk tutorial ini,
productcatalogservice-v2
akan memperkenalkan latensi 3 detik ke dalam permintaan dengan kolomEXTRA_LATENCY
.Terapkan resource ini ke namespace
onlineboutique
.kubectl apply -f productcatalog-v2.yaml -n onlineboutique
Periksa pod aplikasi Anda.
kubectl get pods -n onlineboutique
Output yang diharapkan:
NAME READY STATUS RESTARTS AGE adservice-85598d856b-8wqfd 2/2 Running 0 25h cartservice-c77f6b866-7jwcr 2/2 Running 0 25h checkoutservice-654c47f4b6-n8c6x 2/2 Running 0 25h currencyservice-59bc889674-l5xw2 2/2 Running 0 25h emailservice-5b9fff7cb8-jjr89 2/2 Running 0 25h frontend-77b88cc7cb-bwtk4 2/2 Running 0 25h loadgenerator-6958f5bc8b-lqmnw 2/2 Running 0 25h paymentservice-68dd9755bb-dckrj 2/2 Running 0 25h productcatalogservice-84f95c95ff-ddhjv 2/2 Running 0 25h productcatalogservice-v2-6df4cf5475-9lwjb 2/2 Running 0 8s recommendationservice-64dc9dfbc8-7s7cx 2/2 Running 0 25h redis-cart-5b569cd47-vw7lw 2/2 Running 0 25h shippingservice-5488d5b6cb-dj5gd 2/2 Running 0 25h
Perhatikan bahwa sekarang ada dua
productcatalogservices
yang tercantum.DestinationRule
adalah cara menentukan subset layanan. Dalam skenario ini, ada subset untuk v1 dan untuk v2 dariproductcatalogservice
.Perhatikan kolom
labels
. Versiproductcatalogservice
dibedakan setelah traffic dirutekan olehVirtualService
.Terapkan
DestinationRule
:kubectl apply -f destination-v1-v2.yaml -n onlineboutique
Memisahkan Traffic antara v1 dan v2
VirtualService
adalah cara Anda memperkenalkan sebagian kecil traffic untuk mengarahkan ke v2 dariproductcatalogservice
.Isian {i>subset<i} menunjukkan versi, dan bidang {i>bobot<i} menunjukkan pembagian persentase lalu lintas. 75% traffic akan masuk ke v1 dari productcatalog, dan 25% akan masuk ke v2.
Terapkan
VirtualService
:kubectl apply -f vs-split-traffic.yaml -n onlineboutique
Jika mengunjungi EXTERNAL_IP
ingress cluster, Anda akan melihat bahwa secara berkala frontend lebih lambat untuk dimuat.
Di bagian berikutnya, Anda akan mempelajari pemisahan traffic di konsol Google Cloud GKE Enterprise.
Mengamati Pembagian Traffic di Konsol Google Cloud
Kembali ke Konsol Google Cloud, lalu buka halaman GKE Enterprise Services Buka GKE Enterprise Services
Di kanan atas, klik Topologi.
Perluas beban kerja
productcatalogservice
. Anda akan melihat deploymentproductcatalogservice
danproductcatalogservice-v2
.Kembali ke Table View. Klik
productcatalogservice
di Tabel Layanan. Kembali ke Traffic di menu navigasi sebelah kiri.Perhatikan bahwa traffic masuk dibagi antara v1 dan v2 berdasarkan persentase yang ditentukan dalam file
VirtualService
, dan ada 2 beban kerja layanan productcatalog.Di sisi kanan layar, Anda akan melihat Permintaan, Tingkat Error, dan Metrik Latensi. Dengan Anthos Service Mesh, setiap layanan akan diuraikan metrik ini untuk memberi Anda kemampuan observasi.
Meluncurkan atau Melakukan Rollback ke versi
Setelah mengamati metrik selama deployment canary, Anda dapat meluncurkan ke layanan baru, atau melakukan rollback ke layanan lama dengan memanfaatkan resource VirtualService
.
Peluncuran
Setelah Anda puas dengan perilaku layanan v2, tingkatkan perilaku traffic ke layanan v2 secara bertahap. Pada akhirnya, traffic dapat diarahkan 100% ke layanan baru.
Untuk mengarahkan semua traffic ke v2 dari productcatalogservice
:
kubectl apply -f vs-v2.yaml -n onlineboutique
Rollback
Jika Anda perlu melakukan roll back ke layanan v1, cukup terapkan destination-vs-v1.yaml
dari sebelumnya. Tindakan ini hanya akan mengarahkan traffic ke productcatalogservice
v1.
Untuk mengarahkan semua traffic ke v1 dari productcatalogservice
:
kubectl apply -f vs-v1.yaml -n onlineboutique
Pembersihan
Agar tidak dikenakan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource-nya.
Agar tidak menimbulkan biaya berkelanjutan pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, Anda dapat menghapus project atau menghapus setiap resource.
Menghapus project
Di Cloud Shell, hapus project:
gcloud projects delete PROJECT_ID
Menghapus resource
Jika Anda ingin mencegah biaya tambahan, hapus cluster:
gcloud container clusters delete CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
Jika Anda ingin mempertahankan cluster dan menghapus contoh Butik Online:
Hapus namespace aplikasi:
kubectl delete -f namespace onlineboutique
Output yang diharapkan:
namespace "onlineboutique" deleted
Hapus entri layanan:
kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/microservices-demo/main/istio-manifests/frontend.yaml -n onlineboutique kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/microservices-demo/main/istio-manifests/frontend-gateway.yaml -n onlineboutique
Output yang diharapkan:
serviceentry.networking.istio.io "allow-egress-googleapis" deleted serviceentry.networking.istio.io "allow-egress-google-metadata" deleted
Langkah selanjutnya
- Untuk panduan umum tentang mengonfigurasi kebijakan
PeerAuthentication
, lihat Mengonfigurasi keamanan transport.