Reviżjoni ta' Skaffold għall-iżvilupp ta' Kubernetes

Reviżjoni ta' Skaffold għall-iżvilupp ta' Kubernetes

Sena u nofs ilu, fil-5 ta’ Marzu 2018, Google ħarġet l-ewwel verżjoni alpha tal-proġett Open Source tagħha għal CI/CD imsejħa Skaffold, li l-għan tiegħu kien li joħloq "żvilupp Kubernetes sempliċi u ripetibbli" sabiex l-iżviluppaturi jkunu jistgħu jiffukaw fuq l-iżvilupp aktar milli l-amministrazzjoni. X'jista' jkun interessanti dwar Skaffold? Kif jirriżulta, għandu ftit tricks fil-kmiem li jistgħu jagħmluha għodda qawwija għall-iżviluppatur, u forsi anke l-inġinier tal-operazzjonijiet. Ejja nagħmlu familjari mal-proġett u l-kapaċitajiet tiegħu.

NB: Mill-mod, diġà tkellimna fil-qosor dwar Skaffold fil-ġenerali tagħna reviżjoni tal-għodod tal-iżviluppatur, li ħajjitha hija konnessa ma 'Kubernetes.

Teorija. Għan u kapaċitajiet

Allura, b'mod ġenerali, Skaffold issolvi l-problema tal-awtomatizzazzjoni taċ-ċiklu CI/CD (fl-istadji tal-bini, l-imbuttar, l-iskjerament), li joffri lill-iżviluppatur feedback fil-pront, i.e. l-abbiltà li tirċievi malajr ir-riżultat ta 'bidliet sussegwenti fil-kodiċi - fil-forma ta' applikazzjoni aġġornata li taħdem fil-cluster Kubernetes. U jista 'jaħdem f'ċirkwiti differenti (dev, stadju, produzzjoni...), li għalihom Skaffold jgħin biex jiddeskrivi l-pipelines korrispondenti għat-tnedija.

Il-kodiċi tas-sors ta' Skaffold huwa miktub f'Go, imqassma minn taħt il-Liċenzja Apache 2.0 b'xejn (GitHub).

Ejja nħarsu lejn il-funzjonijiet u l-karatteristiċi ewlenin. L-ewwel jinkludu dan li ġej:

  • Skaffold joffri għodod għall-ħolqien ta' pipelines CI/CD.
  • Jippermettilek tissorvelja l-bidliet fil-kodiċi tas-sors fl-isfond u tmexxi proċess awtomatizzat ta 'assemblaġġ ta' kodiċi f'immaġini ta 'kontenitur, tippubblika dawn l-immaġini fir-Reġistru Docker u skjeramenthom fil-cluster Kubernetes.
  • Jissinkronizza fajls fir-repożitorju mad-direttorju tax-xogħol fil-kontenitur.
  • Testijiet awtomatikament bl-użu ta 'kontenitur-istruttura-test.
  • Portijiet 'il quddiem.
  • Jaqra r-reġistri ta' applikazzjoni li taħdem f'kontenitur.
  • Jgħin fid-debugging ta' applikazzjonijiet miktuba f'Java, Node.js, Python, Go.

Issa dwar il-karatteristiċi:

  • Skaffold innifsu m'għandu l-ebda komponenti tal-cluster-side. Jiġifieri, m'hemmx bżonn li Kubernetes jiġi kkonfigurat aktar biex juża din l-utilità.
  • Pipelines differenti għall-applikazzjoni tiegħek. Għandek bżonn biex toħroġ il-kodiċi għal Minikube lokali waqt li tkun qed tiżviluppa, u mbagħad għall-istadju jew il-produzzjoni? Għal dan il-għan hemm profili u konfigurazzjonijiet tal-utent, varjabbli ambjentali u bnadar, li jippermettulek tiddeskrivi pipelines differenti għal applikazzjoni waħda.
  • CLI. Utilità u konfigurazzjonijiet tal-console biss f'YAML. Fuq l-Internet tista' ssib referenzi għal tentattivi ta' ħolqien GUI sperimentali, madankollu, bħalissa dan x'aktarx ifisser biss li xi ħadd għandu bżonnu, iżda mhux verament.
  • Modularità. Skaffold mhuwiex ħsad waħdu, iżda għandu l-għan li juża moduli individwali jew soluzzjonijiet eżistenti għal kompiti speċifiċi.

