Men-deploy aplikasi Anda

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

Sebelum memulai

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

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

  • Membuat target dan pipeline pengiriman Anda.

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

  • Memiliki image dan manifes container.

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

    Anda memerlukan pipeline continuous integration, atau beberapa proses lainnya, untuk membangun dan menempatkan gambar Anda. 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 merujuk namespace yang sesuai dengan versi Skaffold yang didukung di baris pertama, seperti dalam contoh ini:

      `apiVersion: skaffold/v4beta7`
      
    • Buat untuk Anda.

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

    Lihat Menggunakan Skaffold dengan Cloud Deploy untuk mengetahui detail selengkapnya. Selain itu, artikel Mengelola manifes di Cloud Deploy memiliki detail selengkapnya tentang cara menggunakan 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 Anda untuk membuat rilis

Setelah mengonfigurasi Cloud Deploy untuk di-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 untuk membuat artefak atau 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 konten direktori dan subdirektori mana pun, Anda mungkin tidak ingin menjalankan perintah ini dari direktori utama atau root Anda. Jalankan perintah dari direktori yang berisi konfigurasi Skaffold, atau sertakan opsi --source=, yang dijelaskan nanti.

    Dalam perintah ini...

    RELEASE_NAME adalah nama untuk diberikan untuk rilis ini. Namanya 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 berada dalam tanda kutip 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 di 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 secara 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 nama gambar untuk penggantian jalur lengkap gambar.

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

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

Kedua opsi ini sama-sama bersifat 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 tanda ini dengan tanda --skaffold-file atau tanda --source, akan menghasilkan error. Lihat Membuat skaffold.yaml untuk detail selengkapnya.

  • --from-run-manifest=RUN_MANIFEST

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

Kedua opsi ini sama-sama bersifat eksklusif.

Anda juga dapat menyertakan file .gcloudignore jika ada file dalam 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. Ini berguna untuk mencoba Cloud Deploy, tetapi tidak cocok untuk workload 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 penampung default yang sudah terisi otomatis di kolom ini, untuk evaluasi.

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

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

  4. Beri nama peluncuran di kolom Nama peluncuran, atau gunakan nama default yang disediakan.

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

  5. Jika ingin, sertakan deskripsi untuk rilis ini, di kolom Description.

  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 menghasilkan manifes untuk Anda. Untuk Cloud Run, Cloud Deploy menghasilkan definisi layanan yang digunakan untuk membuat layanan.

  7. Klik Create.

    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 durasi waktu tunggu sistem agar Kubernetes melaporkan deployment yang stabil:

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

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

  • Skaffold memiliki waktu tunggu health check (deploy.statusCheckDeadlineSeconds), yaitu jumlah waktu, dalam detik, untuk menunggu deployment menjadi stabil.

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

  • Untuk resource Kubernetes kind: Deployment, terdapat Deployment.spec.progressDeadlineSeconds, yaitu jumlah waktu yang dibutuhkan Kubernetes untuk menunggu Deployment dilaporkan sebagai stabil.

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

    • Jika Deployment.spec.progressDeadlineSeconds, di Kubernetes, tidak disetel, waktu tunggu health check Skaffold adalah waktu tunggu efektif, baik sebagai default maupun 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 secara eksplisit ditetapkan ke 600 (10 menit), Skaffold akan menganggap bahwa waktu tunggu tersebut adalah default (tidak ditetapkan) dan mengabaikannya, dan waktu tunggu Skaffold akan digunakan (jika disetel).

    • Jika tidak ada waktu tunggu yang ditetapkan, waktu tunggu efektif adalah default Skaffold 600 (10 menit).

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

    Jika waktu tunggu Skaffold (atau Cloud Build) habis, deployment GKE akan terus berjalan. Cloud Deploy menampilkan kegagalan, tetapi masih bisa 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 untuk melaporkan deployment yang stabil, dengan tunduk pada nilai waktu tunggu pada langkah berikutnya.

  2. Di skaffold.yaml, tetapkan statusCheckDeadlineSeconds ke jumlah detik yang Anda inginkan untuk menunggu.

    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. Anda juga dapat menambahkan tolerateFailuresUntilDeadline: true setelah statusCheckDeadlineSeconds.

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

    Misalnya, jika menggunakan Istio atau Anthos Service Mesh, Anda mungkin mengalami deployment yang gagal dengan pesan seperti ini:

    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.
    

    Setelan ini hanya berfungsi dengan Skaffold 2.0 atau yang lebih baru.

  4. Dalam manifes Kubernetes, untuk resource kind: Deployment, tetapkan Deployment.spec.progressDeadlineSeconds ke nilai yang sama dengan yang Anda tetapkan untuk statusCheckDeadlineSeconds.

Langkah selanjutnya