1. Tujuan
Skaffold adalah alat yang menangani alur kerja untuk mem-build, mengirim, dan men-deploy aplikasi Anda. Anda dapat menggunakan Skaffold untuk mengonfigurasi ruang kerja pengembangan lokal dengan mudah, menyederhanakan loop pengembangan internal, dan berintegrasi dengan alat lain seperti Kustomize dan Helm untuk membantu mengelola manifes Kubernetes.
Dalam tutorial ini, Anda akan mempelajari beberapa konsep inti Skaffold, menggunakannya untuk mengotomatiskan loop pengembangan internal, lalu men-deploy aplikasi.
Anda akan:
- Mengonfigurasi dan mengaktifkan Skaffold untuk pengembangan lokal
- Mem-build dan menjalankan aplikasi golang sederhana
- Mengelola deployment aplikasi lokal dengan Skaffold
- Merender manifes dan men-deploy aplikasi
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 ditetapkan 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.yaml
di panel IDE. Ini adalah file konfigurasi tingkat teratas yang menentukan pipeline Skaffold.
Perhatikan format YAML seperti Kubernetes dan bagian berikut dalam YAML:
build
deploy
profiles
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 di-build. Dalam hal ini, Anda dapat melihat konfigurasi tentang cara penanganan tag git
, serta bagian artifacts
yang menentukan image container, yang menyusun aplikasi.
Selain itu, di bagian ini Anda dapat melihat referensi ke Dockerfile
yang akan digunakan untuk membuat gambar. Skaffold juga mendukung alat build lainnya seperti Jib
, Maven
, Gradle
, Buildpacks
, Bazel
, dan skrip kustom berbasis Cloud. Anda dapat membaca selengkapnya tentang konfigurasi ini di dokumentasi Build Skaffold.
5. Deploy
Bagian deploy
berisi konfigurasi yang menentukan cara aplikasi 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 sekumpulan 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 dan overlay staging dan prod untuk saat men-deploy menggunakan Skaffold.
6. Profil
Bagian profiles
berisi konfigurasi yang menentukan konfigurasi build, pengujian, dan deployment untuk berbagai konteks. 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 kontennya harus berbeda untuk lingkungan target yang berbeda, tanpa mengulangi konfigurasi boilerplate.
Konfigurasi di bagian profiles
dapat mengganti atau mem-patch item apa pun dari konfigurasi utama (misalnya, bagian build
, test
, atau deploy
).
Sebagai contoh, buka file overlays > prod > deployment.yaml
. Perhatikan bahwa jumlah replika untuk aplikasi dikonfigurasi di sini menjadi tiga, yang menggantikan konfigurasi dasar.
Membuka kode sumber aplikasi.
- Buka file
app > main.go
berikut di panel IDE. Ini adalah aplikasi golang sederhana yang menulis string kestdout
setiap detik. - Perhatikan bahwa aplikasi juga menampilkan nama pod Kubernetes tempat aplikasi berjalan.
Melihat Dockerfile
- Buka file
app > Dockerfile
di panel IDE. File ini berisi urutan perintah untuk mem-build image penampung aplikasi untuk filemain.go
, dan direferensikan dalam fileskaffold.yaml
level atas.
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 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-deploynya ke cluster Kubernetes lokal yang berjalan di Cloud Shell:
skaffold dev
Anda akan melihat proses build penampung 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 umum 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 mem-build ulang dan men-deploy ulang aplikasi ke cluster.
- Buka file
app > main.go
di 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-nya ulang ke cluster, dengan perubahan output 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 di-build ulang dan di-deploy ulang, dengan baris output muncul setiap 10 detik.
Melakukan 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.yaml
di IDE dan ubah barisnya:
replicas: 1
hingga
replicas: 2
Setelah aplikasi di-deploy ulang, Anda akan melihat dua pod yang berjalan – masing-masing pod memiliki nama yang berbeda.
- Sekarang, ubah baris yang sama di file
base > deployment.yaml
kembali ke:
replicas: 1
Anda akan melihat salah satu pod dihapus dari layanan sehingga hanya ada satu pod yang tersisa.
- Terakhir, tekan
Ctrl-C
di jendela terminal untuk menghentikan pengembangan lokal Skaffold.
Memotong rilis
Selanjutnya, Anda akan membuat rilis dengan mem-build image rilis, dan men-deploynya ke cluster.
- Jalankan perintah berikut untuk mem-build rilis:
skaffold build --file-output artifacts.json
Perintah ini akan mem-build image akhir (jika diperlukan) 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 pada rute ke aktif.
- Jalankan perintah berikut untuk melihat konten file
artifacts.json
:
cat artifacts.json | jq
Perhatikan bahwa file 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 ini yang menampilkan deployment produksi:
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/skaffold-kustomize-prod 3/3 3 3 16m
Anda juga akan melihat tiga pod aplikasi yang 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 serta menggunakan Skaffold untuk pengembangan lokal dan deployment aplikasi.
Langkah berikutnya:
Lanjutkan mempelajari Skaffold lebih lanjut:
Pembersihan
- Jalankan perintah berikut untuk menonaktifkan cluster lokal:
minikube delete