Men-deploy aplikasi Anda

Halaman ini menjelaskan cara menggunakan Cloud Deploy untuk menempatkan aplikasi Anda ke lingkungan runtime target yang diinginkan. Sebelum melakukannya, Anda harus membuat target dan pipeline pengiriman.

Sebelum memulai

Bagian ini menjelaskan hal-hal yang perlu Anda siapkan sebelum dapat men-deploy aplikasi menggunakan Cloud Deploy.

  • Pastikan akun layanan eksekusi Anda memiliki peran dan izin IAM yang diperlukan.

  • Buat target dan pipeline pengiriman Anda.

    Cloud Deploy dapat men-deploy ke cluster Google Kubernetes Engine, Cloud Run, dan GKE Enterprise. Konfigurasi target berbeda-beda, bergantung pada tujuan deployment Anda.

  • Memiliki image dan manifes container Anda.

    Anda memerlukan satu atau beberapa image container untuk di-deploy dan satu atau beberapa manifes Kubernetes (untuk di-deploy ke GKE) atau file YAML layanan (untuk di-deploy ke Cloud Run).

    Anda memerlukan pipeline continuous integration, atau proses lain, untuk membangun dan menempatkan gambar. Alat CI Anda dapat berupa Cloud Build, Jenkins, atau apa pun yang menghasilkan image container yang dapat Anda berikan ke pipeline pengiriman Cloud Deploy.

  • Memiliki file konfigurasi skaffold.yaml.

    Cloud Deploy memanggil skaffold render untuk merender manifes Kubernetes menggunakan file ini dan skaffold apply untuk men-deploy-nya ke target Anda. Untuk melakukannya, Skaffold memerlukan setidaknya skaffold.yaml minimal. Anda bisa mendapatkannya dengan salah satu dari dua cara berikut:

    • Buat sendiri.

      Perhatikan bahwa file skaffold.yaml harus mereferensikan namespace yang sesuai dengan versi Skaffold yang didukung di baris pertama, seperti dalam contoh ini:

      `apiVersion: skaffold/v4beta7`
      
    • Minta Gemini membuatnya untuk Anda.

      Jika Anda belum memiliki file skaffold.yaml, Anda dapat meminta Cloud Deploy membuatnya untuk Anda. File ini cocok untuk mengaktifkan, mempelajari, atau mendemonstrasikan Cloud Deploy, dan tidak boleh digunakan untuk workload produksi.

    Lihat Menggunakan Skaffold dengan Cloud Deploy untuk mengetahui detail selengkapnya. Selain itu, Mengelola manifes di Cloud Deploy memiliki detail selengkapnya tentang penggunaan Skaffold dan Cloud Deploy dengan alat pengelolaan manifes, seperti Helm, Kustomize, dan kpt.

Menyiapkan Cloud Deploy untuk lingkungan runtime pilihan Anda

Cloud Deploy dapat men-deploy aplikasi Anda ke salah satu lingkungan runtime berikut:

Memanggil pipeline pengiriman untuk membuat rilis

Setelah mengonfigurasi Cloud Deploy untuk men-deploy ke runtime, Anda kini dapat mengirimkan aplikasi untuk di-deploy sesuai dengan pipeline pengiriman yang Anda buat.

  1. Jalankan proses continuous integration (CI) reguler Anda, dengan membuat artefak yang dapat di-deploy.

  2. Mulai pipeline pengiriman dengan memanggil Cloud Deploy untuk membuat rilis.

    Jalankan perintah berikut dari direktori yang berisi konfigurasi Skaffold Anda:

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

    Karena perintah ini membuat file tar dari seluruh isi direktori, dan subdirektori apa pun, Anda mungkin tidak ingin menjalankan perintah ini dari direktori beranda atau root. Jalankan perintah dari direktori yang berisi konfigurasi Skaffold Anda, atau sertakan opsi --source=, yang dijelaskan nanti.

    Dalam perintah ini...

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

    Anda dapat menentukan nama rilis dinamis dengan menyertakan '$DATE' atau '$TIME' atau keduanya. Misalnya, jika Anda memanggil perintah ini pada pukul 15.07 UTC, 'rel-$TIME' akan di-resolve menjadi rel-1507. '$DATE' dan '$TIME' harus dalam tanda petik tunggal, dan waktunya adalah waktu UTC di mesin tempat Anda memanggil perintah.

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

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

