
Setahun setengah yang lalu, pada 5 Maret 2018, Google merilis versi alpha pertama dari proyek Open Source untuk CI / CD yang disebut
Skaffold , yang tujuannya adalah untuk menciptakan "pengembangan sederhana dan dapat direproduksi untuk Kubernetes" sehingga pengembang dapat fokus secara khusus pada pengembangan, dan bukan pada administrasi. Apa yang mungkin menarik bagi Skaffold? Ternyata, ia memiliki beberapa kartu truf di lengan bajunya, berkat itu ia dapat menjadi alat yang kuat untuk pengembang, dan mungkin seorang insinyur operasi. Kami akan berkenalan dengan proyek dan kemampuannya.
NB : Ngomong-ngomong, kami sudah berbicara secara singkat tentang Skaffold dalam ikhtisar umum alat kami untuk pengembang yang kehidupannya terhubung dengan Kubernetes.Teori Tujuan dan fitur
Jadi, secara umum, Skaffold memecahkan masalah mengotomatisasi siklus CI / CD (pada tahap build, push, deploy), menawarkan umpan balik yang cepat kepada pengembang, mis. kemampuan untuk dengan cepat mendapatkan hasil dari perubahan kode selanjutnya - dalam bentuk aplikasi yang diperbarui yang berjalan di kluster Kubernetes. Dan itu dapat bekerja dalam kontur yang berbeda (dev, panggung, produksi ...), yang Skaffold membantu untuk menggambarkan saluran pipa yang tepat untuk peluncuran.
Kode sumber untuk Skaffold ditulis dalam Go, dan didistribusikan di bawah Lisensi Apache 2.0 gratis (
GitHub ).
Pertimbangkan fungsi dan fitur utama. Yang pertama termasuk yang berikut:
- Skaffold menawarkan alat untuk membuat pipa CI / CD.
- Memungkinkan Anda untuk memantau perubahan kode sumber di latar belakang dan memulai proses otomatis kode bangunan ke dalam gambar wadah, menerbitkan gambar-gambar ini ke Docker Registry dan menyebarkannya ke kluster Kubernetes.
- Menyinkronkan file dalam repositori dengan direktori yang berfungsi dalam wadah.
- Tes secara otomatis menggunakan uji struktur wadah.
- Port ke depan.
- Membaca log aplikasi yang berjalan dalam wadah.
- Membantu dalam men-debug aplikasi yang ditulis dalam Java, Node.js, Python, Go.
Sekarang tentang fitur:
- Skaffold sendiri tidak memiliki komponen sisi-kluster . Artinya, Anda tidak perlu mengkonfigurasi Kubernetes tambahan untuk menggunakan utilitas ini.
- Jalur pipa yang berbeda untuk aplikasi Anda . Perlu meluncurkan kode di Minikube lokal saat Anda mengembangkan, dan kemudian di atas panggung atau produksi? Untuk melakukan ini, profil dan konfigurasi pengguna, variabel lingkungan dan flag disediakan, yang memungkinkan Anda untuk menggambarkan saluran pipa yang berbeda untuk satu aplikasi.
- CLI Hanya utilitas konsol dan konfigurasi di YAML. Pada jaringan Anda dapat menemukan referensi ke upaya untuk membuat GUI eksperimental , tetapi saat ini mungkin hanya berarti bahwa seseorang membutuhkannya, tetapi tidak juga.
- Modularitas . Skaffold bukan kombinasi independen, tetapi berupaya menggunakan modul terpisah atau solusi yang ada untuk tugas tertentu.
Ilustrasi yang terakhir:
- Pada tahap perakitan, Anda dapat menggunakan:
- buruh pelabuhan membangun secara lokal, dalam sebuah cluster menggunakan kaniko atau di Google Cloud Build;
- Bazel secara lokal;
- Jib Maven dan Jib Gradle secara lokal atau di Google Cloud Build;
- skrip build kustom dijalankan secara lokal. Jika Anda perlu menjalankan solusi lain (lebih fleksibel / familiar / ...) untuk perakitan, dijelaskan dalam skrip sehingga Skaffold menjalankannya ( contoh dari dokumentasi ). Ini memungkinkan Anda untuk menggunakan kolektor apa pun yang dapat dipanggil menggunakan skrip;
- Pada tahap pengujian, uji struktur wadah yang telah disebutkan didukung;
- Untuk penyebaran disediakan:
- Kubectl;
- Helm;
- menyesuaikan
Berkat ini, Skaffold dapat disebut semacam
kerangka kerja untuk membangun CI / CD . Berikut adalah contoh alur kerja saat menggunakannya (dari dokumentasi proyek):

