Dokumen ini menjelaskan cara memulai penggunaan Skaffold sebagai bagian dari Cloud Deploy, termasuk hal berikut:
- Mengonfigurasi Skaffold untuk digunakan dengan pipeline pengiriman Cloud Deploy
- Menggunakan Skaffold dan Cloud Deploy dengan alat rendering pihak ketiga, seperti Helm dan Kustomize
- Atau, menggunakan Skaffold untuk pengembangan lokal
- Secara opsional, menggunakan Skaffold untuk continuous integration dan continuous deployment (CI/CD)
Mengapa Skaffold?
Ingin tahu alasan Cloud Deploy menggunakan Skaffold, dan alasan Anda perlu mengelola konfigurasi Skaffold? Lanjutkan membaca.
Saya berpengalaman dengan CI/CD, tetapi saat ini tidak menggunakan Skaffold
Skaffold adalah alat command line open source untuk meningkatkan produktivitas bagi developer. Skaffold mengatur orkestrasi pengembangan berkelanjutan, continuous integration (CI), dan continuous delivery (CD).
Skaffold menyediakan konfigurasi deklaratif dan portabel, menggunakan arsitektur yang dapat dicocokkan, sehingga Anda dapat menggunakan berbagai alat untuk fase render.
Saat rilis dibuat, Cloud Deploy akan memanggil Skaffold untuk merender manifes Anda. Pada waktu deployment, Cloud Deploy akan memanggil Skaffold lagi untuk menerapkan manifes tersebut guna men-deploy aplikasi Anda ke setiap target dalam progres Anda. Setelah deployment, Skaffold melakukan health check untuk memantau runtime target agar deployment berhasil.
Skaffold untuk pengembangan berkelanjutan
Saat Anda menggunakan Skaffold untuk pengembangan berkelanjutan, image akan di-build, diuji, dan di-deploy ke cluster (atau Minikube) saat Anda mengubah kode. Ekstensi IDE Cloud Code untuk VS Code dan Cloud Code untuk IntelliJ mengintegrasikan Skaffold ke dalam Visual Studio Code dan JetBrains IDE, untuk pengembangan berkelanjutan.
Skaffold untuk continuous delivery
Anda juga dapat menggunakan Skaffold untuk continuous delivery,
dengan langkah-langkah build, deploy, render, dan apply. Cloud Deploy menggunakan kemampuan render dan terapkan Skaffold. Untuk menggunakan Cloud Deploy, Anda memerlukan setidaknya file konfigurasi skaffold.yaml
yang valid.
Melalui Skaffold, Anda juga dapat berintegrasi dengan alat pengelolaan manifes
pihak ketiga, seperti Helm, dan Kustomize.
Dengan menggunakan Skaffold dengan cara ini, Anda dapat menggunakan fitur alat tersebut untuk merender
manifes. kubectl
tetap menjadi deployer untuk manifes ini.
Saya baru pertama kali men-deploy ke Kubernetes
Dengan Skaffold, Anda dapat mengonfigurasi kumpulan manifes dasar untuk semua deployment. Kemudian, Anda dapat menggunakan mesin rendering Skaffold, melalui Cloud Deploy, untuk merender, lalu men-deploy, setiap manifes khusus deployment dari salah satu manifes dasar tersebut.
Baca selengkapnya tentang mengelola manifes, termasuk contoh penggunaan Skaffold dan Cloud Deploy dengan alat pembuatan template manifes umum, seperti Helm dan Kustomize.
Apa yang diperlukan agar Cloud Deploy berfungsi?
Untuk menggunakan pipeline pengiriman Cloud Deploy dasar, file konfigurasi skaffold.yaml
memerlukan setidaknya konfigurasi berikut:
Informasi header yang diperlukan semua konfigurasi
skaffold.yaml
:apiVersion: skaffold/v4beta7 kind: Config
Stanza
manifests
, untuk GKE, GKE Enterprise, atau Cloud Run yang mencantumkan semua manifes Kubernetes mentah (kecuali jika Anda menggunakan alat pengelolaan manifes, seperti Helm atau Kustomize).Berikut adalah contoh yang menggunakan manifes Kubernetes mentah:
manifests: rawYaml: - deployment.yaml
Jika Anda berencana menggunakan perender (seperti Helm atau Kustomize) untuk merender manifes, lihat Menambahkan dukungan Helm ke skaffold.yaml dan Menambahkan dukungan Kustomize ke skaffold.yaml untuk mendapatkan panduan tentang cara mengonfigurasi Skaffold agar dapat menggunakan alat ini.
Untuk contoh Helm dan Kustomize, lihat Mengelola manifes
Stanza
deploy
, dengandeploy.kubectl
, untuk men-deploy ke GKE atau GKE Enterprise, ataudeploy.cloudrun
untuk men-deploy ke Cloud Run.Untuk target GKE dan GKE Enterprise:
deploy: kubectl: {}
Stanza deployment men-deploy manifes aplikasi yang disediakan dalam stanza manifes.
Untuk target Cloud Run:
deploy: cloudrun: {}
Stanza deployment men-deploy manifes aplikasi yang disediakan dalam stanza manifes.
Jika Anda menggunakan target kustom, skaffold.yaml
harus memiliki header (apiVersion
dan kind:
), serta
tindakan kustom
yang akan digunakan target kustom jika jenis target kustom belum
mereferensikan
konfigurasi Skaffold jarak jauh.
Membuat file skaffold.yaml
Cloud Deploy menggunakan Skaffold untuk merender dan men-deploy aplikasi Anda.
Untuk setiap rilis, Anda harus menyediakan setidaknya file skaffold.yaml
yang
mengidentifikasi manifes yang akan digunakan. Lihat
bagian sebelumnya
untuk mendapatkan panduan tentang apa yang perlu disertakan dalam file ini.
Meminta Cloud Deploy membuat skaffold.yaml
Anda
Jika Anda tidak memiliki file skaffold.yaml
, tetapi memiliki satu manifes Kubernetes atau file definisi layanan Cloud Run, Cloud Deploy dapat membuat file skaffold.yaml
untuk Anda.
File Skaffold yang dihasilkan akan tersedia di direktori staging sumber Cloud Storage setelah rilis selesai.
Perintah berikut menyertakan flag --from-k8s-manifest
, yang meneruskan manifes Kubernetes. Cloud Deploy menggunakan informasi dalam
manifes untuk membuat skaffold.yaml
, yang kemudian digunakan untuk rilis.
gcloud deploy releases create RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --from-k8s-manifest=MANIFEST --region=REGION
Untuk membuat skaffold.yaml
dari YAML layanan Cloud Run,
gunakan perintah yang sama, tetapi dengan --from-run-manifest
, bukan
--from-k8s-manifest
Menggunakan salah satu flag ini dengan flag --skaffold-file
atau
flag --source
akan menghasilkan error.
Menggunakan file skaffold.yaml
yang dihasilkan
skaffold.yaml
yang dihasilkan cocok untuk orientasi, pembelajaran, dan
mendemonstrasikan Cloud Deploy. Setelah Anda memahami Cloud Deploy, dan untuk workload produksi, Anda mungkin menginginkan konfigurasi Skaffold yang membedakan di antara target Anda (menggunakan profil Skaffold).
Saat menggunakan file skaffold.yaml
yang dihasilkan sebagai titik awal untuk membuat
konfigurasi Skaffold yang terdiferensiasi, pastikan Anda menggunakan file dalam
arsip sumber rendering, bukan file yang dirender. Sumber rendering
tersedia untuk didownload dari tab Artefak di halaman **Detail rilis **.
skaffold.yaml
yang dihasilkan ini disertakan dalam sumber render yang disimpan di bucket Cloud Storage.Anda dapat melihat file ini dengan mendownload file
.tar.gz
dan mengekstraknya.skaffold.yaml
yang dirender tersedia di Artefak target.Di bagian Target artifacts, klik View artifacts.
Menggunakan Skaffold untuk pengembangan lokal
Salah satu keunggulan Skaffold adalah Anda dapat menggunakannya untuk pengembangan lokal, dan untuk CI/CD.
Dalam mode dev
, Skaffold akan memantau file sumber Anda, dan saat mendeteksi perubahan,
Skaffold akan mem-build ulang image, menguji ulang, dan men-deploy ulang penampung ke
cluster minikube (misalnya) di komputer lokal Anda.
Saat menggunakan Skaffold dengan cara ini, Anda dapat menggunakan perintah yang sama secara lokal seperti untuk deployment jarak jauh.
Jika menggunakan Skaffold untuk pengembangan lokal, Anda dapat menentukan profil Skaffold terpisah untuk target, dan stanza deployment default untuk pengembangan lokal.
Saat Anda menghentikan mode dev
, Skaffold akan membersihkan artefak yang di-deploy dari cluster.
Menggunakan Skaffold untuk CI/CD
Selain menggunakan Skaffold untuk build dan deployment lokal berkelanjutan, Anda dapat menggunakan Skaffold untuk CI/CD. Cloud Deploy menggunakan fitur CI/CD di Skaffold untuk merender dan menerapkan manifes serta men-deploy aplikasi ke target yang ditentukan, dengan image container yang dibuat menggunakan alat CI seperti Cloud Build dan registry image seperti Artifact Registry.
Merender, men-deploy, dan menerapkan
Skaffold memisahkan proses rendering manifes dari deployment.
Cloud Deploy memanggil skaffold render
,
untuk merender manifes, dan skaffold apply
untuk menerapkannya ke target.
Pemisahan antara render dan penerapan ini memungkinkan Anda menangkap status deklaratif lengkap aplikasi dalam konfigurasi, sehingga dapat diterapkan dengan aman dan berulang (misalnya, untuk rollback). Teknik ini juga memudahkan persetujuan. Karena manifes dirender untuk semua target sebelum peluncuran pertama, Anda dapat melihat YAML yang dirender yang akan diterapkan ke setiap target.
Cloud Deploy tidak mendukung penggunaan deployer lain untuk men-deploy aplikasi Anda. Namun, Anda dapat menggunakan alat seperti Helm atau Kustomize untuk rendering.
Untuk mempelajari lebih lanjut cara Cloud Deploy melakukan deployment menggunakan kubectl
sebagai deployment, lihat Arsitektur Layanan Cloud Deploy.
Tentang profil Skaffold
Anda dapat membuat profil
Skaffold terpisah—yang diidentifikasi di
skaffold.yaml
, dalam bait profiles:
.
Saat menggunakan profil Skaffold dengan Cloud Deploy, Anda dapat membuat
profil terpisah untuk semua, atau beberapa, target. Misalnya, profil
yang berbeda untuk dev
, staging
, dan prod
.
Profil tidak diperlukan untuk menggunakan Skaffold di Cloud Deploy,
tetapi berguna untuk menentukan penyesuaian manifes di antara target Anda, misalnya,
menggunakan file kustomization.yaml
Kustomize yang berbeda per target.
Menambahkan dukungan Kustomize ke skaffold.yaml
Anda
Mengintegrasikan konfigurasi Kustomize dengan konfigurasi Cloud Deploy/Skaffold terdiri dari hal-hal berikut:
Sertakan file
kustomization.yaml
di antara file konfigurasi Anda.Anda dapat menyimpan file konfigurasi di direktori lokal atau di bucket Cloud Storage.
Di file
skaffold.yaml
, buat stanzadeploy
untuk setiap profil.Anda juga dapat memiliki stanza
deploy
di luar profil yang ditentukan, jika Anda tidak menggunakan profil atau untuk konfigurasi deployment default yang tidak terikat dengan profil.Berikut adalah contoh konfigurasi Skaffold yang menampilkan stanza
deploy
per profil, dan menggunakan aplikasi contoh fiktif yang disebutmy-app
:apiVersion: skaffold/v4beta7 kind: Config build: artifacts: - image: my-app-web-profiles context: my-app-web-profiles - image: my-app-application-profiles context: my-app-application-profiles googleCloudBuild: projectId: ${PROJECT_ID} profiles: - name: local manifests: kustomize: paths: - my-app-application-profiles/kubernetes/local - name: test manifests: kustomize: paths: - my-app-application-profiles/kubernetes/test - name: staging manifests: kustomize: paths: - my-app-application-profiles/kubernetes/staging - name: prod manifests: kustomize: paths: - my-app-application-profiles/kubernetes/prod deploy: kubectl: {}
Konfigurasi Skaffold yang ditampilkan di sini memiliki profil terpisah untuk target
test
,staging
, danprod
. Aplikasi ini juga menampilkan profil untuk pengembangan lokal. Di setiap profil, ada stanzadeploy.kustomize
dengan jalur yang mengarah ke lokasi penyesuaian yang akan digunakan untuk target tersebut.
Menambahkan dukungan Helm ke skaffold.yaml
Anda dapat menggunakan Helm untuk merender manifes. Cloud Deploy tidak menggunakan Helm untuk men-deploy aplikasi Anda, dan hanya mendukung kubectl
sebagai deployer.
Untuk menggunakan Helm, Anda memerlukan satu atau beberapa diagram Helm, yang disimpan di lokasi mana pun yang dapat Anda referensikan dari dalam skaffold.yaml
. Lokasi ini dapat berada dalam sistem
file, repositori, mungkin bersama dengan skaffold.yaml
Anda, atau repositori
Open Container Initiative (OCI).
Untuk menggunakan diagram Helm, Anda perlu menambahkan stanza helm
ke file skaffold.yaml
.
apiVersion: skaffold/v4beta7
kind: Config
build:
artifacts:
- image: skaffold-helm-image
manifests:
helm:
releases:
- name: skaffold-helm-image
chartPath: charts
deploy:
kubectl: {}
Referensi skaffold.yaml
menunjukkan hal yang diperlukan dalam stanza helm
ini.
Fitur Skaffold yang tidak didukung
Fitur Skaffold berikut tidak dapat digunakan di Cloud Deploy:
-
Penggunaan
--module=
untuk memilih modul tertentu untukbuild
,render
,apply
, dan sebagainya, tidak didukung. Modul statis didukung. Di Helm, kemampuan untuk membuat namespace jika tidak ada.
Langkah selanjutnya
Buka situs Skaffold untuk mengetahui cara kerjanya dan manfaatnya bagi Anda.
Berlatih menggunakan Cloud Deploy dengan profil Kustomize dan Skaffold.
Pelajari cara Cloud Deploy memilih versi Skaffold yang akan digunakan, saat versi Skaffold berubah, dan cara menentukan versi yang digunakan.
Pelajari cara menggunakan profil Skaffold dengan alat pengelolaan manifes lanjutan seperti Helm, Kustomize, dan kpt.