Dalam tutorial ini, Anda akan mempelajari kasus penggunaan umum: meluncurkan deployment canary dengan Cloud Service Mesh menggunakan Istio API.
Apa yang dimaksud dengan deployment canary?
Deployment canary merutekan sebagian kecil traffic ke versi baru microservice, lalu secara bertahap meningkatkan persentase tersebut sambil menghentikan dan menonaktifkan versi lama. Jika terjadi masalah selama proses ini, traffic dapat dialihkan kembali ke versi sebelumnya. Dengan Cloud Service Mesh, Anda dapat merutekan traffic untuk memastikan layanan baru diperkenalkan dengan aman.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen yang dapat ditagih berikut Google Cloud:
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 mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
Pastikan penagihan diaktifkan untuk project Anda Google Cloud . Pelajari cara mengonfirmasi bahwa penagihan diaktifkan untuk project Anda.
Sediakan Cloud Service Mesh di cluster GKE atau di cluster Kubernetes lain yang didukung.
Buat clone repositori:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples cd anthos-service-mesh-samples/docs/canary-service
Men-deploy Online Boutique
Tetapkan konteks saat ini untuk
kubectlke cluster tempat Anda berencana men-deploy Online Boutique. Perintah ini bergantung pada apakah Anda menyediakan Cloud Service Mesh di cluster GKE atau cluster Kubernetes di luar GKE:GKE di Google Cloud
gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATIONGKE di luar Google Cloud
kubectl config use-context CLUSTER_NAMEBuat namespace untuk aplikasi contoh dan ingress gateway:
kubectl create namespace onlineboutiqueBeri label namespace
onlineboutiqueuntuk otomatis memasukkan proxy Envoy. Ikuti langkah-langkah tentang cara mengaktifkan injeksi sidecar otomatis.Deploy aplikasi contoh. Untuk tutorial ini, Anda akan men-deploy Online Boutique, aplikasi demo microservice.
kubectl apply \ -n onlineboutique \ -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-service-mesh-samples/main/docs/shared/online-boutique/kubernetes-manifests.yamlTambahkan label
version=v1ke deploymentproductcatalogdengan menjalankan perintah berikut:kubectl patch deployments/productcatalogservice -p '{"spec":{"template":{"metadata":{"labels":{"version":"v1"}}}}}' \ -n onlineboutiqueLihat layanan yang Anda deploy:
kubectl get pods -n onlineboutiqueOutput 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 2m7s2/2di kolomREADYmenunjukkan bahwa pod sudah aktif dan berjalan dengan proxy Envoy yang berhasil dimasukkan.Deploy
VirtualServicedanDestinationRuleuntukproductcatalogversi 1:kubectl apply -f destination-vs-v1.yaml -n onlineboutiquePerhatikan bahwa hanya
v1yang ada di resource.Buka aplikasi di browser Anda menggunakan alamat IP eksternal ingress gateway Anda:
kubectl get services -n GATEWAY_NAMESPACE
Bagian berikutnya akan membahas UI Cloud Service Mesh dan menunjukkan cara melihat metrik Anda.
Melihat layanan Anda di Google Cloud konsol
Dikonsol, buka halaman Google Kubernetes Engine (GKE) Enterprise edition Services. Google Cloud
Buka Google Kubernetes Engine (GKE) Enterprise edition Services
Secara default, Anda melihat layanan dalam tampilan List.
Ringkasan Tabel memungkinkan Anda mengamati semua layanan, serta metrik penting secara sekilas.
Di kanan atas, klik Topology. Di sini, Anda dapat melihat layanan dan interaksinya satu sama lain.
Anda dapat meluaskan Services dan melihat Requests per second untuk setiap layanan dengan mengarahkan kursor ke layanan tersebut.
Kembali ke Table View.
Di Services Table, pilih
productcatalogservice. Tindakan ini akan membawa Anda ke ringkasan layanan.Di sisi kiri layar, klik Traffic.
Pastikan 100% traffic masuk ke
productcatalogservicemasuk ke layanan workload.
Bagian berikutnya akan membahas cara membuat productcatalog layanan versi 2.
Men-deploy layanan versi 2
Untuk tutorial ini,
productcatalogservice-v2memperkenalkan latensi 3 detik ke dalam permintaan dengan kolomEXTRA_LATENCY. Tindakan ini akan menyimulasikan a regresi dalam versi baru layanan.Terapkan resource ini ke namespace
onlineboutique.kubectl apply -f productcatalog-v2.yaml -n onlineboutiquePeriksa pod aplikasi Anda.
kubectl get pods -n onlineboutiqueOutput 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 25hPerhatikan bahwa sekarang ada dua
productcatalogservicesyang tercantum.Gunakan
DestinationRuleuntuk menentukan subset layanan. Dalam skenario ini, ada subset untuk v1, lalu subset terpisah untukproductcatalogserviceversi 2.Perhatikan kolom
labels. Versiproductcatalogservicedibedakan setelah traffic dirutekan olehVirtualService.Terapkan
DestinationRule:kubectl apply -f destination-v1-v2.yaml -n onlineboutique
Membagi traffic antara v1 dan v2
Gunakan
VirtualServiceuntuk menentukan sebagian kecil traffic yang akan diarahkan keproductcatalogserviceversi 2.Kolom subset menunjukkan versi, dan kolom weight menunjukkan persentase pembagian traffic. 75% traffic masuk ke productcatalog versi 1, dan 25% masuk ke versi 2.
Terapkan
VirtualService:kubectl apply -f vs-split-traffic.yaml -n onlineboutique
Jika Anda membuka EXTERNAL_IP ingress cluster, Anda akan melihat bahwa frontend terkadang lebih lambat dimuat.
Di bagian berikutnya, pelajari pembagian traffic di Google Cloud konsol.
Mengamati pembagian traffic di Google Cloud konsol
Kembali ke Google Cloud konsol dan buka halaman GKE Enterprise Services. Buka GKE Enterprise Services
Di kanan atas, klik Topology.
Luaskan workload
productcatalogservicedan perhatikan deploymentproductcatalogservicedanproductcatalogservice-v2.Kembali ke Table View.
Klik
productcatalogservicedi Services Table.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 workload layanan productcatalog.Di sisi kanan halaman, Anda akan melihat Requests, Error Rate, dan Latency Metrics. Dengan Cloud Service Mesh, setiap layanan memiliki metrik ini yang diuraikan untuk memberi Anda metrik observasi.
Meluncurkan atau melakukan roll back ke versi
Setelah mengamati metrik selama deployment canary, Anda dapat menyelesaikan peluncuran versi layanan baru, atau melakukan roll back ke versi layanan asli dengan memanfaatkan resource VirtualService.
Meluncurkan
Setelah puas dengan perilaku layanan v2, Anda dapat meningkatkan persentase traffic yang diarahkan ke layanan v2 secara bertahap. Pada akhirnya, traffic dapat 100% diarahkan ke layanan baru di resource VirtualService yang Anda buat di atas dengan menghapus pembagian traffic dari resource tersebut.
Untuk mengarahkan semua traffic ke productcatalogservice versi 2:
kubectl apply -f vs-v2.yaml -n onlineboutique
Roll back
Jika Anda perlu melakukan roll back ke layanan v1, terapkan destination-vs-v1.yaml dari sebelumnya. Tindakan ini hanya mengarahkan traffic ke productcatalogservice versi 1.
Untuk mengarahkan semua traffic ke productcatalogservice versi 1:
kubectl apply -f vs-v1.yaml -n onlineboutique
Pembersihan
Agar tidak perlu membayar 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.
Agar tidak dikenakan biaya berkelanjutan pada Google Cloud akun 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 mendaftarkan cluster ke fleet menggunakan gcloud container fleet memberships (bukan --enable-fleet atau --fleet-project selama pembuatan cluster), hapus keanggotaan yang tidak aktif:
gcloud container fleet memberships delete MEMBERSHIP \
--project=PROJECT_ID
Jika Anda ingin mempertahankan konfigurasi cluster untuk Cloud Service Mesh, tetapi menghapus contoh Online Boutique:
Hapus namespace aplikasi:
kubectl delete -f namespace onlineboutiqueOutput yang diharapkan:
namespace "onlineboutique" deletedHapus 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 onlineboutiqueOutput yang diharapkan:
serviceentry.networking.istio.io "allow-egress-googleapis" deleted serviceentry.networking.istio.io "allow-egress-google-metadata" deleted
Langkah berikutnya
- Untuk panduan umum tentang cara mengonfigurasi
PeerAuthenticationkebijakan, lihat Mengonfigurasi keamanan transportasi.