Seperti apa pekerjaan Skaffold secara umum?
- Utilitas memonitor perubahan dalam direktori sumber. Jika modifikasi dibuat untuk file, mereka disinkronkan dengan pod aplikasi di kluster Kubernetes. Jika memungkinkan, tanpa memasang kembali gambar. Kalau tidak, gambar baru akan.
- Gambar yang dikumpulkan diperiksa menggunakan uji struktur wadah, ditandai dan dikirim ke Docker Registry.
- Setelah itu, gambar dikerahkan - ditempatkan di cluster Kubernetes.
- Jika peluncuran diinisialisasi menggunakan perintah
skaffold dev
, maka kami mulai menerima log dari aplikasi, dan Skaffold mengharapkan perubahan untuk mengulangi semua langkah lagi.
Ilustrasi tonggak perancahBerlatih. Mencoba Skaffold
Untuk mendemonstrasikan penggunaan Skaffold, saya akan mengambil contoh dari
repositori GitHub proyek . Ngomong-ngomong, di
sana Anda dapat menemukan banyak contoh lain yang mempertimbangkan berbagai spesifik. Semua tindakan akan dilakukan secara lokal di Minikube. Instalasi sederhana dan membutuhkan beberapa menit, dan kubectl diperlukan untuk memulai.
Pasang Skaffold:
curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 chmod +x skaffold sudo mv skaffold /usr/local/bin skaffold version v0.37.1
Mari kita tiru repositori Skaffold dengan contoh-contoh yang diperlukan:
git clone https://github.com/GoogleContainerTools/skaffold cd skaffold/examples/microservices
Saya memilih contoh dengan dua pod, yang masing-masing berisi satu aplikasi kecil di Go. Satu aplikasi adalah frontend (leeroy-web), permintaan pengalihan ke aplikasi kedua adalah backend (leeroy-app). Mari kita lihat tampilannya:
~/skaffold/examples/microservices
leeroy-app dan leeroy-web mengandung kode Go dan Dockerfiles sederhana untuk membuat kode ini secara lokal:
~/skaffold/examples/microservices
Saya tidak akan memberikan kode aplikasi - cukup untuk mengetahui bahwa
leeroy-web
menerima permintaan dan
leeroy-app
dengan
leeroy-app
. Oleh karena itu, dalam file
Deployment.yaml
ada Layanan hanya untuk
app
(untuk routing internal). Port
web
pod akan dilemparkan kepada kami untuk akses cepat ke aplikasi.
Seperti apa
skaffold.yaml
:
~/skaffold/examples/microservices # cat skaffold.yaml apiVersion: skaffold/v1beta13 kind: Config build: artifacts: - image: leeroy-web context: ./leeroy-web/ - image: leeroy-app context: ./leeroy-app/ deploy: kubectl: manifests: - ./leeroy-web/kubernetes/* - ./leeroy-app/kubernetes/* portForward: - resourceType: deployment resourceName: leeroy-web port: 8080 localPort: 9000
Semua langkah yang disebutkan di atas dijelaskan di sini. Selain konfigurasi ini, ada juga file dengan pengaturan global -
~/.skaffold/config
. Itu dapat diedit secara manual atau melalui CLI - misalnya, seperti ini:
skaffold config set --global local-cluster true
Perintah ini menetapkan variabel global
local-cluster
menjadi
true
, setelah itu Skaffold tidak akan berusaha 'mendorong' gambar ke dalam registri jauh. Jika Anda mengembangkan secara lokal, Anda dapat menggunakan perintah ini untuk menambahkan gambar secara lokal juga.
Kembali ke
skaffold.yaml
:
- Pada tahap
build
, kami menunjukkan bahwa Anda perlu mengumpulkan dan menyimpan gambar secara lokal. Setelah perakitan dimulai untuk pertama kalinya, kita akan melihat yang berikut:
// .. Minikube , // ,
Seperti yang Anda lihat, Skaffold menguji gambar secara independen. Omong-omong, beberapa kebijakan pemberian tag didukung. - Berikut ini ditentukan dalam
context: ./leeroy-app/
konfigurasi context: ./leeroy-app/
, yaitu Konteks di mana gambar dirakit ditentukan. - Pada tahap penyebaran, ditentukan bahwa kami akan menggunakan kubectl dan masker untuk manifesto yang diinginkan.
PortForward
: mirip dengan bagaimana kita biasanya meneruskan port menggunakan kubectl port-forward
, kami memberikan instruksi Skaffold untuk memanggil perintah ini. Dalam hal ini, port lokal 9000 diteruskan ke 8080 dalam Penerapan dengan nama leeroy-web
.
Saatnya untuk memulai
skaffold dev
: tim akan membuat "lingkaran umpan balik" yang sedang berlangsung, mis. tidak hanya mengumpulkan semua dan menginstal dalam sebuah cluster, tetapi juga menceritakan tentang status pod saat ini, akan memantau perubahan dan memperbarui status pod.
Berikut ini adalah hasil dari menjalankan
skaffold dev --port-forward
ketika memasang kembali:

