Mulai Menggunakan Skaffold di Cloud Deploy

Dokumen ini menjelaskan cara mulai menggunakan Skaffold sebagai bagian dari Cloud Deploy, termasuk:

  • Mengonfigurasi Skaffold untuk digunakan dengan pipeline pengiriman Cloud Deploy
  • Menggunakan Skaffold dan Cloud Deploy dengan alat rendering pihak ketiga, seperti Helm dan Kustomize
  • Secara opsional, menggunakan Skaffold untuk pengembangan lokal
  • Secara opsional, menggunakan Skaffold untuk continuous integration dan deployment berkelanjutan (CI/CD)

Mengapa Skaffold?

Ingin tahu alasan Cloud Deploy menggunakan Skaffold, dan mengapa Anda perlu mengelola konfigurasi Skaffold? Lanjutkan membaca.

Saya berpengalaman dengan CI/CD, tetapi saat ini saya tidak menggunakan Skaffold

Skaffold adalah alat command line open source untuk meningkatkan produktivitas bagi developer. Produk ini mengorkestrasi 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 memanggil Skaffold untuk merender manifes Anda. Pada waktu deployment, Cloud Deploy 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, gambar akan dibangun, diuji, dan di-deploy ke cluster (atau Minikube) saat Anda mengubah kode. Ekstensi Cloud Code for VS Code dan Cloud Code for IntelliJ mengintegrasikan Skaffold ke dalam Visual Studio Code dan IDE JetBrains, untuk pengembangan berkelanjutan.

Skaffold untuk continuous delivery

Anda juga dapat menggunakan Skaffold untuk continuous delivery, dengan langkah build, deploy, render, dan terapkan. Cloud Deploy menggunakan kemampuan render dan penerapan Skaffold. Untuk menggunakan Cloud Deploy, Anda memerlukan setidaknya file konfigurasi skaffold.yaml yang valid.

Melalui Skaffold, Anda juga dapat melakukan integrasi dengan alat pengelolaan-manifes pihak ketiga, seperti Helm, dan Kustomize. Penggunaan Skaffold dengan cara ini memungkinkan Anda menggunakan fitur-fitur alat tersebut untuk merender manifes. kubectl tetap menjadi deployer untuk manifes ini.

Saya baru dalam men-deploy ke Kubernetes

Dengan Skaffold, Anda dapat mengonfigurasi kumpulan dasar manifes untuk semua deployment. Selanjutnya Anda dapat menggunakan mesin rendering Skaffold, melalui Cloud Deploy, untuk merender, kemudian 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 pembuat template manifes yang umum, seperti Helm dan Kustomize.

Apa saja 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 oleh 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 ini contoh penggunaan 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 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 deploy men-deploy manifes aplikasi yang disediakan dalam stanza manifes.

    Untuk target Cloud Run:

    deploy:
      cloudrun: {}
    

    Stanza deploy 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 minimal file skaffold.yaml yang mengidentifikasi manifes yang akan digunakan. Lihat bagian sebelumnya untuk panduan tentang hal-hal yang perlu disertakan dalam file ini.

Minta Cloud Deploy membuat skaffold.yaml Anda

Jika 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, dengan 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

Penggunaan salah satu tanda ini dengan tanda --skaffold-file atau tanda --source akan menghasilkan error.

Menggunakan file skaffold.yaml yang dihasilkan

skaffold.yaml yang dihasilkan cocok untuk orientasi, pembelajaran, dan demonstrasi Cloud Deploy. Setelah memahami Cloud Deploy, dan untuk workload produksi, Anda mungkin menginginkan konfigurasi Skaffold yang dapat membedakan berbagai target Anda (menggunakan profil Skaffold).

Saat menggunakan file skaffold.yaml yang dihasilkan sebagai titik awal untuk membuat konfigurasi Skaffold yang berbeda, pastikan Anda menggunakan file dalam arsip sumber rendering, bukan file yang dirender. Sumber rendering tersedia untuk didownload dari tab Artefak pada 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 artefak, klik View artefak.

    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 mengamati file sumber Anda, lalu saat mendeteksi perubahan, Skaffold akan membuat ulang image, menguji ulang, dan men-deploy ulang container ke cluster minikube (misalnya) di komputer lokal Anda.

Jika 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 deploy 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 Anda ke target yang ditentukan, berdasarkan image container yang dibuat menggunakan alat CI seperti Cloud Build dan registry image seperti Artifact Registry.

Render, deploy, dan terapkan

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 merekam status deklaratif lengkap aplikasi dalam konfigurasi, sehingga dapat diterapkan dengan aman dan berulang (misalnya, untuk rollback). Teknik ini juga membuat persetujuan lebih mudah. 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 men-deploy menggunakan kubectl sebagai deployer, lihat arsitektur Layanan Cloud Deploy.

Tentang profil Skaffold

Anda dapat membuat profil Skaffold terpisah—yang diidentifikasi di skaffold.yaml, dalam stanza profiles:.

Saat menggunakan profil Skaffold dengan Cloud Deploy, Anda dapat membuat profil terpisah untuk semua atau beberapa target Anda. 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.

Tambahkan dukungan Kustomize ke skaffold.yaml Anda

Pengintegrasian konfigurasi Kustomize dengan konfigurasi Cloud Deploy/Skaffold terdiri dari:

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

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

  2. Dalam file skaffold.yaml Anda, 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. Bagian ini juga menunjukkan profil untuk pengembangan lokal. Di setiap profil, ada stanza deploy.kustomize dengan jalur yang mengarah ke lokasi kustomisasi 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 diagram atau diagram Helm, yang disimpan di lokasi mana pun yang dapat Anda referensikan dari dalam skaffold.yaml. Lokasi ini dapat berada di sistem file, repositori, mungkin bersama dengan skaffold.yaml Anda, atau repositori Open Container Initiative (OCI).

Untuk menggunakan diagram Helm, tambahkan 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 apa saja yang diperlukan dalam stanza helm ini.

Fitur Skaffold yang tidak didukung

Fitur Skaffold berikut tidak dapat digunakan di Cloud Deploy:

Langkah selanjutnya

  • Kunjungi situs Skaffold untuk mengetahui cara kerjanya dan apa yang dapat dilakukannya untuk Anda.

  • Berlatih menggunakan Cloud Deploy dengan profil Kustomize dan Skaffold.

  • Pelajari cara Cloud Deploy memilih versi Skaffold yang akan digunakan, kapan versi Skaffold berubah, dan cara menentukan versi yang digunakan.

  • Pelajari cara menggunakan profil Skaffold dengan alat pengelolaan manifes lanjutan seperti Helm, Kustomize, dan kpt.