
Poolteist aastat tagasi, 5. mĂ€rtsil 2018, tĂ”i Google turule oma Open Source projekti CI/CD jaoks nimega , mille eesmĂ€rk oli luua "lihtne ja uuendatav arendus Kubernetesel", et arendajad saaksid keskenduda tĂ”eliselt arendusele, mitte haldamisele. Miks vĂ”iks Skaffold huvi pakkuda? Selgus, et sellel on mitmeid trumpe varrukas, mis aitavad tal saada tugevaks tööriistaks arendajale ning vĂ”ib-olla ka sĂŒsteemiadministraatorile. Tutvume projekti ja selle vĂ”imalustega.
NB: Muide, oleme juba lĂŒhidalt rÀÀkinud Skaffoldist meie ĂŒldises , mille elu on seotud Kubernetesega.
Teooria. EesmÀrk ja vÔimalused
Nii et ĂŒldiselt öeldes, Skaffold lahendab CI/CD tsĂŒkli automatiseerimise ĂŒlesanne (build, push, deploy etappidel), pakkudes arendajale operatiivset tagasisidet, st vĂ”imalust kiiresti saada tulemusi jĂ€rgmiste koodimuudatusete osas - vĂ€rskendatud rakenduse nĂ€ol, mis töötab Kubernetes klastris. Ja see vĂ”ib töötada erinevates keskkondades (dev, stage, production...), mille jaoks Skaffold aitab kirjeldada sobivaid pipeline'e.
Skaffoldi allikakood on kirjutatud Go keeles, vabade litsentsi Apache License 2.0 (GitHub) tingimustel.
Vaatame peamisi funktsioone ja omadusi. Esimeste hulka kuuluvad jÀrgmised:
- Skaffold pakub tööriistu CI/CD pipeline'ide loomiseks.
- Lubab ajalises reĆŸiimis jĂ€lgida muutusi allikakoodis ja kĂ€ivitada automatiseeritud koodi ehitamise protsessi konteineripiltide loomiseks, nende publitseerimiseks Docker Registry's ning nende juurutamiseks Kubernetes klastris.
- SĂŒnkroneerib failid repositsioonis konteineris töötava töökataloogiga.
- Automaatne testimine container-structure-test abil.
- Suunab porte.
- Loeb konteineris töötava rakenduse logisid.
- Aitab rakenduste tÔrkeotsingul, mis on kirjutatud Java, Node.js, Python, Go.
NĂŒĂŒd - omadustest:
- Skaffoldil endal ei ole komponente klastripoolsel kĂŒljel. See tĂ€hendab, et Kubernetesit ei pea selle utiliidi kasutamiseks lisateenuse leiutamisega kohandama.
- Erinevad pipeline'id teie rakendusele. Kas peate koodi vĂ€ljitama kohalikku Minikube'i, samas kui te arendate, ja seejĂ€rel - stage vĂ”i production? Selle jaoks on ette nĂ€htud ja kasutajate konfiguratsioonid, keskkonnamuutujad ja lipud, mis vĂ”imaldavad kirjeldada erinevaid vooge ĂŒhe rakenduse jaoks.
- cli-runtime'is ja kubectl'is. Ainult konsooli utiliit ja konfiguratsioonid YAML-is. VÔrgus vÔib leida mainimisi katsetest luua , kuid praegu tÀhendab see pigem, et kellelegi on see vajalik, kuid mitte vÀga.
- Modulaarsus. Skaffold ei ole iseseisev kombain, vaid pĂŒĂŒab kasutada eraldi module vĂ”i juba olemasolevaid lahendusi konkreetsete ĂŒlesannete jaoks.
Viimane nÀide:
- Kogumise etapis vÔib kasutada:
- docker build kohapeal, klastris kaniko abil vÔi Google Cloud Buildis;
- Bazel kohapeal;
- Jib Maven ja Jib Gradle kohapeal vÔi Google Cloud Buildis;
- kohandatud build-skripte, mida kĂ€ivitatakse kohapeal. Kui on vaja kĂ€ivitada mĂ”ni muu (paindlikum / tuttavam /âŠ) lahendus, on see kirjas skriptil, et Skaffold kĂ€ivitaks just selle (). See vĂ”imaldab kasutada tegelikult ĂŒkskĂ”ik millisest ehitajast, mida saab skripti abil kutsuda;
- Testimise etapis toetatakse juba mainitud ;
- Deployimiseks on ette nÀhtud:
- Kubectl;
- Helm;
- kustomize.
Selle tÔttu saab Skaffoldi nimetada omamoodi CI/CD raamistiku. Siin on nÀide tööprotsessist selle kasutamisel (projekti dokumentatsioonist):

