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 danskaffold apply
untuk men-deploynya ke target Anda. Untuk melakukannya, Skaffold memerlukan setidaknyaskaffold.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.
Jalankan proses continuous integration (CI) reguler Anda, yang membuat artefak atau artefak yang dapat di-deploy.
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 kerel-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 kolomname
dalam definisi pipeline.REGION
adalah nama region tempat Anda membuat rilis, misalnyaus-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 Membuatskaffold.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 Membuatskaffold.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.)
Dari halaman Detail pipeline pengiriman, untuk pipeline pengiriman tertentu, klik Buat rilis.
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.
Berikan nama unik untuk rilis ini, di kolom Release name, atau gunakan nama default yang diberikan.
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
.Secara opsional, sertakan deskripsi untuk rilis ini, di kolom Description.
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.
Klik Create.
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 ketrue
. Secara default, hal ini benar. JikastatusCheck
adalahfalse
, tidak ada pemeriksaan status, peluncuran akan ditandai berhasil setelahkubectl apply
berhasil selesai.Untuk resource Kubernetes
kind: Deployment
, adaDeployment.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 ke600
(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:
Pastikan
deploy.statusCheck
ditetapkan ketrue
diskaffold.yaml
.true
adalah defaultnya. Jikatrue
, Skaffold akan menunggu health check untuk melaporkan deployment yang stabil, bergantung pada nilai waktu tunggu di langkah berikutnya.Di
skaffold.yaml
, tetapkanstatusCheckDeadlineSeconds
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.Secara opsional, Anda dapat menambahkan
tolerateFailuresUntilDeadline: true
setelahstatusCheckDeadlineSeconds
.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.
Dalam manifes Kubernetes, untuk resource
kind: Deployment
, tetapkanDeployment.spec.progressDeadlineSeconds
ke nilai yang sama dengan yang Anda tetapkan untukstatusCheckDeadlineSeconds
.
Langkah selanjutnya
Cari tahu cara men-deploy ke GKE
Cari tahu cara men-deploy ke Cloud Run
Cari tahu cara men-deploy ke GKE Enterprise
Pelajari cara membuat target dan pipeline pengiriman
Pelajari cara mempromosikan rilis