Menggunakan strategi deployment canary

Dokumen ini menjelaskan cara mengonfigurasi dan menggunakan strategi deployment canary.

Apa yang dimaksud dengan deployment canary?

Deployment canary adalah peluncuran progresif aplikasi yang membagi traffic antara versi yang telah di-deploy dan versi baru, yang diluncurkan ke sebagian pengguna sebelum diluncurkan sepenuhnya.

Jenis target yang didukung

Deployment Canary di Cloud Deploy mendukung semua jenis target, termasuk yang berikut:

Canary juga berfungsi dengan multi-target.

Mengapa menggunakan strategi deployment canary?

Deployment canary memberi Anda kesempatan untuk merilis aplikasi secara sebagian. Dengan cara ini, Anda dapat memastikan versi baru aplikasi Anda dapat diandalkan sebelum mendistribusikannya ke semua pengguna.

Misalnya, jika men-deploy ke GKE atau GKE Enterprise, Anda akan men-deploy versi baru aplikasi ke sejumlah pod yang terbatas. Versi lama akan terus berjalan, tetapi dengan lebih banyak traffic yang dikirim ke pod baru.

Jika Anda men-deploy ke Cloud Run, Cloud Run itself akan membagi traffic antara revisi lama dan baru, sesuai dengan persentase yang Anda konfigurasikan.

Jenis Canary

Cloud Deploy memungkinkan Anda mengonfigurasi jenis deployment canary berikut:

  • Otomatis

    Dengan deployment canary otomatis, Anda mengonfigurasi Cloud Deploy dengan serangkaian persentase yang menunjukkan deployment progresif. Cloud Deploy melakukan operasi tambahan atas nama Anda, untuk membagi persentase traffic antara versi lama dan baru.

  • Otomatis kustom

    Untuk canary otomatis kustom, Anda dapat memberikan hal berikut:

    • Nama fase
    • Sasaran persentase
    • Profil Skaffold yang akan digunakan untuk fase
    • Apakah akan menyertakan tugas verifikasi atau tidak
    • Apakah akan menyertakan tugas pra-penyebaran atau pasca-penyebaran, atau keduanya

    Namun, Anda tidak perlu memberikan informasi penyeimbangan traffic; Cloud Deploy membuat resource yang diperlukan.

  • Kustom

    Dengan canary kustom, Anda mengonfigurasi setiap fase canary secara terpisah, termasuk hal berikut:

    • Nama fase
    • Sasaran persentase
    • Profil Skaffold yang akan digunakan untuk fase
    • Apakah akan menyertakan tugas verifikasi atau tidak
    • Apakah akan menyertakan tugas pra-penyebaran atau pasca-penyebaran, atau keduanya

    Selain itu, untuk canary yang sepenuhnya kustom, Anda harus menyediakan semua konfigurasi penyeimbangan traffic, seperti yang dijelaskan di sini.

Fase deployment canary

Saat Anda membuat rilis untuk deployment canary, peluncuran dibuat dengan tahap untuk setiap penambahan canary, ditambah tahap stable akhir untuk 100%.

Misalnya, jika Anda mengonfigurasi canary untuk penambahan 25%, 50%, dan 75%, peluncuran akan memiliki fase berikut:

  • canary-25
  • canary-50
  • canary-75
  • stable

Anda dapat membaca selengkapnya tentang fase peluncuran, tugas, dan tugas yang berjalan di Mengelola peluncuran.

Yang terjadi selama canary otomatis atau otomatis kustom

Untuk mendukung deployment canary, Cloud Deploy menyertakan langkah-langkah pemrosesan khusus saat merender manifes Kubernetes atau konfigurasi layanan Cloud Run:

GKE/Enterprise

