Memahami Skaffold

1. Tujuan

Skaffold adalah alat yang menangani alur kerja untuk membangun, mengirim, dan men-deploy aplikasi Anda. Anda dapat menggunakan Skaffold untuk dengan mudah mengonfigurasi ruang kerja pengembangan lokal, menyederhanakan loop pengembangan internal, 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 internal, 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

  1. Buka editor Cloud Shell dengan mengunjungi URL berikut:
https://shell.cloud.google.com

Izinkan cookie pihak ketiga. Klik "Situs tidak berfungsi" lalu "Allow Cookies".

7b702066a2135a3d.pngS

3394f82132eb4fd4.pngS

  1. Jika Anda belum melakukannya, di jendela terminal, clone sumber aplikasi dengan perintah berikut:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
  1. Ubah ke direktori repositori yang di-clone:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
  1. Tetapkan ruang kerja Cloud Shell Anda ke direktori saat ini dengan menjalankan perintah berikut:
cloudshell workspace .

Mempersiapkan project Anda

  1. Pastikan project Google Cloud Anda sudah ditetapkan dengan benar dengan menjalankan perintah berikut:
gcloud config set project {{project-id}}

3. Mulai menggunakan Skaffold

  1. 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
  1. Buka file skaffold.yaml di panel IDE. Ini adalah file konfigurasi level teratas yang menentukan pipeline Skaffold.

Perhatikan format YAML seperti Kubernetes dan bagian-bagian berikut di YAML:

  • build
  • deploy
  • profiles

Bagian ini menetapkan cara aplikasi harus dibangun dan di-deploy, serta profil untuk setiap target deployment.

Anda dapat membaca daftar lengkap stage Skaffold lebih lanjut di dokumentasi Skaffold Pipeline Stages.

4. Build

Bagian build berisi konfigurasi yang menentukan cara aplikasi harus dibangun. 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 konfigurasi ini selengkapnya di dokumentasi Build Skaffold.

5. Deploy

Bagian deploy berisi konfigurasi yang menentukan cara aplikasi harus di-deploy. Dalam kasus ini, Anda dapat melihat contoh deployment default yang mengonfigurasi Skaffold agar menggunakan alat Kustomize.

Alat Kustomize menyediakan fungsi untuk membuat manifes Kubernetes dengan menggabungkan sekumpulan file YAML komponen umum (pada direktori base) dengan satu atau beberapa "overlay" yang biasanya sesuai dengan satu atau beberapa target deployment, biasanya berupa dev, test, staging, dan production atau yang serupa.

Dalam contoh ini, Anda dapat melihat dua overlay untuk tiga target, yaitu dev, staging, dan prod. Overlay dev akan digunakan selama pengembangan lokal serta 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 adalah lingkungan yang berbeda di 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 contohnya, buka file overlays > prod > deployment.yaml. Perhatikan bahwa jumlah replika untuk aplikasi dikonfigurasi di sini menjadi tiga, yang menggantikan konfigurasi dasar.

  1. Buka file app > main.go berikut di panel IDE. Ini adalah aplikasi golang sederhana yang menulis string ke stdout setiap detik.
  2. Perhatikan bahwa aplikasi juga menghasilkan nama pod Kubernetes tempatnya berjalan.

Melihat Dockerfile

  1. Buka file app > Dockerfile di panel IDE. File ini berisi urutan perintah untuk membangun image container aplikasi bagi file main.go, dan direferensikan dalam file skaffold.yaml level teratas.

7. Mengembangkan dengan Skaffold

Mengonfigurasi lingkungan Kubernetes Anda

  1. Jalankan perintah berikut untuk memastikan cluster Kubernetes lokal Anda berjalan dan dikonfigurasi:
minikube start

Proses ini dapat 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
  1. Jalankan perintah berikut guna membuat namespace Kubernetes untuk dev, staging, dan prod:
kubectl apply -f namespaces.yaml

Anda akan melihat output berikut:

namespace/dev created
namespace/staging created
namespace/prod created

Menggunakan Skaffold untuk pengembangan lokal

  1. Jalankan perintah berikut untuk membangun 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

Perlu diperhatikan bahwa nama persis pod akan bervariasi dari output generik yang diberikan di atas.

Membuat perubahan pada aplikasi

Setelah aplikasi berjalan di cluster Kubernetes lokal, Anda dapat membuat perubahan pada kode, dan Skaffold akan otomatis membangun ulang dan men-deploy ulang aplikasi tersebut ke cluster.

  1. Buka file app > main.go di panel IDE, dan 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.

  1. Sekarang, juga pada file "app > main.go&quot; Di panel IDE, ubah barisnya:
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 setiap 10 detik sekali.

Membuat perubahan pada konfigurasi Kubernetes

Selanjutnya, Anda akan membuat perubahan pada konfigurasi Kubernetes, dan Skaffold akan otomatis di-deploy ulang sekali lagi.

  1. Buka file base > deployment.yaml di IDE dan ubah baris:
replicas: 1

hingga

replicas: 2

Setelah aplikasi di-deploy ulang, Anda akan melihat dua pod berjalan – masing-masing pod memiliki nama yang berbeda.

  1. 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 tersisa satu pod.

  1. Terakhir, tekan Ctrl-C di jendela terminal untuk menghentikan pengembangan lokal Skaffold.

Menghentikan rilis

Selanjutnya, Anda akan membuat rilis dengan membangun image rilis, dan men-deploy-nya ke cluster.

  1. Jalankan perintah berikut untuk mem-build rilis:
skaffold build --file-output artifacts.json

Perintah ini akan mem-build 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 Anda, file ini berisi informasi rilis. Artinya, artefak tidak dapat diubah pada rute ke aktif.

  1. Jalankan perintah berikut untuk melihat isi file artifacts.json:
cat artifacts.json | jq

Perhatikan bahwa file tersebut berisi referensi ke image yang akan digunakan dalam deployment akhir.

Men-deploy ke staging

  1. 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!
  1. Tekan Ctrl-C di jendela terminal untuk menghentikan output Skaffold.
  2. Jalankan perintah berikut untuk mengamati apakah aplikasi Anda 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

  1. 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!
  1. 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.

  1. Jalankan perintah berikut untuk mengamati apakah aplikasi Anda sudah aktif dan berjalan di cluster:
kubectl get all --namespace prod

Anda akan melihat output yang berisi baris seperti berikut ini 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 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

  1. Jalankan perintah berikut untuk mematikan cluster lokal:
minikube delete