Men-deploy aplikasi Anda

Halaman ini menjelaskan cara menggunakan Cloud Deploy untuk memasukkan 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.

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

  • Memiliki image dan manifes container.

    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 beberapa proses lainnya, untuk mem-build 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-deploynya ke target Anda. Untuk melakukannya, Skaffold memerlukan setidaknya skaffold.yaml minimum. 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`
      
    • Buatkan 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 beban kerja 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 di-deploy ke runtime, Anda sekarang dapat mengirimkan aplikasi untuk di-deploy sesuai dengan pipeline pengiriman yang Anda buat.

  1. Jalankan proses continuous integration (CI) reguler Anda, yang 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 isi direktori, dan subdirektori apa pun, Anda mungkin tidak ingin menjalankan perintah ini dari direktori utama atau direktori 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 ke 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 ke rel-1507. '$DATE' dan '$TIME' harus dalam tanda petik tunggal, dan waktunya adalah waktu UTC di komputer 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 gambar.

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 tanda 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 tanda 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 disertakan 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 penampung yang ingin Anda deploy. Anda juga dapat menggunakan penampung default yang telah diisi sebelumnya 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 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 di dialog Promote atau pada perintah gcloud deploy releases promote.

  5. Secara opsional, 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 disediakan.

    Untuk GKE, Cloud Deploy akan membuat manifes untuk Anda. Untuk Cloud Run, Cloud Deploy membuat 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 berapa lama sistem menunggu Kubernetes melaporkan deployment yang stabil:

  • Cloud Build memiliki waktu tunggu 1 jam pada operasi yang dilakukan 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 stabil.

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

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

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

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

    • Jika Deployment.spec.progressDeadlineSeconds, di Kubernetes, ditetapkan, maka Skaffold akan mengabaikan waktu tunggu pemeriksaan kesehatannya 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 ditetapkan) dan mengabaikannya, serta waktu tunggu Skaffold akan digunakan (jika ditetapkan).

    • Jika tidak ada waktu tunggu yang ditetapkan, waktu tunggu yang 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 memastikannya tidak bertentangan dengan waktu tunggu stabilitas.

    Jika waktu tunggu Skaffold (atau Cloud Build) habis, 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 ditetapkan ke true di skaffold.yaml.

    true adalah defaultnya. Jika true, Skaffold akan menunggu health check untuk melaporkan deployment yang stabil, bergantung 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 jumlah 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 menggunakan Istio atau Cloud Service Mesh, Anda mungkin mengalami deployment yang gagal dengan pesan yang mirip dengan pesan 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