Mulai Menggunakan Skaffold di Cloud Deploy

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, dengan deploy.kubectl, untuk men-deploy ke GKE atau GKE Enterprise, atau deploy.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.

    Halaman detail rilis, yang menampilkan artefak sumber dan target render

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:

  1. Sertakan file kustomization.yaml di antara file konfigurasi Anda.

    Anda dapat menyimpan file konfigurasi di direktori lokal atau di bucket Cloud Storage.

  2. Di file skaffold.yaml, buat stanza deploy 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 disebut my-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, dan prod. Aplikasi ini juga menampilkan profil untuk pengembangan lokal. Di setiap profil, ada stanza deploy.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:

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.