Pertama, jelas bahwa cache sedang digunakan. Berikutnya - aplikasi dirakit, digunakan, port diteruskan. Karena
--port-forward
ditentukan, Skaffold meneruskan port ke
web
, seperti yang diminta, tetapi ia meneruskan
app
dengan kebijakannya sendiri (pilih yang gratisan terdekat). Setelah itu, kami mendapatkan log pertama dari aplikasi.
Periksa kinerja?
~/skaffold/examples/microservices
Ubah file
leeroy-app/app.go
- dibutuhkan beberapa detik ... dan:
~/skaffold/examples/microservices
Pada saat yang sama, Skaffold sendiri membawa ke konsol hal yang sama seperti sebelumnya, dengan pengecualian satu poin: itu hanya
leeroy-app
, dan tidak semuanya sekaligus.
Lebih banyak latihan
Perlu disebutkan bahwa saat membuat proyek baru, konfigurasi untuk Skaffold dapat menjadi bootstrap menggunakan perintah
init
, yang sangat nyaman. Selain itu, Anda dapat menulis beberapa konfigurasi: kembangkan pada konfigurasi default, dan kemudian
run
ke atas panggung dengan
run
perintah (proses yang sama seperti
dev
, tidak mengikuti perubahan), menggunakan konfigurasi yang berbeda.
Katacoda memiliki
tutorial dengan contoh yang lebih sederhana. Tetapi ia menawarkan kotak pasir siap pakai dengan Kubernetes, aplikasi dan Skaffold. Pilihan yang bagus jika Anda tertarik untuk mencoba sendiri dasar-dasarnya.
Salah satu use case yang mungkin untuk Skaffold adalah melakukan pengembangan pada cluster jarak jauh. Tidak semua orang merasa nyaman menjalankan Minikube pada perangkat keras mereka sendiri, dan kemudian meluncurkan aplikasi dan menunggu berfungsi dengan baik ... Dalam hal ini, Skaffold menyelesaikan tugas dengan sempurna, yang, misalnya, insinyur Reddit dapat konfirmasi, seperti yang telah kami
tulis di blog kami.
Dan dalam
publikasi ini dari Weaveworks Anda dapat menemukan contoh membuat pipa untuk produksi.
Kesimpulan
Skaffold adalah alat yang mudah digunakan untuk membangun jaringan pipa yang melibatkan peluncuran aplikasi ke Kubernet dan terutama berfokus pada kebutuhan pengembangan. Dengan itu, cukup mudah untuk membuat pipa "pendek" yang memperhitungkan kebutuhan dasar pengembang, namun, jika Anda mau, Anda dapat mengatur proses yang lebih besar. Salah satu contoh ilustratif menggunakan Skaffold dalam proses CI / CD
adalah proyek uji 10 layanan mikro yang menggunakan kemampuan Kubernetes, gRPC, Istio dan OpenCensus Tracing.
Skaffold telah menerima hampir 8000+ bintang di GitHub, sedang dikembangkan oleh Google dan merupakan bagian dari
GoogleContainerTools - secara umum, saat ini ada alasan untuk percaya bahwa proyek ini akan berkembang dengan bahagia selamanya.
PS
Baca juga di blog kami: