Deployment Canary ke Cloud Run

Dokumen ini menjelaskan cara mengonfigurasi dan menggunakan deployment canary untuk men-deploy aplikasi Anda ke Cloud Run (khusus layanan, bukan tugas) menggunakan Cloud Deploy.

Deployment canary adalah peluncuran progresif versi baru aplikasi Anda, dengan secara bertahap meningkatkan persentase traffic yang dikirim ke versi baru, sambil memantau performa aplikasi. Hal ini membantu Anda menemukan potensi masalah sejak dini dan meminimalkan dampaknya terhadap pengguna.

Cara kerja deployment canary untuk Cloud Run

Saat Anda men-deploy ke Cloud Run menggunakan strategi deployment canary, Cloud Deploy akan mengupdate layanan yang ada dengan revisi baru. Revisi baru menerima persentase traffic yang ditentukan, dan revisi lama terus menerima sisanya. Anda secara bertahap meningkatkan pembagian traffic ke revisi baru dari waktu ke waktu.

Dengan Cloud Deploy, Anda dapat mengonfigurasi deployment canary ke Cloud Run dalam satu tahap atau beberapa tahap.

Petunjuk di sini hanya mencakup hal-hal yang khusus untuk konfigurasi canary. Dokumen Men-deploy layanan atau tugas Cloud Run berisi petunjuk umum untuk mengonfigurasi dan mengeksekusi pipeline deployment Anda.

Pastikan Anda memiliki izin yang diperlukan

Selain izin Identity and Access Management lainnya yang Anda perlukan untuk menggunakan Cloud Deploy, Anda memerlukan izin berikut untuk melakukan tindakan tambahan yang mungkin diperlukan untuk deployment canary:

  • clouddeploy.rollouts.advance
  • clouddeploy.rollouts.ignoreJob
  • clouddeploy.rollouts.cancel
  • clouddeploy.rollouts.retryJob
  • clouddeploy.jobRuns.get
  • clouddeploy.jobRuns.list
  • clouddeploy.jobRuns.terminate

Lihat Peran dan izin IAM untuk mengetahui informasi selengkapnya tentang peran yang tersedia yang mencakup izin ini.

Siapkan skaffold.yaml Anda

File skaffold.yaml Anda menentukan cara definisi layanan Cloud Run Anda dirender dan di-deploy. Untuk deployment canary ke Cloud Run, pastikan deployment tersebut mengarah dengan benar ke file definisi layanan Anda dan menentukan artefak build yang diperlukan (seperti image container). Tidak ada konfigurasi khusus canary yang diperlukan dalam skaffold.yaml itu sendiri selain yang diperlukan untuk deployment standar. Anda dapat menggunakan profil Skaffold untuk mengelola berbagai variasi definisi layanan untuk fase canary kustom.

Siapkan definisi layanan Anda

File definisi layanan Cloud Run normal Anda sudah cukup, tetapi tanpa stanza traffic. Cloud Deploy mengelola pembagian traffic untuk Anda antara revisi terakhir yang berhasil dan revisi baru.

Contoh service.yaml (tanpa stanza traffic):

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: my-cloudrun-service
spec:
  template:
    spec:
      containers:
      - image: gcr.io/my-project/my-cloudrun-app
        ports:
        - containerPort: 8080

Mengonfigurasi canary otomatis

Konfigurasi canary otomatis langsung dalam definisi pipeline pengiriman untuk tahap Cloud Run tertentu. Cloud Deploy secara otomatis menginstruksikan Cloud Run untuk membagi traffic antara revisi stabil terakhir dan revisi baru sesuai dengan persentase yang ditentukan.

serialPipeline:
  stages:
  - targetId: prod
    profiles: []
    strategy:
      canary:
        runtimeConfig:
          cloudRun:
            automaticTrafficControl: true
        canaryDeployment:
          percentages: [PERCENTAGES]
          verify: true|false
          predeploy:
            actions: "PREDEPLOY_ACTION"
          postdeploy:
            actions: "POSTDEPLOY_ACTION"

Dalam konfigurasi ini:

  • PERCENTAGES adalah daftar nilai persentase yang dipisahkan koma yang merepresentasikan peningkatan canary Anda, misalnya [25, 50, 75]. Perhatikan bahwa hal ini tidak mencakup 100, karena deployment 100% diasumsikan dalam canary, dan ditangani oleh fase stable.

  • Anda dapat mengaktifkan verifikasi deployment (verify: true). Jika melakukannya, tugas verify akan ditambahkan ke setiap fase canary.

  • PREDEPLOY_ACTION

    Sama dengan ACTION_NAME yang Anda gunakan di skaffold.yaml untuk menentukan tindakan kustom yang ingin Anda jalankan sebelum men-deploy.

  • POSTDEPLOY_ACTION

    Sama dengan ACTION_NAME yang Anda gunakan di skaffold.yaml untuk menentukan tindakan kustom yang ingin Anda jalankan setelah men-deploy.

