Men-deploy layanan, tugas, atau kumpulan worker Cloud Run

Dokumen ini menjelaskan cara men-deploy aplikasi Anda, termasuk layanan Cloud Run, tugas Cloud Run, dan kumpulan pekerja Cloud Run.

Cloud Deploy memungkinkan Anda men-deploy beban kerja berbasis container ke layanan Cloud Run, tugas, atau kumpulan pekerja mana pun. Semua fitur Cloud Deploy didukung saat Anda men-deploy ke target Cloud Run untuk layanan atau kumpulan pekerja Cloud Run, tetapi deployment canary tidak didukung untuk tugas Cloud Run.

Dokumen ini menjelaskan tiga konfigurasi utama yang harus Anda selesaikan agar dapat men-deploy ke Cloud Run:

Batasan

  • Anda hanya dapat men-deploy satu layanan, tugas, atau kumpulan pekerja Cloud Run per target.

  • Anda tidak dapat menjalankan deployment canary terhadap tugas Cloud Run.

    Namun, layanan Cloud Run dan kumpulan pekerja dapat menggunakan deployment canary.

  • Untuk men-deploy Cloud Run function menggunakan Cloud Deploy, Anda perlu memodifikasi alur kerja CI untuk membangun fungsi ke dalam container dan men-deploy-nya sebagai layanan Cloud Run.

Sebelum memulai

Buat konfigurasi target

Target dapat dikonfigurasi di YAML pipeline pengiriman Anda, atau dapat berada di file terpisah. Selain itu, Anda dapat mengonfigurasi lebih dari satu target dalam file yang sama.

Target harus ditentukan dalam project dan region yang sama dengan pipeline pengiriman. Namun, layanan, tugas, atau pool worker yang di-deploy target dapat berada di project dan region yang berbeda, selama akun layanan memiliki akses ke project tersebut.

Dalam definisi target, buat stanza run untuk mengidentifikasi lokasi tempat layanan Cloud Run akan dibuat.

Sintaksis untuk menentukan layanan, tugas, atau kumpulan worker Cloud Run dalam definisi target adalah sebagai berikut:

run:
 location: projects/[project_name]/locations/[region_name]

ID resource ini menggunakan elemen berikut:

  • project_name adalah nama project Google Cloud tempat layanan, tugas, atau kumpulan worker Cloud Run Anda akan dibuat.

    Anda akan melakukannya untuk setiap target. Sebaiknya gunakan project yang berbeda untuk setiap layanan, tugas, atau kumpulan pekerja Cloud Run. Jika Anda menginginkan lebih dari satu layanan, tugas, atau pool worker dalam project yang sama, Anda harus menggunakan profil Skaffold dalam file konfigurasi skaffold.yaml.

  • region_name adalah region tempat layanan, tugas, atau kumpulan pekerja akan dibuat. Layanan, tugas, atau kumpulan worker Anda dapat berada di region yang didukung Cloud Run.

Berikut adalah contoh konfigurasi target, yang menentukan layanan, tugas, atau kumpulan pekerja Cloud Run yang akan dibuat:

      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
       name: dev
      description: development service
      run:
       location: projects/my-app/locations/us-central1

Anda dapat menentukan target ini di dalam definisi pipeline pengiriman Cloud Deploy, atau secara terpisah. Bagaimanapun, Anda harus mendaftarkan target sebelum membuat rilis untuk men-deploy layanan, tugas, atau kumpulan worker Cloud Run.

Buat konfigurasi Skaffold Anda

Berikut adalah contoh file skaffold.yaml untuk deployment Cloud Run:

apiVersion: skaffold/v4beta7
kind: Config
metadata: 
  name: cloud-run-application
manifests:
  rawYaml:
  - service.yaml
deploy:
  cloudrun: {}