Perintah ini mengupload file tar yang berisi konfigurasi Anda ke bucket Cloud Storage dan membuat rilis. Cloud Deploy juga otomatis membuat peluncuran dan men-deploy image Anda ke target pertama yang ditentukan dalam pipeline pengiriman.

Selain parameter yang ditampilkan dengan perintah ini, Anda dapat menyertakan salah satu opsi berikut:

  • --images=<name=path/name:$IMAGE_SHA>,<name=path/name:$IMAGE_SHA>

    Kumpulan penggantian nama gambar ke jalur lengkap gambar.

  • --build-artifacts=<path/file>

    Referensi ke file output artefak build Skaffold, yang dapat diteruskan untuk merepresentasikan penggantian jalur lengkap image.

Kedua opsi ini saling eksklusif.

Anda juga dapat menyertakan salah satu flag berikut agar Cloud Deploy membuat file skaffold.yaml untuk Anda:

  • --from-k8s-manifest=K8S_MANIFEST

    Konfigurasi Skaffold yang dihasilkan didasarkan pada manifes Kubernetes yang Anda teruskan flag ini. Menggunakan flag ini dengan flag --skaffold-file atau flag --source akan menghasilkan error. Lihat Membuat skaffold.yaml untuk mengetahui detail selengkapnya.

  • --from-run-manifest=RUN_MANIFEST

    Konfigurasi Skaffold yang dihasilkan didasarkan pada YAML layanan Cloud Run yang Anda teruskan ke flag ini. Menggunakan flag ini dengan flag --skaffold-file atau flag --source akan menghasilkan error. Lihat Membuat skaffold.yaml untuk mengetahui detail selengkapnya.

Kedua opsi ini saling eksklusif.

Anda juga dapat menyertakan file .gcloudignore jika ada file di direktori yang tidak ingin Anda sertakan dalam file tar.

Membuat rilis dari konsol Google Cloud

Anda dapat menggunakan konsol Google Cloud untuk membuat rilis untuk pipeline pengiriman. Hal ini berguna untuk mencoba Cloud Deploy, tetapi tidak cocok untuk beban kerja produksi.

Prosedur berikut mengasumsikan bahwa Anda telah membuat pipeline pengiriman dan satu atau beberapa target. (Anda juga dapat menggunakan konsol Google Cloud ) untuk membuat pipeline pengiriman.)

  1. Dari halaman Detail pipeline pengiriman, untuk pipeline pengiriman tertentu, klik Buat rilis.

    detail pipeline pengiriman, yang menampilkan tombol buat rilis

  2. Di kolom Choose a container, tempel atau ketik jalur ke image container yang ingin Anda deploy. Anda juga dapat menggunakan container default yang telah diisi sebelumnya dalam kolom ini, untuk evaluasi.

    Anda juga dapat mengklik Select untuk memilih image container dari Artifact Registry.

  3. Berikan nama unik untuk rilis ini di kolom Release name, atau gunakan nama default yang diberikan.

  4. Berikan nama untuk peluncuran di kolom Nama peluncuran, atau gunakan nama default yang diberikan.

    Nama ini digunakan untuk peluncuran ke target pertama, untuk rilis ini. Untuk target berikutnya, Anda dapat memberi nama peluncuran dalam dialog Promosikan atau pada perintah gcloud deploy releases promote.

  5. Secara opsional, sertakan deskripsi untuk rilis ini di kolom Deskripsi.

  6. Di bagian Detail deployment, masukkan nama untuk deployment GKE atau layanan Cloud Run Anda, atau gunakan nama default yang diberikan.

    Untuk GKE, Cloud Deploy membuat manifes untuk Anda. Untuk Cloud Run, Cloud Deploy membuat definisi layanan, yang digunakan untuk membuat layanan.

  7. Klik Buat.

    Dialog buat rilis

Cloud Deploy menggunakan manifes yang dihasilkan atau definisi layanan Cloud Run, dan skaffold.yaml yang dihasilkan, untuk membuat rilis.

Mengubah waktu tunggu deployment