Berikut cara Cloud Deploy menjalankan deployment canary di GKE dan GKE Enterprise berbasis jaringan:

  1. Anda memberikan nama resource Deployment dan resource Layanan.

  2. Cloud Deploy membuat resource Deployment tambahan, dengan nama Deployment Anda saat ini ditambah -canary.

  3. Cloud Deploy mengubah Layanan untuk menyesuaikan pemilih agar memilih pod dalam Deployment saat ini dan pod canary.

    Cloud Deploy menghitung jumlah pod yang akan digunakan untuk kanari berdasarkan penghitungan yang dijelaskan di sini. Penghitungan tersebut berbeda-beda, bergantung pada apakah Anda mengaktifkan atau menonaktifkan penyediaan berlebih pod.

    Jika kita melewatkan ke fase stable, Cloud Deploy akan menambahkan label yang akan digunakan untuk mencocokkan pod, sehingga label tersebut tersedia untuk menjalankan canary berikutnya.

    Cloud Deploy membuat Deployment yang menyertakan persentase pod khusus fase, yang diperbarui untuk setiap fase. Hal ini dilakukan dengan menghitung jumlah pod sebagai persentase dari jumlah pod asli. Hal ini dapat menyebabkan pemisahan traffic yang tidak akurat. Jika memerlukan pembagian traffic yang tepat, Anda dapat melakukannya menggunakan Gateway API.

    Selain itu, Secrets dan ConfigMaps juga disalin dan diganti namanya dengan -canary.

  4. Selama fase stable, Deployment -canary diskalakan ke nol, dan Deployment asli diganti dengan Deployment baru.

    Cloud Deploy tidak mengubah Deployment asli hingga fase stable.

Cloud Deploy menyediakan pod untuk mencapai persentase canary yang diminta sesecara mungkin. Hal ini didasarkan pada jumlah pod, bukan traffic ke pod. Jika ingin canary didasarkan pada traffic, Anda harus menggunakan Gateway API.

Untuk canary berbasis jaringan GKE, Anda dapat mengaktifkan atau menonaktifkan penyediaan berlebih pod. Bagian berikut menjelaskan cara Cloud Deploy menghitung jumlah pod yang akan disediakan untuk deployment canary untuk setiap fase canary.

Penyediaan pod dengan penyediaan yang berlebihan diaktifkan

Mengaktifkan penyediaan berlebih (disablePodOverprovisioning: false) memungkinkan Cloud Deploy membuat pod tambahan yang cukup untuk menjalankan persentase canary yang Anda inginkan, berdasarkan jumlah pod yang menjalankan deployment yang ada. Formula berikut menunjukkan cara Cloud Deploy menghitung jumlah pod yang akan disediakan untuk deployment Canary untuk setiap fase Canary, saat penyediaan berlebih pod diaktifkan:

math.Ceil( percentage * ReplicaCountOfDeploymentOnCluster / (100-percentage))

Dengan formula ini, jumlah replika saat ini (jumlah pod yang sudah Anda miliki, sebelum canary ini) dikalikan dengan persentase canary untuk fase, dan hasilnya dibagi dengan (100 dikurangi persentase).

Misalnya, jika Anda sudah memiliki 4 pod, dan fase canary Anda adalah 50%, maka jumlah pod canary adalah 4. (Hasil 100-percentage digunakan sebagai persentase: 100-50=50, diperlakukan sebagai .50.)

Penyediaan berlebih pod adalah perilaku default.

Penyediaan pod dengan penyediaan yang berlebihan dinonaktifkan

Anda dapat menonaktifkan penyediaan berlebih (disablePodOverprovisioning: true), untuk memastikan Cloud Deploy tidak meningkatkan jumlah replika Anda.

Formula berikut menunjukkan cara Cloud Deploy menghitung penyediaan pod untuk deployment canary untuk setiap fase canary, saat penyediaan pod berlebih dinonaktifkan:

math.Ceil( (ReplicaCountOfDeploymentOnCluster + ReplicaCountOfCanaryDeploymentOnCluster) * percentage)

Dalam formula ini, ReplicaCountOfCanaryDeploymentOnCluster hanya ada jika sudah ada fase canary. Jika ini adalah fase canary pertama, tidak ada ReplicaCountOfCanaryDeploymentOnCluster.

Jika Anda memulai dengan 4 pod, angka tersebut dikalikan dengan persentase canary (misalnya, 50%, atau .5) untuk mendapatkan 2. Jadi, deployment asli kini diskalasikan ke 2, dan 2 pod baru dibuat untuk deployment canary. Jika kemudian Anda memiliki tahap canary 75%, Anda memiliki 2 (deployment asli) +2 (tahap canary pertama), *.75, untuk mendapatkan pod canary 3 dan pod 1 yang menjalankan deployment asli.

GKE/Enterprise Gateway