Illustrazzjoni ta' dan tal-aħħar:

  • Fl-istadju tal-assemblaġġ tista' tuża:
    • docker build lokalment, fi cluster bl-użu tal-kaniko jew fil-Google Cloud Build;
    • Bazel lokalment;
    • Jib Maven u Jib Gradle lokalment jew f'Google Cloud Build;
    • skripts tal-bini tad-dwana jimxu lokalment. Jekk għandek bżonn tmexxi soluzzjoni ta' bini oħra (aktar flessibbli/familjari/...), hija deskritta fl-iskritt sabiex Skaffold iniediha (eżempju mid-dokumentazzjoni). Dan jippermettilek tuża kwalunkwe kollettur li jista 'jissejjaħ bl-użu ta' skript;
  • Fl-istadju tal-ittestjar, il-diġà msemmija kontenitur-istruttura-test;
  • Għall-iskjerament huma pprovduti dawn li ġejjin:
    • Kubectl;
    • Tmun;
    • Ippersonalizza.

Grazzi għal dan, Skaffold jista 'jissejjaħ uniku qafas għall-bini tas-CI/CD. Hawn hu eżempju ta' fluss tax-xogħol meta tużah (mid-dokumentazzjoni tal-proġett):

Reviżjoni ta' Skaffold għall-iżvilupp ta' Kubernetes

Kif jidher ix-xogħol ta' Skaffold f'termini ġenerali?

  1. L-utilità timmonitorja l-bidliet fid-direttorju tal-kodiċi tas-sors. Jekk isiru modifiki fil-fajls, huma sinkronizzati mal-pod tal-applikazzjoni fil-cluster Kubernetes. Jekk possibbli, mingħajr ma terġa' tgħaqqad l-immaġni. Inkella, tinġabar immaġni ġdida.
  2. L-immaġni immuntata tiġi ċċekkjata bl-użu tat-test tal-istruttura tal-kontenitur, ittikkettata u mibgħuta lir-Reġistru Docker.
  3. Wara dan, l-immaġni hija skjerata - skjerata fil-cluster Kubernetes.
  4. Jekk it-tnedija kienet inizjalizzata bl-użu tal-kmand skaffold dev, imbagħad nibdew nirċievu zkuk mill-applikazzjoni, u Skaffold jistenna li l-bidliet jerġgħu jirrepetu l-azzjonijiet kollha.

Reviżjoni ta' Skaffold għall-iżvilupp ta' Kubernetes
Illustrazzjoni tal-istadji ewlenin tal-operat tal-Skaffold

Prattika. Jippruvaw Skaffold

Biex nuri l-użu ta 'Skaffold, se nieħu eżempju minn Repożitorju tal-proġett GitHub. Mill-mod, hemm Tista 'ssib ħafna eżempji oħra li jqisu ispeċifiċitajiet varji. Se nwettaq l-azzjonijiet kollha lokalment f'Minikube. L-installazzjoni hija sempliċi u tieħu ftit minuti, u jkollok bżonn kubectl biex tibda.

Installa 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

Ejja nikklonu r-repożitorju ta’ Skaffold bl-eżempji meħtieġa:

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

Għażilt eżempju b'żewġ imżiewed, kull wieħed ikun fih applikazzjoni waħda żgħira ta' Go. Applikazzjoni waħda hija l-frontend (leeroy-web), li tidderieġi t-talba għat-tieni applikazzjoni - il-backend (leeroy-app). Ejja naraw kif jidher:

~/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 u leeroy-web fihom kodiċi Go u Dockerfiles sempliċi biex jibnu dan il-kodiċi lokalment:

~/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 .

Mhux se nagħti l-kodiċi tal-applikazzjoni - huwa biżżejjed li tkun taf dan leeroy-web jaċċetta talbiet u jagħtihom prokura leeroy-app. Għalhekk fil-fajls Deployment.yaml hemm Servizz biss għal app (għal rotta interna). Pod port web aħna se ngħadduha lilna nfusna għal aċċess rapidu għall-applikazzjoni.

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

L-istadji kollha msemmija hawn fuq huma deskritti hawn. Minbarra din il-konfigurazzjoni, hemm ukoll fajl b'settings globali - ~/.skaffold/config. Jista' jiġi editjat manwalment jew permezz tas-CLI - pereżempju, bħal dan:

skaffold config set --global local-cluster true

Dan il-kmand se jistabbilixxi l-varjabbli globali local-cluster fis-sens true, wara li Skaffold mhux se jipprova jimbotta immaġini għar-reġistru remot. Jekk qed tiżviluppa lokalment, tista' tuża dan il-kmand biex tibni immaġini lokalment.

Lura għal skaffold.yaml:

  • Fuq il-palk build aħna nispeċifikaw li għandek bżonn tiġbor u tissejvja l-immaġni lokalment. Wara li l-bini jibda għall-ewwel darba, se naraw dan li ġej:
    // т.к. 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

    Kif tistgħu taraw, Skaffold tikketta l-immaġini hu stess. Mill-mod, diversi politiki ta 'tikkettar huma appoġġjati.

  • Aktar fil-konfigurazzjoni huwa indikat context: ./leeroy-app/, i.e. il-kuntest li fih tinġabar l-immaġni huwa speċifikat.
  • Fl-istadju tal-iskjerament, huwa determinat li se nużaw kubectl u maskra għall-manifesti meħtieġa.
  • PortForward: simili għal kif aħna normalment tibgħat portijiet bl-użu kubectl port-forward, aħna nagħtu struzzjonijiet lil Skaffold biex isejjaħ dan il-kmand. F'dan il-każ, il-port lokali 9000 jintbagħat lil 8080 f'Deployment bl-isem leeroy-web.