Untuk deployment ke cluster target GKE dan GKE Enterprise, ada tiga waktu tunggu terpisah yang memengaruhi berapa lama sistem menunggu Kubernetes melaporkan deployment yang stabil:

  • Cloud Build memiliki waktu tunggu 1 jam untuk operasi yang dilakukan Cloud Build untuk Cloud Deploy.

    Anda dapat mengubah waktu tunggu ini di konfigurasi untuk lingkungan eksekusi Anda.

  • Skaffold memiliki waktu tunggu pemeriksaan kondisi (deploy.statusCheckDeadlineSeconds), yaitu jumlah waktu, dalam detik, untuk menunggu hingga deployment stabil.

    Defaultnya adalah 600 detik (10 menit). Untuk menggunakan waktu tunggu ini, deploy.statusCheck harus ditetapkan ke true. Secara default, ya. Jika statusCheck adalah false, tidak ada pemeriksaan status, peluncuran ditandai berhasil setelah kubectl apply berhasil diselesaikan.

  • Untuk resource Kubernetes kind: Deployment, ada Deployment.spec.progressDeadlineSeconds, yaitu jumlah waktu yang ditunggu Kubernetes agar Deployment dilaporkan sebagai stabil.

    Waktu tunggu ini hanya berlaku untuk resource Deployment. Berikut cara kerja dua batas waktu pertama ini:

    • Jika Deployment.spec.progressDeadlineSeconds, di Kubernetes, tidak disetel, maka waktu tunggu health check Skaffold adalah waktu tunggu yang efektif, baik itu default atau disetel secara eksplisit.

    • Jika Deployment.spec.progressDeadlineSeconds, di Kubernetes, ditetapkan, Skaffold akan mengabaikan waktu tunggu health check-nya sendiri, dan batas waktu progres Kubernetes adalah waktu tunggu yang efektif. Namun, jika waktu tunggu Kubernetes ditetapkan secara eksplisit ke 600 (10 menit), Skaffold akan menganggapnya sebagai default (tidak disetel) dan mengabaikannya, lalu waktu tunggu Skaffold akan digunakan (jika disetel).

    • Jika kedua batas waktu tidak disetel, batas waktu efektif adalah default Skaffold 600 (10 menit).

    Selain Deployment, resource Kubernetes lainnya dapat memiliki waktu tunggu, yang tidak memengaruhi waktu tunggu stabilitas. Jika ada, tinjau untuk memastikan tidak bertentangan dengan waktu tunggu stabilitas.

    Jika Skaffold (atau Cloud Build) kehabisan waktu, deployment GKE akan terus berjalan. Cloud Deploy menunjukkan kegagalan, tetapi masih dapat berhasil atau gagal di cluster GKE.

Untuk mengubah waktu tunggu stabilitas deployment:

  1. Pastikan deploy.statusCheck disetel ke true di skaffold.yaml.

    true adalah defaultnya. Saat true, Skaffold menunggu health check melaporkan deployment yang stabil, tunduk pada nilai waktu tunggu di langkah berikutnya.

  2. Di skaffold.yaml, tetapkan statusCheckDeadlineSeconds ke jumlah detik yang ingin Anda tunggu.

    deploy:
      ...
      statusCheck: true
      statusCheckDeadlineSeconds: 600
      ...
    

    Defaultnya adalah 600 (10 menit). Skaffold menunggu selama waktu ini untuk deployment yang stabil. Jika waktu ini terlampaui sebelum deployment stabil, deployment akan gagal.

  3. Secara opsional, Anda dapat menambahkan tolerateFailuresUntilDeadline: true setelah statusCheckDeadlineSeconds.

    Setelan ini memberi tahu Skaffold untuk tidak keluar jika satu deployment gagal, tetapi untuk mentoleransi kegagalan hingga statusCheckDeadlineSeconds berakhir. Setelan ini dapat membantu dalam situasi ketika Anda memiliki resource yang mungkin memerlukan lebih banyak waktu (hingga batas waktu pemeriksaan status) untuk mencapai status stabil.

    Misalnya, jika Anda menggunakan Istio atau Cloud Service Mesh, Anda mungkin mengalami kegagalan deployment dengan pesan yang mirip dengan pesan berikut:

    error iptables validation failed; workload is not ready for Istio.
    When using Istio CNI, this can occur if a pod is scheduled before the node is ready.
    
  4. Dalam manifes Kubernetes, untuk resource kind: Deployment, tetapkan Deployment.spec.progressDeadlineSeconds ke nilai yang sama dengan yang Anda tetapkan untuk statusCheckDeadlineSeconds.

Langkah berikutnya