Berikut cara Cloud Deploy menjalankan deployment canary di GKE dan GKE Enterprise menggunakan Gateway API:

  1. Selain referensi Deployment dan Service, Anda menyediakan resource HTTPRoute, dengan aturan backendRefs yang mereferensikan Service.

  2. Cloud Deploy akan membuat Deployment baru, dengan nama Deployment asli Anda ditambah -canary, dan Layanan baru dengan nama Layanan asli ditambah -canary.

    Selain itu, Secret, ConfigMap, dan Horizontal Pod Autoscaler juga disalin dan diganti namanya dengan -canary.

  3. Untuk setiap fase canary, Cloud Deploy akan mengubah HTTPRoute untuk memperbarui bobot antara pod Deployment asli dan pod Deployment canary, berdasarkan persentase untuk fase tersebut.

    Karena mungkin ada penundaan dalam menyebarkan perubahan ke resource HTTPRoute, Anda dapat menyertakan properti routeUpdateWaitTime dalam konfigurasi, sehingga sistem menunggu jumlah waktu yang ditentukan untuk penyebaran ini.

  4. Selama fase stable, Deployment -canary diskalakan ke nol, dan Deployment asli diperbarui untuk menggunakan Deployment rilis baru.

    Selain itu, HTTPRoute kini dikembalikan ke versi asli yang Anda berikan.

    Cloud Deploy tidak mengubah Deployment atau Layanan asli hingga fase stable.

Cloud Run

Berikut cara Cloud Deploy menjalankan deployment canary untuk Cloud Run:

  • Untuk deployment canary ke Cloud Run, jangan berikan bait traffic dalam YAML layanan Anda.

  • Saat membuat peluncuran baru untuk canary, Cloud Deploy membagi traffic antara revisi sebelumnya yang berhasil di-deploy oleh Cloud Deploy dan revisi baru.

Jika ingin melihat perbedaan di antara fase deployment canary, Anda dapat melihat perubahan dalam manifes yang dirender per fase yang tersedia di inspector rilis. Anda dapat melakukannya bahkan sebelum peluncuran dimulai. Selain itu, jika menggunakan deployment paralel, Anda juga dapat memeriksa manifes yang dirender setiap turunan.

Mengonfigurasi deployment canary

Bagian ini menjelaskan cara mengonfigurasi pipeline dan target pengiriman untuk deployment canary.

Petunjuk di sini hanya mencakup hal-hal yang khusus untuk konfigurasi canary. Dokumen Men-deploy aplikasi berisi petunjuk umum untuk mengonfigurasi dan menjalankan pipeline deployment Anda.

Pastikan Anda memiliki izin yang diperlukan

Selain izin Identity and Access Management lainnya yang diperlukan 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 menyertakan izin ini.

Menyiapkan skaffold.yaml

Seperti deployment standar, canary Anda memerlukan file skaffold.yaml, yang menentukan cara manifes dan definisi layanan dirender dan di-deploy.

skaffold.yaml yang Anda buat untuk deployment canary tidak memiliki persyaratan khusus selain yang diperlukan untuk deployment standar.

Menyiapkan manifes atau definisi layanan

Seperti deployment standar, canary Anda memerlukan manifes Kubernetes atau definisi layanan Cloud Run.

GKE dan GKE Enterprise

Untuk canary, manifes Anda harus memiliki hal berikut:

  • Deployment dan Layanan.

  • Service harus menentukan pemilih, dan pemilih tersebut harus memilih Pod Deployment yang ditentukan. Nilai defaultnya adalah app.

  • Jika Anda menggunakan canary berbasis Gateway API, manifes juga harus memiliki HTTPRoute.

Cloud Run

Untuk canary di Cloud Run, file definisi layanan Cloud Run normal Anda sudah memadai, tetapi tanpa bait traffic. Cloud Deploy mengelola pemisahan traffic untuk Anda antara revisi terakhir yang berhasil dan revisi baru.

Mengonfigurasi canary otomatis

Petunjuk berikut ditujukan untuk target jaringan berbasis layanan Cloud Run dan GKE serta GKE Enterprise. Jika Anda menggunakan Kubernetes Gateway API dengan GKE atau GKE Enterprise, lihat dokumentasi ini.

Anda mengonfigurasi canary otomatis dalam definisi pipeline pengiriman:

GKE dan GKE Enterprise

Pada tahap pipeline, sertakan properti strategy, sebagai berikut:

serialPipeline:
  stages:
  - targetId: prod
    profiles: []
    strategy:
      canary:
        runtimeConfig:
          kubernetes:
            serviceNetworking:
              service: "SERVICE_NAME"
              deployment: "DEPLOYMENT_NAME"
              podSelectorLabel: "LABEL"
        canaryDeployment:
          percentages: [PERCENTAGES]
          verify: true|false
          predeploy:
            actions: "PREDEPLOY_ACTION"
          postdeploy:
            actions: "POSTDEPLOY_ACTION"

Dalam konfigurasi ini...

  • SERVICE_NAME adalah nama Layanan Kubernetes, yang ditentukan dalam manifes Anda.

  • DEPLOYMENT_NAME adalah nama Deployment Kubernetes Anda, yang ditentukan dalam manifes.

  • LABEL adalah label pemilih pod. Nilai ini harus cocok dengan pemilih label di Layanan Kubernetes yang ditentukan dalam manifes Anda. Tindakan ini bersifat opsional. Defaultnya adalah app.

  • PERCENTAGES adalah daftar nilai persentase yang dipisahkan koma yang mewakili penambahan canary Anda, misalnya [5, 25, 50].

    Selain itu, ini tidak mencakup 100, karena deployment 100% persen diasumsikan di canary, dan ditangani oleh fase stable.

  • Anda dapat mengaktifkan verifikasi deployment (verify: true). Jika Anda melakukannya, tugas verify akan diaktifkan di setiap fase.

  • PREDEPLOY_ACTION

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

  • POSTDEPLOY_ACTION

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

Cloud Run

Pada tahap pipeline, sertakan properti strategy, sebagai berikut:

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 mewakili penambahan canary Anda, misalnya [25, 50, 75]. Perhatikan bahwa ini tidak mencakup 100, karena deployment 100% persen diasumsikan di canary, dan ditangani oleh fase stable.

  • Anda dapat mengaktifkan verifikasi deployment (verify: true). Jika Anda 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 dijalankan sebelum di-deploy.

  • POSTDEPLOY_ACTION

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

Mengonfigurasi canary kustom

Anda dapat mengonfigurasi canary secara manual, bukan mengandalkan sepenuhnya pada otomatisasi yang disediakan oleh Cloud Deploy. Dengan konfigurasi canary kustom, Anda menentukan hal berikut dalam definisi pipeline pengiriman:

  • Nama fase peluncuran

    Dalam canary yang sepenuhnya otomatis, Cloud Deploy akan memberi nama fase untuk Anda (misalnya, canary-25, canary-75, stable). Namun, dengan canary kustom, Anda dapat memberi setiap fase nama apa pun, asalkan unik di antara semua fase untuk tahap canary ini, dan mematuhi batasan nama resource. Namun, nama fase akhir (100%) harus stable.

  • Sasaran persentase untuk setiap fase

    Tentukan persentase secara terpisah, per fase.

  • Profil Skaffold yang akan digunakan untuk fase

    Anda dapat menggunakan profil Skaffold terpisah untuk setiap fase, atau profil yang sama, atau kombinasi apa pun. Selain itu, setiap profil dapat menggunakan manifes Kubernetes atau definisi layanan Cloud Run yang berbeda. Anda juga dapat menggunakan lebih dari satu profil untuk fase tertentu. Cloud Deploy menggabungkannya.

  • Apakah ada tugas verifikasi untuk fase tersebut

    Ingat bahwa jika mengaktifkan verifikasi, Anda juga harus mengonfigurasi skaffold.yaml untuk verifikasi.

  • Apakah ada tugas pra-deployment atau pasca-deployment untuk fase tersebut

    Jika mengaktifkan tugas pra-deployment atau pasca-deployment, Anda harus mengonfigurasi skaffold.yaml untuk tugas tersebut.

Semua jenis target didukung untuk canary kustom.

Elemen konfigurasi canary kustom

YAML berikut menunjukkan konfigurasi untuk fase deployment canary kustom sepenuhnya:

strategy:
  canary:
    # Custom configuration for each canary phase
    customCanaryDeployment:
      phaseConfigs:
      - phaseId: "PHASE1_NAME"
        percentage: PERCENTAGE1
        profiles: [ "PROFILE_NAME" ]
        verify: true | false
        predeploy:
          actions: "PREDEPLOY_ACTION"
        postdeploy:
          actions: "POSTDEPLOY_ACTION"
      - 
      - phaseId: "stable"
        percentage: 100
        profiles: [ "LAST_PROFILE_NAME" ]
        verify: true|false
        predeploy:
          actions: "PREDEPLOY_ACTION"
        postdeploy:
          actions: "POSTDEPLOY_ACTION"