Dalam file skaffold.yaml ini...

  • manifests.rawYaml memberikan nama definisi layanan Cloud Run.

    Dalam contoh ini, service.yaml adalah file yang menentukan layanan Cloud Run yang akan di-deploy Skaffold. Nama file ini bisa apa saja, tetapi berdasarkan konvensi, nama file adalah service.yaml untuk layanan, job.yaml untuk tugas, dan workerpool.yaml untuk kumpulan pekerja.

  • Stanza deploy menentukan cara Anda ingin men-deploy manifes, khususnya, project dan lokasi. deploy wajib diisi.

    Sebaiknya biarkan {} kosong. Cloud Deploy mengisi ini selama rendering, berdasarkan project dan lokasi dari definisi target.

    Namun, untuk pengembangan lokal, Anda dapat memberikan nilai di sini. Namun, Cloud Deploy selalu menggunakan project dan lokasi dari definisi target, terlepas dari apakah nilai diberikan di sini atau tidak.

Membuat definisi layanan Cloud Run

Untuk membuat definisi layanan Cloud Run, Anda dapat membuat layanan secara manual, atau menyalinnya dari layanan yang ada. Keduanya dijelaskan di bagian ini.

Opsi 1: Buat Cloud Run baru service.yaml

service.yaml menentukan layanan Cloud Run Anda. Saat Anda membuat rilis, Skaffold menggunakan definisi ini untuk men-deploy layanan Anda.

Berikut contoh yang disederhanakan:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
 name: [SERVICE_NAME]
spec:
 template:
  spec:
   containers:
   - image: [IMAGE_PATH]

Dengan:

  • [SERVICE_NAME] adalah nama untuk layanan Cloud Run ini.

  • [IMAGE_PATH] mengarah ke image container atau image yang Anda deploy dengan layanan ini.

Opsi 2: Menyalin service.yaml dari layanan yang ada menggunakan konsol Google Cloud

Anda dapat membuat layanan menggunakan konsol Google Cloud atau menggunakan layanan yang sudah ada, dan menyalin service.yaml dari sana.

Untuk mendapatkan service.yaml menggunakan Google Cloud CLI:

gcloud run services describe [service_name] --format=export

Untuk mendapatkan service.yaml dari konsol Google Cloud :

  1. Di konsol Google Cloud , buka halaman Cloud Run Services.

  2. Pilih layanan yang ada yang definisinya ingin Anda gunakan.

Atau, Anda dapat membuat yang baru, lalu memilihnya. Saat Anda memilih layanan, halaman Service details akan ditampilkan:

Halaman detail layanan
 konsolGoogle Cloud , yang menampilkan tab YAML

  1. Pilih tab YAML.

  2. Klik Edit, lalu salin konten YAML ke dalam file baru bernama service.yaml, di sistem file Anda, sehingga Skaffold dapat menggunakannya saat Anda membuat rilis.

Membuat definisi tugas Cloud Run

Untuk men-deploy definisi tugas Cloud Run, Anda dapat membuat tugas secara manual, atau menyalin tugas dari tugas yang ada. Keduanya dijelaskan di bagian ini.

Perhatikan bahwa tugas tidak harus dijalankan setelah di-deploy oleh Cloud Deploy. Hal ini berbeda dengan layanan, yang menjalankan aplikasi setelah di-deploy. Cara tugas dipanggil bergantung pada tugas itu sendiri.

Opsi 1: Buat Cloud Run baru job.yaml

job.yaml menentukan tugas Cloud Run Anda. Saat Anda membuat rilis, Skaffold menggunakan definisi ini untuk men-deploy tugas.

Berikut contoh yang disederhanakan:

apiVersion: run.googleapis.com/v1
kind: Job
metadata:
 name: [JOB_NAME]
spec:
  template:
  spec:
   containers:
   - image: [IMAGE_PATH]

Dengan:

  • [JOB_NAME] adalah nama untuk tugas Cloud Run ini.

  • [IMAGE_PATH] mengarah ke image container yang Anda deploy untuk tugas ini.