Mengonfigurasi canary otomatis kustom

Hal ini menggabungkan definisi fase kustom (nama, persentase, profil, verifikasi, hook) dengan pengelolaan traffic otomatis Cloud Deploy untuk Cloud Run. Anda menentukan fase, tetapi Cloud Deploy menangani pengalihan traffic ke Cloud Run berdasarkan persentase.

Untuk mengonfigurasi ini, sertakan setelan runtimeConfig.cloudRun.automaticTrafficControl: true dan bagian customCanaryDeployment (yang menentukan phaseConfigs) dalam blok strategy.canary. Cloud Deploy akan menggunakan profil Skaffold yang ditentukan untuk merender definisi layanan (yang tetap tidak boleh memiliki stanza traffic), tetapi akan mengelola traffic secara otomatis sesuai dengan persentase fase.

serialPipeline:
  stages:
  - targetId: cloudrun-prod
    profiles: []
    strategy:
      canary:
        # Include runtimeConfig for automatic traffic management
        runtimeConfig:
          cloudRun:
            automaticTrafficControl: true
        # Include customCanaryDeployment for phase customization
        customCanaryDeployment:
          phaseConfigs:
          - phaseId: "warmup-cr"
            percentage: 10
            profiles: ["base-config"] # Profile rendering service def (no traffic stanza)
            verify: true
          - phaseId: "scaling-cr"
            percentage: 50
            profiles: ["base-config"] # Can use the same profile
            verify: true
          - phaseId: "stable"
            percentage: 100
            profiles: ["base-config"]
            verify: true

Jalankan canary Cloud Run

  1. Daftarkan Pipeline dan Target: Terapkan file konfigurasi target Cloud Run dan pipeline pengiriman Anda.

    
    gcloud deploy apply --file=delivery-pipeline.yaml --region=REGION
    gcloud deploy apply --file=cloudrun-targets.yaml --region=REGION
    

    Pipeline pengiriman mencakup konfigurasi canary otomatis atau kustom, untuk runtime yang Anda pilih.

  2. Buat Rilis: Mulai deployment, dengan memberikan nama image.

    
    gcloud deploy releases create RELEASE_NAME \
                                    --delivery-pipeline=PIPELINE_NAME \
                                    --region=REGION
    

    Pipeline pengiriman yang diidentifikasi oleh PIPELINE_NAME berisi konfigurasi canary otomatis atau kustom yang dijelaskan dalam dokumen ini.

  3. Memajukan canary:

    gcloud CLI

    gcloud deploy rollouts advance ROLLOUT_NAME \
                                --release=RELEASE_NAME \
                                --delivery-pipeline=PIPELINE_NAME \
                                --region=REGION
    

    Dengan:

    ROLLOUT_NAME adalah nama peluncuran saat ini yang Anda lanjutkan ke fase berikutnya.

    RELEASE_NAME adalah nama rilis yang menjadi bagian dari peluncuran ini.

    PIPELINE_NAME adalah nama pipeline pengiriman yang Anda gunakan untuk mengelola deployment rilis ini.

    REGION adalah nama region tempat rilis dibuat, misalnya us-central1. Wajib diisi.

    Lihat referensi Google Cloud SDK untuk mengetahui informasi selengkapnya tentang perintah gcloud deploy rollouts advance.

    Google Cloud console

    1. Buka halaman pipeline pengiriman.

    2. Klik pipeline Anda yang ditampilkan dalam daftar pipeline pengiriman.

      Halaman Detail pipeline pengiriman menampilkan representasi grafis progres pipeline pengiriman Anda.

    3. Di tab Rollouts, di bagian Delivery pipeline details, klik nama peluncuran Anda.

      Halaman detail peluncuran akan ditampilkan untuk peluncuran tersebut.

      detail peluncuran di konsol Google Cloud

      Perhatikan bahwa dalam contoh ini, peluncuran memiliki fase canary-50 dan fase stable. Peluncuran Anda mungkin memiliki lebih banyak fase atau fase yang berbeda.

    4. Klik Maju peluncuran.

      Peluncuran dilanjutkan ke fase berikutnya.

Fase yang dilewati

Jika Anda men-deploy canary dan aplikasi Anda belum di-deploy ke runtime tersebut, Cloud Deploy akan melewati fase canary dan menjalankan fase stabil. Lihat Melewati fase untuk pertama kalinya untuk mengetahui penyebabnya.

Langkah berikutnya