1. Tujuan
Skaffold adalah alat yang menangani alur kerja untuk membangun, mengirim, dan men-deploy aplikasi Anda. Anda dapat menggunakan Skaffold untuk mengonfigurasi ruang kerja pengembangan lokal dengan mudah, menyederhanakan loop pengembangan dalam, dan berintegrasi dengan alat lain seperti Kustomize dan Helm untuk membantu mengelola manifes Kubernetes Anda.
Dalam tutorial ini, Anda akan mempelajari beberapa konsep inti Skaffold, menggunakannya untuk mengotomatiskan loop pengembangan dalam, lalu men-deploy aplikasi.
Anda akan:
- Mengonfigurasi dan mengaktifkan Skaffold untuk pengembangan lokal
- Membangun dan menjalankan aplikasi golang sederhana
- Mengelola deployment aplikasi lokal dengan Skaffold
- Merender manifes dan men-deploy aplikasi Anda
2. Sebelum memulai
Menyiapkan ruang kerja Anda
- Buka editor Cloud Shell dengan membuka URL berikut:
https://shell.cloud.google.com
Izinkan cookie pihak ketiga. Klik "Situs tidak berfungsi", lalu "Izinkan Cookie".


- Jika Anda belum melakukannya, di jendela terminal, clone sumber aplikasi dengan perintah berikut:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
- Ubah ke direktori repositori yang di-clone:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
- Tetapkan ruang kerja Cloud Shell Anda ke direktori saat ini dengan menjalankan perintah berikut:
cloudshell workspace .
Menyiapkan project
- Pastikan project Google Cloud Anda disetel dengan benar dengan menjalankan perintah berikut:
gcloud config set project {{project-id}}
3. Mulai menggunakan Skaffold
- Jalankan perintah berikut untuk membuat file konfigurasi Skaffold tingkat teratas,
skaffold.yaml:
cat <<EOF > skaffold.yaml
apiVersion: skaffold/v2beta21
kind: Config
metadata:
name: getting-started-kustomize
build:
tagPolicy:
gitCommit:
ignoreChanges: true
artifacts:
- image: skaffold-kustomize
context: app
docker:
dockerfile: Dockerfile
deploy:
kustomize:
paths:
- overlays/dev
profiles:
- name: staging
deploy:
kustomize:
paths:
- overlays/staging
- name: prod
deploy:
kustomize:
paths:
- overlays/prod
EOF
- Buka file
skaffold.yamldi panel IDE. Ini adalah file konfigurasi tingkat teratas yang menentukan pipeline Skaffold.
Perhatikan format YAML seperti Kubernetes dan bagian berikut dalam YAML:
builddeployprofiles
Bagian ini menentukan cara aplikasi harus dibuat dan di-deploy, serta profil untuk setiap target deployment.
Anda dapat membaca selengkapnya tentang daftar lengkap tahap Skaffold di dokumentasi Tahap Pipeline Skaffold.
4. Build
Bagian build berisi konfigurasi yang menentukan cara aplikasi harus dibangun. Dalam hal ini, Anda dapat melihat konfigurasi tentang cara menangani tag git, serta bagian artifacts yang menentukan image container yang membentuk aplikasi.
Selain itu, di bagian ini Anda dapat melihat referensi ke Dockerfile yang akan digunakan untuk membuat gambar. Selain itu, Skaffold mendukung alat build lainnya seperti Jib, Maven, Gradle, Buildpacks cloud-native, Bazel, dan skrip kustom. Anda dapat membaca lebih lanjut konfigurasi ini di dokumentasi Build Skaffold.
5. Deploy
Bagian deploy berisi konfigurasi yang menentukan cara aplikasi harus di-deploy. Dalam hal ini, Anda dapat melihat contoh deployment default yang mengonfigurasi Skaffold untuk menggunakan alat Kustomize.
Alat Kustomize menyediakan fungsi untuk membuat manifes Kubernetes dengan menggabungkan serangkaian file YAML komponen umum (di direktori base) dengan satu atau beberapa "overlay" yang biasanya sesuai dengan satu atau beberapa target deployment – biasanya dev, test, staging, dan production atau yang serupa.
Dalam contoh ini, Anda dapat melihat dua overlay untuk tiga target, dev, staging, dan prod. Overlay dev akan digunakan selama pengembangan lokal, sedangkan overlay staging dan prod akan digunakan saat men-deploy menggunakan Skaffold.
6. Profil
Bagian profiles berisi konfigurasi yang menentukan konfigurasi build, pengujian, dan deployment untuk konteks yang berbeda. Konteks yang berbeda biasanya merupakan lingkungan yang berbeda dalam pipeline deployment aplikasi Anda, seperti staging atau prod dalam contoh ini. Artinya, Anda dapat dengan mudah mengelola manifes yang isinya perlu berbeda untuk lingkungan target yang berbeda, tanpa mengulangi konfigurasi boilerplate.
Konfigurasi di bagian profiles dapat menggantikan atau memperbaiki item apa pun dari konfigurasi utama (yaitu bagian build, test, atau deploy, misalnya).
Sebagai contoh, buka file overlays > prod > deployment.yaml. Perhatikan bahwa jumlah replika untuk aplikasi dikonfigurasi di sini menjadi tiga, menggantikan konfigurasi dasar.
Menjelajahi kode sumber aplikasi.
- Buka file
app > main.goberikut di panel IDE. Ini adalah aplikasi golang sederhana yang menulis string kestdoutsetiap detik. - Perhatikan bahwa aplikasi juga menampilkan nama pod Kubernetes tempat aplikasi berjalan.
Melihat Dockerfile
- Buka file
app > Dockerfiledi panel IDE. File ini berisi urutan direktif untuk mem-build image container aplikasi untuk filemain.go, dan dirujuk dalam fileskaffold.yamltingkat teratas.
7. Mengembangkan dengan Skaffold
Mengonfigurasi lingkungan Kubernetes
- Jalankan perintah berikut untuk memastikan cluster Kubernetes lokal Anda berjalan dan dikonfigurasi:
minikube start
Proses ini mungkin memerlukan waktu beberapa menit. Anda akan melihat output berikut jika cluster telah berhasil dimulai:
Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
- Jalankan perintah berikut untuk membuat namespace Kubernetes untuk
dev,staging, danprod:
kubectl apply -f namespaces.yaml
Anda akan melihat output berikut:
namespace/dev created namespace/staging created namespace/prod created
Menggunakan Skaffold untuk pengembangan lokal
- Jalankan perintah berikut untuk mem-build aplikasi dan men-deploy-nya ke cluster Kubernetes lokal yang berjalan di Cloud Shell:
skaffold dev
Anda akan melihat proses build container aplikasi berjalan, yang mungkin memerlukan waktu satu menit, lalu output aplikasi berulang setiap detik:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-dev-xxxxxxxxx-xxxxx
Perhatikan bahwa nama pod yang tepat akan berbeda dari output generik yang diberikan di atas.
Membuat perubahan pada aplikasi
Setelah aplikasi berjalan di cluster Kubernetes lokal, Anda dapat melakukan perubahan pada kode, dan Skaffold akan otomatis membangun ulang dan men-deploy ulang aplikasi ke cluster.
- Buka file
app > main.godi panel IDE, lalu ubah string output:
"Hello world from pod %s!\n"
menjadi:
"Hello Skaffold world from pod %s!\n"
Setelah melakukan perubahan, Anda akan melihat Skaffold membangun ulang image dan men-deploy ulang ke cluster, dengan perubahan pada output yang terlihat di jendela terminal.
- Sekarang, juga di file "app > main.go" di panel IDE, ubah baris:
time.Sleep(time.Second * 1)
hingga
time.Sleep(time.Second * 10)
Sekali lagi, Anda akan melihat aplikasi dibangun ulang dan di-deploy ulang, dengan baris output muncul sekali setiap 10 detik.
Membuat perubahan pada konfigurasi Kubernetes
Selanjutnya, Anda akan membuat perubahan pada konfigurasi Kubernetes, dan sekali lagi Skaffold akan otomatis men-deploy ulang.
- Buka file
base > deployment.yamldi IDE dan ubah baris:
replicas: 1
hingga
replicas: 2
Setelah aplikasi di-deploy ulang, Anda akan melihat dua pod berjalan, masing-masing akan memiliki nama yang berbeda.
- Sekarang, ubah baris yang sama dalam file
base > deployment.yamlkembali menjadi:
replicas: 1
Anda akan melihat salah satu pod dihapus dari layanan sehingga hanya ada satu pod yang tersisa.
- Terakhir, tekan
Ctrl-Cdi jendela terminal untuk menghentikan pengembangan lokal Skaffold.
Memotong rilis
Selanjutnya, Anda akan membuat rilis dengan membangun image rilis, dan men-deploy-nya ke cluster.
- Jalankan perintah berikut untuk membangun rilis:
skaffold build --file-output artifacts.json
Perintah ini akan membuat image akhir (jika perlu) dan menampilkan detail rilis ke file artifacts.json.
Jika Anda ingin menggunakan alat seperti Cloud Deploy untuk men-deploy ke cluster, file ini berisi informasi rilis. Artinya, artefak tidak dapat diubah di jalur menuju penayangan live.
- Jalankan perintah berikut untuk melihat isi file
artifacts.json:
cat artifacts.json | jq
Perhatikan bahwa file tersebut berisi referensi ke gambar yang akan digunakan dalam deployment akhir.
Men-deploy ke staging
- Jalankan perintah berikut untuk men-deploy rilis menggunakan profil
staging:
skaffold deploy --profile staging --build-artifacts artifacts.json --tail
Setelah deployment selesai, Anda akan melihat output dari dua pod yang mirip dengan berikut ini:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
- Tekan Ctrl-C di jendela terminal untuk menghentikan output Skaffold.
- Jalankan perintah berikut untuk mengamati aplikasi Anda yang sudah aktif dan berjalan di cluster:
kubectl get all --namespace staging
Anda akan melihat dua nama pod yang berbeda, karena profil staging untuk aplikasi menentukan bahwa harus ada dua replika dalam deployment.
Men-deploy ke produksi
- Sekarang jalankan perintah berikut untuk men-deploy rilis menggunakan profil
prod:
skaffold deploy --profile prod --build-artifacts artifacts.json --tail
Setelah deployment selesai, Anda akan melihat output dari tiga pod yang mirip dengan berikut ini:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
- Tekan Ctrl-C di jendela terminal untuk menghentikan output Skaffold.
Anda akan melihat tiga nama pod yang berbeda, karena profil prod untuk aplikasi menentukan bahwa harus ada tiga replika dalam deployment.
- Jalankan perintah berikut untuk mengamati aplikasi Anda yang sudah aktif dan berjalan di cluster:
kubectl get all --namespace prod
Anda akan melihat output yang berisi baris yang mirip dengan berikut yang menunjukkan deployment prod:
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/skaffold-kustomize-prod 3/3 3 3 16m
Anda juga akan melihat tiga pod aplikasi berjalan.
NAME READY STATUS RESTARTS AGE pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m
8. Selamat!
Selamat! Anda telah menyelesaikan lab Understanding Skaffold dan telah mempelajari cara mengonfigurasi dan menggunakan Skaffold untuk pengembangan lokal dan deployment aplikasi.
Langkah berikutnya:
Lanjutkan mempelajari Skaffold lebih lanjut:
Pembersihan
- Jalankan perintah berikut untuk mematikan cluster lokal:
minikube delete