Kuidas nĂ€eb Skaffoldi töö ĂŒldiselt vĂ€lja?
- Utiliit jĂ€lgib lĂ€htekoodikaustas toimuvaid muudatusi. Kui failidesse tehakse muudatusi, sĂŒnkroonitakse need rakenduse pod'iga Kuberneteses. Kui see on vĂ”imalik - ilma pildi ĂŒmberkogumiseta. Vastupidisel juhul koostatakse uus pilt.
- Koostatud pilti kontrollitakse container-structure-test'i abil, mÀrgistatakse ja saadetakse Docker Registry'sse.
- PÀrast seda pilt deployitakse - kÀivitatakse Kuberneteses.
- Kui kÀivitamine algatati kÀsu
skaffold dev, hakkame saama rakenduse logisid, ja Skaffold ootab muudatusi, et korrata kÔiki toiminguid uuesti.

Skaffoldi töö pÔhietappide illustreerimine
Praktika. Proovime Skaffoldi
Skaffoldi kasutamise demonstreerimiseks vĂ”tan nĂ€ite . ĂkskĂ”ik, saab leida ka palju teisi nĂ€iteid, mis arvestavad erinevat spetsifikatsiooni. KĂ”iki toiminguid teostan kohapeal Minikube'is. Installatsioon on lihtne ja vĂ”tab vaid paar minutit, ning töö alustamiseks on vajalik kubectl.
Installime Skaffoldi:
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.1Kloonime endale Skaffold'i repositooriumi vajalike nÀidistega:
git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/microservicesValisin nĂ€ite kahe pod'iga, millest kummaski on ĂŒks vĂ€ike Go rakendus. Ăks rakendus on frontend (leeroy-web), mis suunab pĂ€ringud teise rakendusse â backend (leeroy-app). Vaadakem, kuidas see vĂ€lja nĂ€eb:
~/.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 katalooge, 8 failileeroy-app ja leeroy-web sisaldavad Go koodi ja lihtsaid Dockerfile'e selle koodi kohalikuks ehitamiseks:
~/.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 . Rakenduste koodi tooma ei hakka â piisab teadas, et leeroy-web vastab pĂ€ringutele ja suunab need edasi leeroy-app. SeetĂ”ttu on failides Deployment.yaml ainult teenus olemas app (sisekasutuseks marsruudistamiseks). Pod'i porti web suuname kiireks juurdepÀÀsuks rakendusele.
Kuidas see vÀlja nÀeb 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 Siin on kirjas kĂ”ik etapid, mida varem mainiti. Lisaks sellele konfiguratsioonile on olemas ka fail globaalsete seadistustega â ~/.skaffold/config. Seda saab redigeerida kĂ€sitsi vĂ”i CLI kaudu â nĂ€iteks nii:
skaffold config set --global local-cluster true See kĂ€sk seab globaalse muutuja local-cluster vÀÀrtuseks true, pĂ€rast mida Skaffold ei pĂŒĂŒa pilte kaugarhi pushâida. Kui arendate kohapeal, vĂ”ite selle kĂ€su kasutada, et salvestada pilte samuti kohapeal.
Naaseme skaffold.yaml:
- Etapis
buildmeie puhul mÀÀratleme, et pilt tuleb koguda ja salvestada kohapeal. PĂ€rast esmakordset ehituse kĂ€ivitamist nĂ€eme jĂ€rgmist:// Ń.Đș. 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.1MBNagu nĂ€ha, on Skaffold ise pildid sildistanud. Ăksikasjana on toetatud mitmeid sildistamisstrateegiaid.
- JÀtkuks konfiguratsioonis on mÀÀratud
context: ./leeroy-app/, st mÀÀratud kontekst, milles pilti ehitatakse. - Deployimise etapis mÀÀratakse, et kasutame kubectl'i ja sobivaid manifeste.
-
PortForward: sarnaselt sellele, kuidas tavaliselt suuname porte lÀbikubectl port-forward, anname Skaffoldile juhised selle kÀsu kÀivitamiseks. Antud juhul suunatakse kohalik port 9000 8080-le mÀÀratud Deployment'is nimegaleeroy-web.
On just Ă”ige aeg alustada skaffold dev: kĂ€sk loob pideva "tagasiside tsĂŒkli", st mitte ainult ei kogu kĂ”ike ja deplooi klastrisse, vaid ka teatab pod'ide hetkeseisust, jĂ€lgib muutusi ja uuendab pod'ide olekut.
Siin on kÀivitamise tulemus skaffold dev --port-forward uuesti buildides:

Esiteks, on nÀha, et kasutatakse vahemÀlu. Edasi - rakendus kogutakse, deplooinitakse, portide suunamine toimub. Kuna on mÀÀratud --port-forward, Skaffold suunas portaadi nagu palutud, kuid webta suunas oma ÀranÀgemise jÀrgi (valis lÀhima vaba). PÀrast seda saame esimesed logid rakendustelt. app Kontrollime töökindlust?
~\/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!!!
Muudame faili leeroy-app\/app.go â möödub paar sekundit⊠ja: ~\/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!!!
Skaffold kuvab konsoolis sama, mis enne, vĂ€lja arvatud ĂŒks asi: ta nĂ€itas ainult , mitte kĂ”ike korraga. leeroy-appRohkem praktikat
Tasub mainida, et uue projekti loomisel saab Skaffoldi config'e luua kÀsu abil
, mis on vĂ€ga mugav. Samuti vĂ”ib kirjutada mitu config'i: arendada vaikimisi config'i alusel ja seejĂ€rel luua staadiumis kĂ€suga â algne ettevalmistus enne juurutamist, siin vĂ”ib olla kĂ”ike: sĂ”ltuvuste allalaadimist, saladuste lahtipakkimist ja muud.(sama protsess, mis run , lihtsalt ei jĂ€lgi muutusi), kasutades teist config'i. devKatacoda's on
lihtsam nÀide. Seal on juba valmis liivakasti Kubernetes, rakendus ja Skaffold. SuurepÀrane variant, kui soovite iseseisvalt proovida pÔhiteadmisi. on
Ăks vĂ”imalik rakendus Skaffoldi kasutamiseks on arendamine kaugklastri peal. Mitte kĂ”igile ei meeldi kĂ€ivitada Minikube enda seadmetel, et seejĂ€rel rakendust vĂ€lja panna ja oodata selle korrektset toimimist... Sellisel juhul lahendab Skaffold suurepĂ€raselt seatud ĂŒlesande, mida vĂ”ivad kinnitada nĂ€iteks Redditi insenerid, millest me juba meie blogist.
Ja Weaveworksilt vÔib leida nÀite tootmisprotsessi torujuhtme loomisest.
KokkuvÔte
Skaffold on mugav tööriist torujuhtmete koostamiseks, mis hĂ”lmavad rakenduste vĂ€ljalaskmist Kuberneteses ja keskenduvad peamiselt arenduse vajadustele. Sellega on ĂŒsna lihtne luua "lĂŒhi" torujuhe, mis arvestab arendaja pĂ”hinĂ”udmisi, kuid soovi korral saab korraldada ka suuremaid protsesse. Ăhe nĂ€itlikuna Skaffoldi kasutamisest CI/CD protsessides niisugust 10 mikroteenusega, mis kasutavad Kubernetes, gRPC, Istio ja OpenCensus jĂ€lgimist.
Skaffold on juba saanud peaaegu 8000+ tĂ€hte GitHubis, seda arendab Google ja see kuulub â ĂŒldiselt on hetkel kĂ”ik pĂ”hjused arvata, et projekt areneb kaua ja edukalt.
P.S.
Lugege ka meie blogist:
- «»;
- «»;
- «»;
- «».
Allikas: habr.com