Dalam YAML ini

  • PHASE1_NAME

    Adalah nama fase. Setiap nama fase harus unik.

  • [ "PROFILE_NAME" ]

    Adalah nama profil yang akan digunakan untuk fase. Anda dapat menggunakan profil yang sama untuk setiap fase, atau profil yang berbeda untuk setiap fase, atau kombinasi apa pun. Selain itu, Anda dapat menentukan lebih dari satu profil. Cloud Deploy menggunakan semua profil yang Anda tentukan, plus profil atau manifes yang digunakan oleh tahap keseluruhan.

  • stable

    Fase akhir harus diberi nama stable.

  • PERCENTAGE1

    Persentase yang akan di-deploy untuk fase pertama. Setiap fase harus memiliki nilai persentase yang unik, dan nilai tersebut harus berupa persentase bulat (misalnya, 10.5), dan fase harus dalam urutan menaik.

  • verify: true|false

    Memberi tahu Cloud Deploy apakah akan menyertakan tugas verifikasi untuk fase tersebut. Perhatikan bahwa untuk setiap fase yang menggunakan verifikasi, Skaffold menggunakan profil yang sama untuk verifikasi yang ditentukan untuk rendering dan deployment untuk fase tersebut.

  • PREDEPLOY_ACTION

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

  • POSTDEPLOY_ACTION

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

Persentase untuk fase terakhir harus 100. Fase dijalankan sesuai urutan yang Anda konfigurasikan dalam stanza ​customCanaryDeployment ini, tetapi jika nilai persentase tidak dalam urutan menaik, perintah untuk mendaftarkan pipeline pengiriman akan gagal dengan error.

Perhatikan bahwa konfigurasi untuk canary kustom tidak menyertakan stanza runtimeConfig. Jika Anda menyertakan runtimeConfig, runtimeConfig akan dianggap sebagai canary otomatis kustom.

Mengonfigurasi canary otomatis kustom

Canary otomatis kustom mirip dengan canary kustom karena Anda menentukan fase canary terpisah, dengan nama fase kustom, nilai persentase, profil Skaffold, tugas verifikasi, dan tugas pra-deploy dan post-deploy. Namun, dengan canary kustom, Anda tidak menyediakan konfigurasi yang menentukan pembagian traffic—Cloud Deploy melakukannya untuk Anda, tetapi Anda tetap menyediakan profil Skaffold yang akan digunakan untuk setiap tahap.

Untuk mengonfigurasi canary otomatis kustom, sertakan stanza runtimeConfig, seperti yang ditunjukkan di sini, dan sertakan stanza customCanaryDeployment, seperti yang ditunjukkan di sini.

Mengonfigurasi deployment canary menggunakan mesh layanan Kubernetes Gateway API

Meskipun Anda dapat menggunakan deployment canary Cloud Deploy untuk men-deploy aplikasi ke jaringan berbasis layanan Kubernetes, Alternatifnya adalah menggunakan mesh layanan Gateway API Kubernetes. Bagian ini menjelaskan cara melakukannya.

