Dalam tutorial ini, Anda akan memandu 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 dari microservice, lalu secara bertahap meningkatkan persentase tersebut menghentikan versi lama. Jika ada yang tidak beres selama proses ini, lalu lintas dapat dialihkan kembali ke versi sebelumnya. Dengan {i>Cloud Service Mesh<i}, Anda dapat mengarahkan lalu lintas untuk memastikan bahwa layanan baru diperkenalkan dengan aman.
Biaya
Dalam dokumen ini, Anda 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 telah dibuat. Untuk informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
Pastikan penagihan diaktifkan untuk project Google Cloud Anda. Pelajari cara mengonfirmasi bahwa penagihan diaktifkan untuk project Anda.
Mesh Layanan Cloud Penyediaan di cluster GKE atau di cluster Kubernetes lain yang didukung.
Meng-cloning repository
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 berencana deploy Online Boutique. Perintahnya tergantung pada apakah Anda menyediakan Cloud Service Mesh di cluster GKE atau Kubernetes cluster di luar GKE:GKE di Google Cloud
gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
GKE di luar Google Cloud
kubectl config use-context CLUSTER_NAME
Buat namespace untuk aplikasi contoh dan gateway masuk:
kubectl create namespace onlineboutique
Beri label namespace
onlineboutique
untuk memasukkan proxy Envoy secara otomatis. Ikuti langkah-langkah tentang cara mengaktifkan injeksi file bantuan otomatis.Men-deploy aplikasi contoh. Untuk tutorial ini, Anda men-deploy Butik Online, 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
Lihat layanan yang 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
2/2
di kolomREADY
menunjukkan bahwa pod aktif dan berjalan dengan Envoy {i>proxy<i} berhasil dimasukkan.Deploy
VirtualService
danDestinationRule
untuk v1 dariproductcatalog
:kubectl apply -f destination-vs-v1.yaml -n onlineboutique
Perhatikan bahwa hanya
v1
yang ada dalam resource.Buka aplikasi di browser menggunakan alamat IP eksternal gateway masuk:
kubectl get services -n GATEWAY_NAMESPACE
Bagian selanjutnya akan membahas UI Cloud Service Mesh dan menunjukkan cara melihat metrik Anda.
Melihat layanan Anda di konsol Google Cloud
Di konsol Google Cloud, buka halaman Layanan edisi Google Kubernetes Engine (GKE) Enterprise.
Buka Layanan Google Kubernetes Engine (GKE) Enterprise edition
Secara default, Anda melihat layanan Anda dalam tampilan Daftar.
Ringkasan Tabel memungkinkan Anda mengamati semua layanan, serta metrik penting secara sekilas.
Di kanan atas, klik Topology. Di sini, Anda dapat melihat layanan Anda dan interaksinya satu sama lain.
Anda dapat meluaskan Layanan dan melihat Permintaan per detik untuk setiap layanan dengan mengarahkan kursor ke layanan tersebut.
Kembali ke Tampilan Tabel.
Di Services Table, pilih
productcatalogservice
. Ini akan membawa Anda kepada gambaran umum tentang layanan Anda.Di sisi kiri layar, klik Lalu lintas.
Pastikan 100% traffic masuk ke
productcatalogservice
mengarah ke layanan workload.
Bagian berikutnya membahas pembuatan v2 dari layanan productcatalog
.
Men-deploy v2 layanan
Untuk tutorial ini,
productcatalogservice-v2
memperkenalkan jeda 3 detik terhadap permintaan dengan kolomEXTRA_LATENCY
. Aplikasi ini menyimulasikan regresi dalam versi baru layanan.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.Gunakan
DestinationRule
untuk menentukan subset layanan. Dalam skenario ini, ada subset untuk v1, lalu subset terpisah 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
Gunakan
VirtualService
untuk menentukan sebagian kecil traffic untuk diarahkan keproductcatalogservice
v2.Kolom subset menunjukkan versi, dan kolom bobot menunjukkan pembagian persentase traffic. 75% traffic masuk ke v1 katalog produk, dan 25% traffic ke v2.
Terapkan
VirtualService
:kubectl apply -f vs-split-traffic.yaml -n onlineboutique
Jika Anda mengunjungi EXTERNAL_IP
traffic masuk cluster, Anda akan melihat bahwa secara berkala, frontend akan lebih lambat dimuat.
Di bagian berikutnya, pelajari pemisahan traffic di Konsol Google Cloud.
Mengamati pemisahan traffic di konsol Google Cloud
Kembali ke konsol Google Cloud dan buka halaman GKE Enterprise Services. Buka GKE Enterprise Services
Di kanan atas, klik Topology.
Perluas workload
productcatalogservice
dan catat deploymentproductcatalogservice
danproductcatalogservice-v2
.Kembali ke Tampilan Tabel.
Klik
productcatalogservice
di Tabel Layanan.Kembali ke Lalu lintas 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 katalog produk.Di sisi kanan halaman, Anda melihat Permintaan, Rasio Error, dan Metrik Latensi. Dengan Cloud Service Mesh, setiap layanan memiliki metrik ini yang diuraikan untuk memberi Anda metrik kemampuan observasi.
Meluncurkan atau melakukan roll back ke versi
Setelah mengamati metrik selama deployment canary, Anda dapat menyelesaikan
meluncurkan versi layanan baru, atau melakukan roll back ke versi layanan asli
dengan memanfaatkan resource VirtualService
.
Peluncuran
Setelah puas dengan perilaku layanan v2, Anda dapat secara bertahap meningkatkan persentase traffic yang diarahkan ke layanan v2. Pada akhirnya, dapat 100% diarahkan ke layanan baru di sumber daya VirtualService yang Anda buat di atas dengan menghapus pemisahan traffic dari resource tersebut.
Untuk mengarahkan semua traffic ke productcatalogservice
v2:
kubectl apply -f vs-v2.yaml -n onlineboutique
Kembalikan
Jika Anda perlu melakukan roll back ke layanan v1, terapkan destination-vs-v1.yaml
dari versi sebelumnya. Tindakan ini hanya mengarahkan traffic ke productcatalogservice
v1.
Untuk mengarahkan semua traffic ke v1 dari productcatalogservice
:
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 menimbulkan biaya berkelanjutan ke akun Google Cloud Anda selama resource yang digunakan dalam tutorial ini, Anda dapat menghapus project resource individual.
Menghapus project
Di Cloud Shell, hapus project:
gcloud projects delete PROJECT_ID
Menghapus resource
Jika tidak ingin dikenai 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)
kemudian hapus keanggotaan yang sudah tidak berlaku:
gcloud container fleet memberships delete MEMBERSHIP \
--project=PROJECT_ID
Jika Anda ingin cluster tetap dikonfigurasi untuk Cloud Service Mesh, tetapi hapus contoh Online Boutique:
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 transportasi.