Opsi 2: Salin job.yaml dari tugas yang ada menggunakan konsol Google Cloud

Anda dapat membuat tugas menggunakan konsol Google Cloud atau menggunakan tugas yang sudah ada, dan menyalin job.yaml dari sana.

Untuk mendapatkan job.yaml menggunakan Google Cloud CLI:

gcloud run jobs describe [job_name] --format=export

Untuk mendapatkan job.yaml dari konsol Google Cloud :

  1. Di konsol Google Cloud , buka halaman Cloud Run Jobs.

  2. Pilih tugas yang ada yang definisinya ingin Anda gunakan.

Atau, Anda dapat membuat yang baru, lalu memilihnya. Saat Anda memilih tugas, halaman Detail tugas akan ditampilkan:

Halaman detail tugas
 konsolGoogle Cloud , yang menampilkan tab YAML

  1. Pilih tab YAML.

  2. Klik Edit, lalu salin konten YAML ke dalam file baru bernama job.yaml, di sistem file Anda, sehingga Skaffold dapat menggunakannya saat Anda membuat rilis.

Membuat definisi kumpulan pekerja Cloud Run

Untuk men-deploy definisi kumpulan pekerja Cloud Run, Anda dapat membuat nya secara manual, atau menyalinnya dari kumpulan pekerja yang ada. Keduanya dijelaskan di bagian ini.

Opsi 1: Buat Cloud Run baru workerpool.yaml

workerpool.yaml menentukan kumpulan worker Cloud Run Anda. Saat Anda membuat rilis, Skaffold menggunakan definisi ini untuk men-deploy gabungan worker.

Berikut contoh yang disederhanakan:

apiVersion: run.googleapis.com/v1
kind: WorkerPool
metadata:
 name: [WORKERPOOL_NAME]
 annotations:
  run.googleapis.com/launch-stage: BETA
spec:
  template:
   spec:
    containers:
    - image: [IMAGE_PATH]

Dengan:

  • [WORKERPOOL_NAME] adalah nama untuk kumpulan worker Cloud Run ini.

  • [IMAGE_PATH] mengarah ke image container yang Anda deploy untuk kumpulan pekerja ini.

Opsi 2: Menyalin workerpool.yaml dari kumpulan pekerja yang ada menggunakan konsol Google Cloud

Anda dapat membuat kumpulan pekerja menggunakan konsol Google Cloud atau menggunakan kumpulan pekerja yang sudah ada, dan menyalin workerpool.yaml dari sana.

Untuk mendapatkan workerpool.yaml menggunakan Google Cloud CLI:

gcloud beta run worker-pools describe [workerpool_name] --format=export

Untuk mendapatkan workerpool.yaml dari konsol Google Cloud :

  1. Di konsol Google Cloud , buka halaman Cloud Run Worker pools.

  2. Pilih gabungan worker yang ada yang definisinya ingin Anda gunakan.

Atau, Anda dapat membuat yang baru, lalu memilihnya. Saat Anda memilih kumpulan pekerja, halaman Worker pool details akan ditampilkan:

halaman detail kumpulan pekerja
 konsolGoogle Cloud , yang menampilkan tab YAML

  1. Pilih tab YAML.

  2. Salin konten YAML ke dalam file baru bernama workerpool.yaml di sistem file Anda, sehingga Skaffold dapat menggunakannya saat Anda membuat rilis.

Menggabungkan semuanya

Setelah memiliki definisi layanan, tugas, atau kumpulan worker Cloud Run, konfigurasi skaffold.yaml, dan definisi target Cloud Deploy, serta telah mendaftarkan target sebagai resource Cloud Deploy, Anda kini dapat memanggil pipeline pengiriman untuk membuat rilis dan memprosesnya melalui progres target yang ditentukan dalam pipeline.

