Memahami Skaffold

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

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

Izinkan cookie pihak ketiga. Klik "Situs tidak berfungsi", lalu "Izinkan Cookie".

7b702066a2135a3d.png

3394f82132eb4fd4.png

  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 .

Menyiapkan project

  1. Pastikan project Google Cloud Anda 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 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.

  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 menampilkan nama pod Kubernetes tempat aplikasi berjalan.

Melihat Dockerfile

  1. Buka file app > Dockerfile di panel IDE. File ini berisi urutan perintah untuk mem-build image penampung aplikasi untuk file main.go, dan direferensikan dalam file skaffold.yaml level atas.

7. Mengembangkan dengan Skaffold

Mengonfigurasi lingkungan Kubernetes

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

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

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

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

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

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

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

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

  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 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

  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 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

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