Men-deploy aplikasi ke target secara canary
Panduan memulai ini menunjukkan cara menggunakan Cloud Deploy untuk mengirimkan contoh gambar aplikasi dalam deployment canary ke Google Kubernetes Engine atau Cloud Run. (Anda juga dapat menjalankan deployment canary ke GKE Enterprise, tetapi hanya GKE dan Cloud Run yang ditampilkan dalam panduan memulai ini.)
Deployment canary memisahkan traffic antara versi aplikasi yang telah di-deploy dan versi baru. Cloud Run membagi traffic berdasarkan persentase yang Anda konfigurasikan di pipeline pengiriman. GKE men-deploy versi baru ke proporsi pod. Panduan memulai ini di-deploy ke 50% terlebih dahulu, lalu ke 100%.
Dalam panduan memulai ini, hanya ada satu target,
(prod
).
Jadi, kita hanya membuat satu cluster GKE atau satu
layanan Cloud Run untuk menjalankan aplikasi Anda.
Dalam panduan memulai ini, Anda akan melakukan hal berikut:
Buat satu cluster GKE atau tentukan satu layanan Cloud Run.
Anda juga dapat men-deploy canary ke cluster GKE Enterprise, tetapi panduan memulai ini hanya menggunakan GKE dan Cloud Run.
Buat konfigurasi Skaffold dan manifes Kubernetes untuk menentukan image container (yang telah dibuat sebelumnya) yang akan di-deploy.
Tentukan pipeline pengiriman Cloud Deploy dan target deployment.
Panggil pipeline pengiriman Anda dengan membuat rilis, yang otomatis di-deploy ke satu target.
Rilis pertama ini melewati fase canary.
Lihat pipeline pengiriman dan rilis di konsol Google Cloud.
Buat rilis kedua, kali ini jalankan tahap canary untuk men-deploy aplikasi hingga 50%.
Tingkatkan rilis untuk di-deploy hingga 100%.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Pastikan akun layanan Compute Engine default memiliki izin yang memadai.
Akun layanan mungkin sudah memiliki izin yang diperlukan. Langkah-langkah ini disertakan untuk project yang menonaktifkan pemberian peran otomatis untuk akun layanan default.
- Pertama, tambahkan peran
clouddeploy.jobRunner
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner"
- Tambahkan peran developer untuk runtime tertentu.
- Untuk GKE, dan GKE dengan Gateway API:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/container.developer"
- Untuk Cloud Run:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/run.developer"
-
Tambahkan peran
iam.serviceAccountUser
, yang menyertakan izinactAs
untuk di-deploy ke runtime:gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_ID
- Pertama, tambahkan peran
Jika Anda sudah menginstal CLI, pastikan Anda menjalankan versi terbaru:
gcloud components update
Membuat lingkungan runtime
GKE
Buat satu cluster Autopilot GKE:
gcloud container clusters create-auto canary-quickstart-cluster \
--project=PROJECT_ID \
--region=us-central1
GKE + Gateway API
Buat satu cluster GKE, dengan setelan yang direkomendasikan untuk mendukung penggunaan dengan Istio:
gcloud container clusters create canary-quickstart-cluster \ --machine-type=n1-standard-1 \ --num-nodes 4 \ --region=us-central1 \ --project=PROJECT_ID
Dapatkan kredensial cluster:
gcloud container clusters get-credentials canary-quickstart-cluster \ --project=PROJECT_ID \ --region=us-central1
Instal CRD Kubernetes Gateway API jika belum ada di cluster.
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v0.6.2/standard-install.yaml
Aktifkan penerapan pengontrol Gateway Istio dengan menginstal Istio.
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.17.2 sh - \ && ./istio-1.17.2/bin/istioctl install --set profile=minimal -y
Cloud Run
Jika menggunakan Cloud Run, Anda dapat melewati perintah ini, Anda tidak perlu melakukan apa pun di sini.
Menyiapkan konfigurasi Skaffold dan manifes aplikasi
Cloud Deploy menggunakan Skaffold untuk memberikan detail tentang apa yang akan di-deploy dan cara men-deploynya dengan benar ke target Anda.
Dalam panduan memulai ini, Anda akan membuat file skaffold.yaml
, yang mengidentifikasi
manifes Kubernetes atau konfigurasi layanan Cloud Run yang akan
di-deploy.
Buka jendela terminal.
Buat direktori baru dan buka direktori tersebut.
GKE
mkdir deploy-canary-quickstart-gke cd deploy-canary-quickstart-gke
GKE + Gateway API
mkdir deploy-canary-quickstart-gke-gatewayapi cd deploy-canary-quickstart-gke-gatewayapi
Cloud Run
mkdir deploy-canary-quickstart-run cd deploy-canary-quickstart-run
Buat file bernama
skaffold.yaml
dengan konten berikut:GKE
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - kubernetes.yaml deploy: kubectl: {}
GKE + Gateway API
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - kubernetes.yaml deploy: kubectl: {}
Cloud Run
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - run.yaml deploy: cloudrun: {}
File ini adalah konfigurasi Skaffold minimal, yang mengidentifikasi manifes Anda. Untuk panduan memulai ini, Anda akan membuat file. Namun, Anda juga dapat meminta Cloud Deploy membuatkan untuk Anda, untuk aplikasi non-produksi yang sederhana.
Lihat referensi
skaffold.yaml
untuk informasi selengkapnya tentang file ini.Buat manifes aplikasi Anda.
GKE
Buat file bernama
kubernetes.yaml
, di direktorideploy-canary-quickstart-gke
, dengan konten berikut:apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app namespace: default spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: nginx image: my-app-image --- apiVersion: v1 kind: Service metadata: name: my-service namespace: default spec: selector: app: my-app ports: - protocol: TCP port: 80
File ini adalah manifes Kubernetes, yang diterapkan ke cluster untuk men-deploy aplikasi. Manifes ini menyertakan resource Layanan dan Deployment yang diperlukan untuk deployment canary, serta HTTPRoute dan resource Gateway yang diperlukan untuk menggunakan Gateway API.
Image container yang akan di-deploy ditetapkan di sini sebagai placeholder,
my-app-image
, yang diganti dengan image tertentu saat Anda membuat rilis.GKE + Gateway API
Buat file bernama
kubernetes.yaml
, di direktorideploy-canary-quickstart-gke-gatewayapi
, dengan konten berikut:kind: Gateway apiVersion: gateway.networking.k8s.io/v1beta1 metadata: name: my-gateway annotations: networking.istio.io/service-type: "ClusterIP" spec: gatewayClassName: istio listeners: - name: default hostname: "*.example.com" port: 80 protocol: HTTP allowedRoutes: namespaces: from: All --- kind: HTTPRoute apiVersion: gateway.networking.k8s.io/v1beta1 metadata: name: my-httproute spec: parentRefs: - kind: Gateway name: my-gateway hostnames: - "test.example.com" rules: - backendRefs: - name: my-service port: 80 --- apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: my-app ports: - name: tcp-port protocol: TCP port: 80 targetPort: 8080 --- apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: nginx image: my-app-image
File ini adalah manifes Kubernetes, yang diterapkan ke cluster untuk men-deploy aplikasi. Manifes ini menyertakan resource Layanan dan Deployment yang diperlukan untuk deployment canary, serta HTTPRoute dan resource Gateway yang diperlukan untuk menggunakan Gateway API.
Image container yang akan di-deploy ditetapkan di sini sebagai placeholder,
my-app-image
, yang diganti dengan image tertentu saat Anda membuat rilis.Cloud Run
Buat file bernama
run.yaml
, di direktorideploy-canary-quickstart-run
, dengan konten berikut:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-canary-run-service spec: template: spec: containers: - image: my-app-image
File ini adalah definisi layanan Cloud Run dasar, yang diterapkan pada waktu deployment untuk membuat layanan Anda di Cloud Run. Image container yang akan di-deploy ditetapkan di sini sebagai placeholder,
my-app-image
, yang diganti dengan image tertentu saat Anda membuat rilis.
Membuat target dan pipeline pengiriman
Anda dapat menentukan pipeline dan target pengiriman dalam satu file atau dalam file terpisah. Dalam panduan memulai ini, kita membuat satu file untuk pipeline dan satu target:
GKE
Buat file bernama clouddeploy.yaml
, di direktori
deploy-canary-quickstart-gke
, dengan konten berikut:
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: my-canary-demo-app-1
description: main application pipeline
serialPipeline:
stages:
- targetId: prod
profiles: []
strategy:
canary:
runtimeConfig:
kubernetes:
serviceNetworking:
service: "my-service"
deployment: "my-deployment"
canaryDeployment:
percentages: [50]
verify: false
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: prod
description: prod GKE cluster
gke:
cluster: projects/PROJECT_ID/locations/us-central1/clusters/canary-quickstart-cluster
GKE + Gateway API
Buat file bernama clouddeploy.yaml
, di direktori
deploy-canary-quickstart-gke-gatewayapi
, dengan konten berikut:
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: my-canary-demo-app-1
description: main application pipeline
serialPipeline:
stages:
- targetId: prod
profiles: []
strategy:
canary:
runtimeConfig:
kubernetes:
gatewayServiceMesh:
httpRoute: "my-httproute"
service: "my-service"
deployment: "my-deployment"
canaryDeployment:
percentages: [50]
verify: false
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: prod
description: prod GKE cluster
gke:
cluster: projects/PROJECT_ID/locations/us-central1/clusters/canary-quickstart-cluster
Cloud Run
Buat file bernama clouddeploy.yaml
, di direktori
deploy-canary-quickstart-run
, dengan konten berikut:
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: my-canary-demo-app-1
description: main application pipeline
serialPipeline:
stages:
- targetId: prod
profiles: []
strategy:
canary:
runtimeConfig:
cloudRun:
automaticTrafficControl: true
canaryDeployment:
percentages: [50]
verify: false
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: prod
description: prod Run Service
run:
location: projects/PROJECT_ID/locations/us-central1
Daftarkan pipeline dan target Anda dengan layanan Cloud Deploy:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
Sekarang Anda memiliki pipeline, dengan satu target yang dikonfigurasi untuk strategi deployment Canary.
Konfirmasi pipeline dan target Anda:
Di konsol Google Cloud, buka halaman Delivery pipelines Cloud Deploy untuk melihat daftar pipeline pengiriman yang tersedia.
Buka halaman Delivery pipelines
Pipeline pengiriman yang baru saja Anda buat akan ditampilkan, dan satu target yang Anda konfigurasikan akan tercantum di kolom Targets.
Membuat rilis
Rilis adalah resource Cloud Deploy pusat yang mewakili perubahan yang di-deploy. Pipeline pengiriman menentukan siklus proses rilis tersebut. Lihat arsitektur layanan Cloud Deploy untuk mengetahui detail tentang siklus proses tersebut.
Untuk membuat resource release
yang mewakili image container yang akan di-deploy, jalankan perintah berikut dari direktori deploy-canary-quickstart-gke
, deploy-canary-quickstart-gke-gatewayapi
, atau deploy-canary-quickstart-run
:
GKE
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-canary-demo-app-1 \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
GKE + Gateway API
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-canary-demo-app-1 \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
Cloud Run
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-canary-demo-app-1 \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:4a856b6f1c3ce723a456ddc2adfbb794cbfba93f727e2d96fcf6540bd0d6fff4
Perhatikan
flag --images=
, yang
Anda gunakan untuk mengganti placeholder (my-app-image
) di
manifes atau definisi layanan
dengan image tertentu yang memenuhi syarat SHA. Google merekomendasikan agar Anda membuat template
manifes dengan cara ini, dan menggunakan nama image yang memenuhi syarat SHA saat pembuatan
rilis.
Saat Anda membuat rilis, Cloud Deploy juga akan otomatis membuat resource peluncuran untuk segera di-deploy ke satu target, prod
.
Kita akan langsung ke fase stabil
Dengan rilis pertama ini, kami melewati fase canary, dan men-deploy ke 100% (fase stabil). Hal ini karena aplikasi belum di-deploy sebelumnya, sehingga tidak ada cara untuk menghitung 50% pod (untuk GKE) atau cara traffic dibagi untuk layanan (untuk Cloud Run). Pod (GKE) atau revisi (Cloud Run) belum ada.
Setelah melewati fase canary, sekarang kita siap untuk memulai fase stabil, yang akan meningkatkan traffic menjadi 100%. Setelah itu, kita akan membuat rilis lain, dan rilis tersebut akan menjalankan canary.
Dalam situasi dunia nyata, Anda biasanya akan menjalankan deployment canary saat aplikasi sudah berjalan, sehingga pengabaian fase ini akan jarang terjadi.
Melihat rilis di konsol Google Cloud
Setelah membuat rilis pertama, peluncuran akan dibuat, dan Anda dapat melihat rilis dan peluncuran di konsol Google Cloud. Anda juga dapat melihat visualisasi pipeline, yang menunjukkan status rilis saat ini.
Di konsol Google Cloud, buka halaman Pipeline pengiriman Cloud Deploy untuk melihat pipeline pengiriman my-canary-demo-app-1.
Klik nama pipeline pengiriman Anda "my-canary-demo-app-1".
Visualisasi pipeline menampilkan status deployment aplikasi. Karena hanya ada satu tahap dalam pipeline, visualisasi hanya menampilkan satu node.
Selain itu, rilis Anda tercantum di tab Rilis pada bagian Detail pipeline pengiriman.
Klik nama rilis,
test-release-001
.Peluncuran Anda akan muncul di bagian Peluncuran. Anda dapat mengklik peluncuran untuk melihat detailnya, termasuk log deployment.
Perhatikan bahwa status peluncuran adalah "Menunggu peningkatan", dan target yang ditampilkan dalam visualisasi pipeline memiliki link ke "Meningkatkan ke stabil".
Mempercepat fase peluncuran
Setelah rilis pertama, fase canary dilewati, dan peluncuran menunggu untuk memulai fase "stabil", yang men-deploy aplikasi hingga 100%:
Pada visualisasi pipeline, klik Advance to stable.
Saat diminta, klik Advance untuk mengonfirmasi.
Setelah beberapa menit, peluncuran kini berada dalam fase "stabil", dan aplikasi di-deploy hingga 100%.
Menjalankan deployment canary
Karena rilis pertama melewati fase canary, sekarang kita akan membuat rilis lain, yang kali ini menjalankan deployment canary.
Untuk membuat
release
baru, jalankan perintah berikut dari direktorideploy-canary-quickstart-gke
,deploy-canary-quickstart-gke-gatewayapi
, ataudeploy-canary-quickstart-run
:GKE
gcloud deploy releases create test-release-002 \ --project=PROJECT_ID \ --region=us-central1 \ --delivery-pipeline=my-canary-demo-app-1 \ --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
GKE + Gateway API
gcloud deploy releases create test-release-002 \ --project=PROJECT_ID \ --region=us-central1 \ --delivery-pipeline=my-canary-demo-app-1 \ --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
Cloud Run
gcloud deploy releases create test-release-002 \ --project=PROJECT_ID \ --region=us-central1 \ --delivery-pipeline=my-canary-demo-app-1 \ --images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:4a856b6f1c3ce723a456ddc2adfbb794cbfba93f727e2d96fcf6540bd0d6fff4
Setelah beberapa menit, peluncuran akan dibuat, dan kali ini tahap canary akan dijalankan:
Setelah fase peluncuran pertama selesai, peluncuran kini berada dalam fase canary:
Artinya, aplikasi kini di-deploy ke 50%. Untuk GKE berbasis serviceNetworking, GKE di-deploy ke setengah pod Anda. Untuk GKE dan traffic Cloud Run berbasis Gateway API, alokasinya adalah 50%.
Klik Advance Rollout, lalu klik Advance saat diminta.
Tindakan ini akan memajukan peluncuran ke fase "stabil", yang men-deploy aplikasi ke 100%.
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan pada halaman ini, ikuti langkah-langkah berikut.
Hapus cluster
canary-quickstart-cluster
(khusus GKE):gcloud container clusters delete canary-quickstart-cluster --region=us-central1 --project=PROJECT_ID
Hapus layanan
my-canary-run-service
(khusus Cloud Run):gcloud run services delete my-canary-run-service --region=us-central1 --project=PROJECT_ID
Hapus pipeline pengiriman, target, dan semua resource rilis dan peluncuran:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
Hapus bucket Cloud Storage yang dibuat Cloud Deploy.
Satu diakhiri dengan
_clouddeploy
, dan yang lainnya adalah[region].deploy-artifacts.[project].appspot.com
.
Selesai, Anda telah menyelesaikan quickstart ini.