Review Skaffold kanggo pangembangan Kubernetes

Review Skaffold kanggo pangembangan Kubernetes

Setaun setengah kepungkur, tanggal 5 Maret 2018, Google ngrilis versi alpha pisanan proyek Open Source kanggo CI/CD sing diarani Skaffold, sing tujuane nggawe "pembangunan Kubernetes sing prasaja lan bisa diulang" supaya pangembang bisa fokus ing pembangunan tinimbang administrasi. Apa sing menarik babagan Skaffold? Ternyata, ana sawetara trik sing bisa dadi alat sing kuat kanggo pangembang, lan bisa uga insinyur operasi. Ayo dadi kenalan karo proyek lan kemampuane.

NB: Miturut cara, kita wis ngomong sedhela babagan Skaffold ing umum kita review alat pangembang, sing uripe disambungake karo Kubernetes.

Teori. Tujuan lan kabisan

Dadi, umume, Skaffold ngrampungake masalah ngotomatisasi siklus CI / CD (ing tahap mbangun, push, nyebarke), nawakake umpan balik cepet pangembang, yaiku. kemampuan kanggo cepet nampa asil saka owah-owahan kode sakteruse - ing wangun aplikasi dianyari mlaku ing kluster Kubernetes. Lan bisa digunakake ing sirkuit beda (dev, tataran, produksi ...), kang Skaffold mbantu kanggo njlèntrèhaké pipelines cocog kanggo rollout.

Kode sumber Skaffold ditulis ing Go, disebarake dening ing Lisensi Apache gratis 2.0 (GitHub).

Ayo katon ing fungsi utama lan fitur. Kapisan kalebu ing ngisor iki:

  • Skaffold nawakake alat kanggo nggawe pipa CI / CD.
  • Ngidini sampeyan ngawasi owah-owahan ing kode sumber ing latar mburi lan mbukak proses otomatis ngrakit kode menyang gambar wadhah, nerbitaké gambar iki ing Docker Registry lan nyebarke menyang cluster Kubernetes.
  • Nyelarasake file ing gudang karo direktori kerja ing wadhah.
  • Tes kanthi otomatis nggunakake kontainer-struktur-test.
  • Port forwards.
  • Maca log aplikasi sing mlaku ing wadhah.
  • Mbantu ing debugging aplikasi ditulis ing Jawa, Node.js, Python, Go.

Saiki babagan fitur:

  • Skaffold dhewe ora duwe komponen sisih cluster. Tegese, ora perlu ngonfigurasi Kubernetes kanggo nggunakake sarana iki.
  • Pipa sing beda kanggo aplikasi sampeyan. Apa sampeyan kudu nggulung kode kasebut menyang Minikube lokal nalika sampeyan ngembangake, banjur menyang panggung utawa produksi? Kanggo maksud iki ana profil lan konfigurasi pangguna, variabel lingkungan lan panji, sing ngijini sampeyan kanggo njlèntrèhaké pipelines beda kanggo siji aplikasi.
  • CLI. Mung sarana console lan konfigurasi ing YAML. Ing Internet sampeyan bisa nemokake referensi kanggo nyoba kanggo nggawe GUI eksperimental, Nanging, ing wayahe iki paling kamungkinan mung tegese wong perlu wong, nanging ora tenan.
  • Modularitas. Skaffold dudu pemanen mandiri, nanging ngupayakake nggunakake modul individu utawa solusi sing wis ana kanggo tugas tartamtu.

Ilustrasi pungkasan:

  • Ing tahap perakitan sampeyan bisa nggunakake:
    • docker mbangun sacara lokal, ing kluster nggunakake kaniko utawa ing Google Cloud Build;
    • Bazel lokal;
    • Jib Maven lan Jib Gradle sacara lokal utawa ing Google Cloud Build;
    • skrip mbangun adat mbukak sacara lokal. Yen sampeyan kudu mbukak solusi mbangun liyane (luwih fleksibel / akrab / ...), diterangake ing skrip supaya Skaffold diluncurake (conto saka dokumentasi). Iki ngidini sampeyan nggunakake sembarang kolektor sing bisa disebut nggunakake script;
  • Ing tataran testing, wis kasebut wadhah-struktur-test;
  • Kanggo panyebaran kasedhiya ing ngisor iki:
    • Kubectl;
    • Helm;
    • ngatur.

Thanks kanggo iki, Skaffold bisa diarani unik kerangka kanggo mbangun CI/CD. Iki minangka conto alur kerja nalika nggunakake (saka dokumentasi proyek):

Review Skaffold kanggo pangembangan Kubernetes

Apa karya Skaffold katon ing istilah umum?

  1. Utilitas ngawasi owah-owahan ing direktori kode sumber. Yen modifikasi digawe ing file kasebut, disinkronake karo pod aplikasi ing kluster Kubernetes. Yen bisa, tanpa reassembling gambar. Yen ora, gambar anyar dirakit.
  2. Gambar sing dirakit dicenthang nggunakake tes-struktur-kontainer, diwenehi tag lan dikirim menyang Registry Docker.
  3. Sawise iki, gambar kasebut disebarake - disebarake ing kluster Kubernetes.
  4. Yen peluncuran diwiwiti kanthi nggunakake printah skaffold dev, banjur kita miwiti nampa log saka aplikasi, lan Skaffold ngenteni owah-owahan kanggo mbaleni kabeh tumindak maneh.

Review Skaffold kanggo pangembangan Kubernetes
Ilustrasi tahapan utama operasi Skaffold

Laku. Nyoba Skaffold

Kanggo nduduhake nggunakake Skaffold, Aku bakal njupuk conto saka Repositori proyek GitHub... Miturut cara, ing kono Sampeyan bisa nemokake akeh conto liyane sing njupuk menyang akun macem-macem spesifik. Aku bakal nindakake kabeh tumindak lokal ing Minikube. Instalasi prasaja lan njupuk sawetara menit, lan sampeyan kudu kubectl kanggo miwiti.

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

Ayo tiron repositori Skaffold kanthi conto sing dibutuhake:

git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/microservices

Aku milih conto karo rong pods, saben ngemot siji aplikasi Go cilik. Siji aplikasi yaiku frontend (leeroy-web), sing ngarahake panjaluk kasebut menyang aplikasi kapindho - backend (leeroy-app). Ayo ndeleng kaya apa:

~/skaffold/examples/microservices # tree
.
├── leeroy-app
│   ├── app.go
│   ├── Dockerfile
│   └── kubernetes
│       └── deployment.yaml
├── leeroy-web
│   ├── Dockerfile
│   ├── kubernetes
│   │   └── deployment.yaml
│   └── web.go
├── README.adoc
└── skaffold.yaml
 
4 directories, 8 files

leeroy-app lan leeroy-web ngemot kode Go lan Dockerfiles prasaja kanggo mbangun kode iki sacara lokal:

~/skaffold/examples/microservices # cat leeroy-app/Dockerfile
FROM golang:1.12.9-alpine3.10 as builder
COPY app.go .
RUN go build -o /app .
 
FROM alpine:3.10
CMD ["./app"]
COPY --from=builder /app .

Aku ora bakal menehi kode aplikasi - cukup kanggo ngerti leeroy-web nampa panjalukan lan proxy menyang leeroy-app. Mulane ing file Deployment.yaml ana Service mung kanggo app (kanggo nuntun internal). Pod port web kita bakal nerusake kanggo awake dhewe kanggo akses cepet menyang aplikasi.

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

Kabeh tahapan kasebut ing ndhuwur diterangake ing kene. Saliyane konfigurasi iki, ana uga file kanthi setelan global - ~/.skaffold/config. Bisa diowahi kanthi manual utawa liwat CLI - contone, kaya iki:

skaffold config set --global local-cluster true

Printah iki bakal nyetel variabel global local-cluster menyang makna true, sawise iku Skaffold ora bakal nyoba kanggo push gambar menyang pendaptaran remot. Yen sampeyan ngembangake sacara lokal, sampeyan bisa nggunakake printah iki kanggo nggawe gambar sacara lokal.

Bali menyang skaffold.yaml:

  • Ing panggung build kita nemtokake yen sampeyan kudu ngumpulake lan nyimpen gambar lokal. Sawise mbangun mlaku kanggo pisanan, kita bakal weruh ing ngisor iki:
    // т.к. Minikube создает кластер в отдельной виртуальной машине,
    // придется проникнуть внутрь, чтобы найти образы
    # minikube ssh
    $ docker images
    REPOSITORY                                TAG                                                                IMAGE ID            CREATED             SIZE 
    leeroy-app                                7d55a50803590b2ff62e47e6f240723451f3ef6f8c89aeb83b34e661aa287d2e   7d55a5080359        4 hours ago         13MB 
    leeroy-app                                v0.37.1-171-g0270a0c-dirty                                         7d55a5080359        4 hours ago         13MB
    leeroy-web                                5063bfb29d984db1ff70661f17d6efcc5537f2bbe6aa6907004ad1ab38879681   5063bfb29d98        5 hours ago         13.1MB
    leeroy-web                                v0.37.1-171-g0270a0c-dirty                                         5063bfb29d98        5 hours ago         13.1MB

    Kaya sing sampeyan ngerteni, Skaffold menehi tag gambar kasebut dhewe. Miturut cara, sawetara kabijakan menehi tag didhukung.

  • Luwih ing config dituduhake context: ./leeroy-app/, i.e. konteks ing ngendi gambar dikumpulake ditemtokake.
  • Ing tataran panyebaran, ditemtokake manawa kita bakal nggunakake kubectl lan topeng kanggo manifes sing dibutuhake.
  • PortForward: padha carane kita biasane nerusake port nggunakake kubectl port-forward, kita menehi instruksi kanggo Skaffold nelpon printah iki. Ing kasus iki, port lokal 9000 diterusake menyang 8080 ing Deployment kanthi jeneng leeroy-web.

Iku wektu kanggo miwiti skaffold dev: Tim bakal nggawe "umpan balik loop", i.e. ora mung bakal ngumpulake kabeh lan masang menyang kluster, nanging uga bakal pitutur marang kowe bab negara pods ing wayahe, ngawasi owah-owahan lan nganyari negara pods.

Punika asil peluncuran skaffold dev --port-forward nalika reassembling:

Review Skaffold kanggo pangembangan Kubernetes

Pisanan, sampeyan bisa ndeleng manawa cache digunakake. Sabanjure, aplikasi dirakit, disebarake, lan port diterusake. Wiwit ditemtokake --port-forward, Skaffold nerusake port kanggo web, kaya sing ditakoni, nanging ing kene app dheweke mbuwang ing discretion dhewe (milih sing paling cedhak free). Sawise iki, kita nampa log pisanan saka aplikasi.

Ayo dipriksa apa bisa?

~/skaffold/examples/microservices # kubectl get po
NAME                          READY   STATUS    RESTARTS   AGE
leeroy-app-6998dfcc95-2nxvf   1/1     Running   0          103s
leeroy-web-69f7d47c9d-5ff77   1/1     Running   0          103s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy app!!!

Ngowahi file leeroy-app/app.go - sawetara detik liwat ... lan:

~/skaffold/examples/microservices # kubectl get po
NAME                          READY   STATUS    RESTARTS   AGE
leeroy-app-ffd79d986-l6nwp    1/1     Running   0          11s
leeroy-web-69f7d47c9d-5ff77   1/1     Running   0          4m59s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy Habr!!!

Ing wektu sing padha, Skaffold dhewe nampilake perkara sing padha ing konsol kaya sadurunge, kajaba siji titik: mung diluncurake. leeroy-app, lan ora kabeh bebarengan.

Praktek liyane

Sampeyan uga kudu disebutake yen nalika nggawe proyek anyar, konfigurasi kanggo Skaffold bisa bootstrap nggunakake printah init, sing trep banget. Kajaba iku, sampeyan bisa nulis sawetara konfigurasi: nindakake pembangunan ing konfigurasi gawan, banjur muter metu kanggo tataran karo printah. run (proses padha karo dev, mung ora ngawasi owah-owahan), nggunakake konfigurasi sing beda.

Ing katacoda ana nuntun Iku malah luwih gampang karo conto. Nanging nawakake kothak wedhi siap karo Kubernetes, aplikasi lan Skaffold. Opsi sing apik yen sampeyan pengin nyoba dhasar dhasar dhewe.

Salah sawijining kasus panggunaan kanggo Skaffold yaiku nindakake pangembangan ing kluster remot. Ora saben wong seneng nganggo Minikube ing piranti keras dhewe, banjur nggulung aplikasi kasebut lan ngarep-arep supaya bisa digunakake kanthi cekap ... Ing kasus iki, Skaffold ngrampungake masalah kasebut kanthi sampurna, sing bisa dikonfirmasi, contone, dening insinyur Reddit, kaya sing wis ana. wis rembugan wrote ing blog kita.

Lan ing publikasi iki saka Weaveworks sampeyan bisa nemokake conto nggawe pipa kanggo produksi.

kesimpulan

Skaffold minangka alat sing trep kanggo mbangun pipa sing melu nggulung aplikasi menyang Kubernetes lan utamane fokus ing kabutuhan pangembangan. Iku ndadekake cukup gampang kanggo nggawe pipa "cekak" sing njupuk menyang akun kabutuhan dhasar saka pangembang, nanging yen pengin, sampeyan bisa ngatur proses luwih gedhe. Minangka salah siji saka conto cetha nggunakake Skaffold ing CI / pangolahan CD diwenehi kuwi project test saka 10 layanan mikro nggunakake kemampuan Kubernetes, gRPC, Istio lan OpenCensus Tracing.

Skaffold wis duwe meh 8000+ bintang ing GitHub, dikembangake dening Google lan minangka bagean saka GoogleContainerTools - ing umum, ing wayahe ana saben alesan kanggo pracaya sing project bakal berkembang seneng tau sawise.

PS

Waca uga ing blog kita:

Source: www.habr.com

Add a comment