Wasal iż-żmien li tniedi skaffold dev: It-tim se joħloq “loop ta’ feedback” kontinwu, i.e. mhux biss se tiġbor kollox u tiskjerah fil-cluster, iżda wkoll tgħidlek dwar l-istat tal-imżiewed fil-mument, tissorvelja l-bidliet u taġġorna l-istat tal-imżiewed.

Hawn hu r-riżultat tat-tnedija skaffold dev --port-forward meta tgħaqqad mill-ġdid:

Reviżjoni ta' Skaffold għall-iżvilupp ta' Kubernetes

L-ewwel, tista 'tara li l-cache qed jintuża. Sussegwentement, l-applikazzjoni tiġi mmuntata, skjerata, u l-portijiet jintbagħtu. Peress speċifikat --port-forward, Skaffold bagħtet il-port lil web, kif kien mistoqsi, imma hawn app tefa’ fid-diskrezzjoni tiegħu (għażel l-eqreb wieħed ħieles). Wara dan, nirċievu l-ewwel zkuk mill-applikazzjonijiet.

Ejja niċċekkjaw jekk taħdimx?

~/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!!!

Timmodifika l-fajl leeroy-app/app.go - jgħaddu ftit sekondi... u:

~/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!!!

Fl-istess ħin, Skaffold innifsu wera l-istess ħaġa fil-console bħal qabel, bl-eċċezzjoni ta 'punt wieħed: ħarġet biss leeroy-app, u mhux kollha f'daqqa.

Aktar prattika

Ta’ min isemmi wkoll li meta jinħoloq proġett ġdid, il-konfigurazzjonijiet għal Skaffold jistgħu jiġu bootstrapped bl-użu tal-kmand init, li huwa konvenjenti ħafna. Barra minn hekk, tista 'tikteb diversi konfigurazzjonijiet: wettaq żvilupp fuq il-konfigurazzjoni default, u mbagħad roll out għall-istadju bil-kmand run (l-istess proċess bħal dev, sempliċement ma jimmonitorjax il-bidliet), bl-użu ta 'konfigurazzjoni differenti.

Fuq katacoda hemm gwida Huwa saħansitra aktar faċli b'eżempju. Iżda joffri sandbox lest b'Kubernetes, applikazzjoni u Skaffold. Għażla kbira jekk int interessat li tipprova l-affarijiet bażiċi lilek innifsek.

Każ ta' użu possibbli għal Skaffold huwa li twettaq żvilupp fuq cluster remot. Mhux kulħadd huwa komdu jmexxi Minikube fuq il-ħardwer tiegħu stess, imbagħad iħaddem l-applikazzjoni u jistenna li taħdem b'mod adegwat... F'dan il-każ, Skaffold issolvi l-problema perfettament, li tista 'tiġi kkonfermata, pereżempju, mill-inġiniera ta' Reddit, kif għandna diġà diskussi писали fil-blog tagħna.

U fl- din il-pubblikazzjoni minn Weaveworks tista 'ssib eżempju ta' ħolqien ta 'pipeline għall-produzzjoni.

Konklużjoni

Skaffold hija għodda konvenjenti għall-bini ta 'pipelines li jinvolvu t-tnedija ta' applikazzjonijiet għal Kubernetes u huma primarjament iffukati fuq il-ħtiġijiet ta 'żvilupp. Jagħmilha pjuttost faċli li jinħoloq pipeline "qasir" li jqis il-ħtiġijiet bażiċi tal-iżviluppatur, iżda jekk mixtieq, tista 'torganizza proċessi akbar. Bħala wieħed mill-eżempji ċari tal-użu ta' Skaffold fi proċessi CI/CD jingħata bħal proġett tat-test ta’ 10 mikroservizzi li jużaw il-kapaċitajiet ta’ Kubernetes, gRPC, Istio u OpenCensus Tracing.

Skaffold diġà għandu kważi 8000+ stilla fuq GitHub, huwa żviluppat minn Google u huwa parti minn GoogleContainerTools — b'mod ġenerali, bħalissa hemm kull raġuni biex wieħed jemmen li l-proġett se jiżviluppa kuntenti għal dejjem.

PS

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Ixtri hosting affidabbli għal siti bi protezzjoni DDoS, servers VPS VDS 🔥 Ixtri hosting ta' websajts affidabbli bi protezzjoni DDoS, servers VPS VDS | ProHoster