Anda dapat menggunakan Gateway API dengan Istio atau penerapan yang didukung.

  1. Siapkan resource Gateway API Anda:

    Ini hanya contoh.

  2. Dalam manifes Kubernetes, yang diberikan ke Cloud Deploy saat Anda membuat rilis, sertakan hal berikut:

    • HTTPRoute yang mereferensikan resource Gateway Anda

    • Deployment

    • Layanan

  3. Konfigurasikan pipeline pengiriman dan target yang akan Anda deploy dengan canary:

    • Konfigurasi untuk target sama dengan konfigurasi untuk target lainnya.

    • Konfigurasi pipeline pengiriman, dalam urutan progres untuk target tertentu, menyertakan stanza gatewayServiceMesh untuk mereferensikan konfigurasi HTTPRoute Kubernetes Gateway API, serta Deployment dan Layanan Anda.

      strategy:
       canary:
         runtimeConfig:
           kubernetes:
             gatewayServiceMesh:
               httpRoute: "ROUTE"
               service: "SERVICE"
               deployment: "DEPLOYMENT"
               routeUpdateWaitTime: "WAIT_TIME"
               podSelectorLabel: "LABEL"
         canaryDeployment:
           percentages:
           - 50
      

      Di mana...

      • ROUTE adalah konfigurasi httpRoute yang menentukan perilaku pemilihan rute yang Anda inginkan.

      • SERVICE adalah konfigurasi Layanan Anda, yang diperlukan Cloud Deploy untuk deployment canary ke GKE dan GKE Enterprise.

      • DEPLOYMENT adalah konfigurasi Deployment Anda, yang diperlukan Cloud Deploy untuk deployment canary ke GKE dan GKE Enterprise.

      • WAIT_TIME adalah jumlah waktu yang diperlukan Cloud Deploy untuk menunggu perubahan pada resource HTTPRoute selesai diterapkan, agar permintaan tidak terhapus. Misalnya: routeUpdateWaitTime: 60s

        Jika Anda menjalankan canary menggunakan Gateway API tanpa Istio, dan Gateway API terhubung ke load balancer Google Cloud, sejumlah kecil traffic mungkin akan hilang saat instance canary diskalakan ke bawah. Anda dapat mengonfigurasi setelan ini jika mengamati perilaku ini.

      • LABEL adalah label pemilih pod. Ini harus cocok dengan pemilih label di Layanan dan Deployment Kubernetes yang ditentukan dalam manifes Anda. Tindakan tersebut bersifat opsional. Defaultnya adalah app.

Menggunakan deployment paralel dengan strategi deployment canary

Anda dapat menjalankan deployment canary menggunakan deployment paralel. Artinya, target yang Anda deploy secara bertahap dapat terdiri dari dua atau lebih target turunan. Misalnya, Anda dapat men-deploy secara bertahap ke cluster di region terpisah, secara bersamaan.

Perbedaan antara canary paralel dengan canary target tunggal

  • Seperti deployment canary target tunggal, jika men-deploy ke target GKE, Anda memerlukan konfigurasi Deployment Kubernetes dan konfigurasi Layanan Kubernetes dalam manifes.

  • Seperti deployment canary target tunggal, konfigurasi pipeline pengiriman Anda harus menyertakan stanza strategy.canary di dalam definisi tahap untuk tahap yang berlaku.

  • Selain itu, Anda perlu mengonfigurasi multi-target, dan Anda perlu mengonfigurasi target turunan yang dirujuk oleh multi-target tersebut.

  • Saat Anda membuat rilis, peluncuran pengontrol dan peluncuran turunan akan dibuat.

    Kedua jenis peluncuran—pengontrol dan turunan—memiliki fase terpisah untuk semua persentase canary yang dikonfigurasi, dan fase stable untuk canary 100%.

  • Anda tidak dapat mempercepat peluncuran turunan.

    Anda hanya dapat mempercepat peluncuran pengontrol. Saat Anda memajukan peluncuran pengontrol ke tahap berikutnya, peluncuran turunan juga akan diajukan oleh Cloud Deploy.

  • Anda tidak dapat mencoba ulang tugas yang gagal dalam peluncuran pengontrol.

    Anda hanya dapat mencoba kembali tugas dalam peluncuran turunan.

  • Anda tidak dapat mengabaikan tugas yang gagal dalam peluncuran pengontrol.

    Anda hanya dapat mengabaikan tugas yang gagal dalam peluncuran turunan.

  • Anda dapat membatalkan peluncuran pengontrol, tetapi tidak dapat membatalkan peluncuran turunan.

  • Anda dapat menghentikan operasi tugas hanya dalam peluncuran turunan, bukan peluncuran pengontrol.

Yang harus dilakukan jika peluncuran paralel gagal di canary