Panduan memulai Men-deploy aplikasi ke Cloud Run menggunakan Cloud Deploy menunjukkan semua ini dalam tindakan.

Perilaku layanan di seluruh revisi

Saat Anda men-deploy ulang layanan, revisi baru didasarkan pada service.yaml yang baru di-deploy. Tidak ada yang dipertahankan dari revisi sebelumnya, kecuali jika sama dengan YAML yang baru di-deploy. Misalnya, jika ada setelan konfigurasi atau label dalam revisi sebelumnya yang tidak ada dalam YAML baru, setelan atau label tersebut tidak ada dalam revisi baru.

Memicu tugas Cloud Run

Setelah men-deploy tugas, Anda dapat memicunya seperti yang dijelaskan dalam dokumentasi Cloud Run.

Men-deploy layanan, tugas, dan kumpulan pekerja Cloud Run di beberapa project

Jika Anda perlu men-deploy layanan, tugas, atau pool worker yang berada di project yang berbeda, akun layanan eksekusi Anda memerlukan izin untuk mengakses project tempat layanan, tugas, atau pool worker tersebut ditentukan.

Lihat Akun layanan eksekusi Cloud Deploy dan Peran dan izin Identity and Access Management untuk mengetahui informasi selengkapnya.

Men-deploy fungsi Cloud Run

Cloud Run Functions mem-build kode sumber Anda setiap kali fungsi di-deploy. Oleh karena itu, setiap target runtime dalam pipeline Anda mungkin mendapatkan artefak yang sedikit berbeda. Hal ini bertentangan dengan praktik terbaik di Cloud Deploy. Sebagai gantinya, sebaiknya Anda menggunakan layanan Cloud Run secara langsung. Dengan demikian, Anda dapat membuat satu artefak dan mempromosikannya di seluruh lingkungan Anda.

  1. Periksa service.yaml untuk fungsi Cloud Run Anda.

    Anda bisa mendapatkannya dengan menjalankan perintah berikut:

    gcloud run services describe FUNCTION_NAME \
    --format=export \
    --region=REGION \
    --project=PROJECT
    
  2. Hapus anotasi berikut, jika ada:

    • run.googleapis.com/build-base-image
    • run.googleapis.com/build-name
    • run.googleapis.com/build-source-location
    • run.googleapis.com/build-enable-automatic-updates
  3. Ganti nilai di spec.spec.containers.image dengan IMAGE_TAG.

  4. Buat target dan pipeline pengiriman, dengan layanan Cloud Run sebagai target.

  5. Pisahkan langkah build dari langkah deployment dalam proses CI Anda. Daripada menggunakan Google Cloud CLI untuk men-deploy fungsi, ganti dengan langkah-langkah berikut:

    1. Bangun fungsi ke dalam container menggunakan Cloud Build:

      gcloud builds submit --pack image=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAME \
      --project=PROJECT \
      --region=REGION
      
    2. Buat rilis menggunakan Cloud Deploy:

      gcloud deploy releases create RELEASE_NAME \
      --project=DEPLOY_PROJECT \
      --region=REGION \
      --delivery-pipeline=DELIVERY_PIPELINE \
      --images=IMAGE_TAG=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAME
      

      Dalam perintah ini...

      • RELEASE_NAME adalah nama yang akan diberikan pada rilis ini. Nama harus unik di antara semua rilis untuk pipeline pengiriman ini.

      • DEPLOY_PROJECT adalah project ID project tempat Anda membuat pipeline deployment.

      • DELIVERY_PIPELINE adalah nama pipeline pengiriman yang akan mengelola deployment rilis ini melalui progresi target. Nama ini harus cocok dengan kolom name dalam definisi pipeline.

      • REGION adalah nama region tempat Anda membuat rilis, misalnya us-central1. Wajib diisi.

      • IMAGE_NAME adalah nama yang Anda berikan pada image di langkah sebelumnya, saat Anda membuat fungsi.

Langkah berikutnya