Jika peluncuran turunan gagal, peluncuran pengontrol dapat bertransisi ke berbagai status, bergantung pada apa yang terjadi dengan peluncuran turunan:

  • Jika satu atau beberapa peluncuran turunan gagal, tetapi setidaknya satu peluncuran turunan masih IN_PROGRESS, peluncuran pengontrol tetap IN_PROGRESS.

  • Jika satu atau beberapa peluncuran turunan gagal, tetapi setidaknya satu peluncuran turunan berhasil, peluncuran pengontrol adalah HALTED jika ada lebih banyak fase setelah fase saat ini.

    Jika ini adalah fase stable, peluncuran pengontrol adalah FAILED.

    HALTED memberi Anda kesempatan untuk mengabaikan, mencoba ulang tugas yang gagal dalam peluncuran turunan yang gagal, atau membatalkan peluncuran pengontrol dan mencegah tindakan lebih lanjut pada peluncuran turunan.

  • Jika peluncuran pengontrol berada dalam status HALTED karena peluncuran turunan yang gagal, dan Anda mengabaikan tugas yang gagal dalam peluncuran turunan, peluncuran pengontrol akan dikembalikan ke status IN_PROGRESS.

Men-deploy HTTPRoute ke cluster lain

Jika memiliki canary yang dikonfigurasi menggunakan mesh layanan Gateway API, Anda dapat menentukan cluster alternatif non-target tempat HTTPRoute akan di-deploy.

Untuk melakukannya, Anda menggunakan stanza routeDestinations, dalam konfigurasi strategi canary, untuk mengidentifikasi cluster atau cluster tujuan untuk HTTPRoute, dan setelan boolean untuk menyebarkan Layanan ke cluster non-target yang sama. Anda juga membuat stanza associatedEntities dalam konfigurasi target untuk mengidentifikasi cluster.

  1. Konfigurasikan associatedEntities di target Anda.

    Setiap entitas adalah cluster tempat Cloud Deploy akan men-deploy HTTPRoute dan, secara opsional, Layanan Kubernetes. Dalam definisi target, sertakan stanza associatedEntities:

    associatedEntities:
      [KEY]:
        gkeClusters:
        - cluster: [PATH]
          internalIp: [true|false]
          proxyUrl:
    

    Dengan keterangan:

    • KEY adalah nama arbitrer untuk grup entity terkait ini. Anda akan menggunakan nama ini untuk mereferensikan entity dari routeDestinations dalam konfigurasi canary.

    • PATH adalah jalur resource yang mengidentifikasi cluster GKE tempat HTTPRoute Anda (dan secara opsional Layanan) akan di-deploy.

    • internalIp menunjukkan apakah Anda ingin menggunakan IP internal (IP pribadi) atau tidak jika cluster memiliki IP internal dan IP publik yang dikonfigurasi. Defaultnya adalah false.

    Anda dapat menyertakan cluster dalam jumlah berapa pun, dengan atau tanpa internalIp.

  2. Konfigurasikan routeDestinations di konfigurasi canary Anda.

    Setiap tujuan rute mereferensikan stanza associatedEntities, dan menunjukkan apakah akan men-deploy Layanan ke cluster alternatif atau tidak. Tambahkan kode berikut di dalam stanza gatewayServiceMesh di konfigurasi canary Anda:

    routeDestinations:
      destinationIds: ["KEY"]
      propagateService: [true|false]
    

    Dengan keterangan:

    • KEY adalah nama yang Anda konfigurasikan di target, di associatedEntities. Gunakan nama ini untuk mereferensikan entity dari routeDestinations dalam konfigurasi canary Anda.

      Anda juga dapat memberikan nilai @self untuk men-deploy HTTPRoute ke cluster target selain tujuan terkait.

    • propagateService menunjukkan apakah Anda ingin men-deploy Layanan ke cluster terkait atau tidak, selain HTTPRoute. Defaultnya adalah false.

Menjalankan canary yang dikonfigurasi

Untuk menjalankan deployment canary:

  1. Daftarkan target dan pipeline pengiriman yang dikonfigurasi.

    gcloud deploy apply --file=PIPELINE
    

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

    Perintah ini mengasumsikan bahwa target Anda ditentukan dalam file yang sama atau sudah terdaftar. Jika belum, pastikan untuk mendaftarkan target Anda juga.

  2. Membuat rilis:

    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. Majukan canary:

    gcloud CLI

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

    Dengan keterangan:

    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.

    Konsol Google Cloud

    1. Buka halaman Pipeline pengiriman.

    2. Klik pipeline yang ditampilkan dalam daftar pipeline pengiriman.

      Halaman detail Pipeline pengiriman menampilkan representasi grafis progres pipeline pengiriman Anda.

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

      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 Lanjutkan 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 Lewati fase untuk pertama kalinya untuk mengetahui penyebabnya.

Langkah selanjutnya