
Poolteist aastat tagasi, 5. mĂ€rtsil 2018, kĂ€ivitas Google oma avatud lĂ€htekoodiga CI/CD projekti, mille nimi on , mille eesmĂ€rk on luua âlihtne ja reprodutseeritav arendus Kubernetesesâ, et arendajad saaksid keskenduda tĂ”eliselt arendusele, mitte haldamisele. Miks on Skaffold huvitav? Selgub, et tal on mĂ”ned trumpĂ€ssad varrukas, mis vĂ”ivad teha sellest tugeva tööriista arendajatele ja vĂ”ib-olla ka eksploiteerimise inseneridele. Tutvume projekti ja selle vĂ”imalustega.
NB: Muide, oleme juba lĂŒhidalt rÀÀkinud Skaffoldist meie ĂŒldises , kelle elu on seotud Kubernetesega.
Teooria. EesmÀrk ja vÔimalused
Seega, kui rÀÀkida ĂŒldiselt, lahendab Skaffold CI/CD tsĂŒkli automatiseerimise ĂŒlesande (ehitamisel, tĂ”ukamisel, juurutamisel), pakkudes arendajale kiiret tagasisidet, st vĂ”imalust kiiresti saada tulemusi koodimuutuste kohta - vĂ€rskendatud rakenduse nĂ€ol, mis töötab Kuberneteses. See vĂ”ib toimida erinevates keskkondades (dev, stage, production...), mille jaoks Skaffold aitab kirjeldada vastavaid vĂ€ljalaskepipeline'e.
Skaffoldi lÀhtekood on kirjutatud Go keeles, Apache License 2.0 (GitHub) vabakirjanduse tingimustel.
Vaadakem peamisi funktsioone ja omadusi. Esimeste seas vÔib nimetada jÀrgmist:
- Skaffold pakub vahendeid CI/CD pipeline'ide loomiseks.
- See vÔimaldab taustal jÀlgida muudatusi lÀhtekoodis ja kÀivitada automatiseeritud protsesse koodi kompileerimiseks konteineripiltideks, nende piltide avaldamiseks Docker Registry's ja nende juurutamiseks Kubernetesesse.
- SĂŒnkroniseerib failid hoidlas konteineri töötava kataloogiga.
- Automaatne testimine container-structure-test abil.
- Edastab porte.
- Lugeda rakenduse logisid, mis on konteineris kÀivitatud.
- Aitab Java, Node.js, Python, Go keeles kirjutatud rakenduste tÔrkeotsingul.
NĂŒĂŒd rÀÀgime omadustest:
- Skaffoldil ei ole klastripoolseid komponente. See tÀhendab, et Kubernetesit pole vaja selle tööriista kasutamiseks tÀiendavalt seadistada.
- Erinevad torud teie rakendusele. Kas peate koodi kohaliku Minikube'i kaudu vĂ€lja andma, samal ajal kui te arendate, ja seejĂ€rel stseenis vĂ”i tootmises? Selleks on ette nĂ€htud ja kasutajakohased konfiguratsioonid, keskkonnamuutujad ja lipud, mis vĂ”imaldavad ĂŒhte rakendust erinevalt kirjeldada.
- CLI. Ainult konsooli tööriist ja YAML konfiguratsioonid. Internetis leidub teateid katsetest luua , kuid praegu tÀhendab see pigem seda, et keegi vajab seda, kuid mitte vÀga palju.
- Modulaarsus. Skaffold ei ole iseseisev kombain, vaid pĂŒĂŒab kasutada eraldi mooduleid vĂ”i juba olemasolevaid lahendusi konkreetsete ĂŒlesannete jaoks.
Viimase illustratsioon:
- Ehitusfaasis saab kasutada:
- docker build kohalikult, klastris kaniko abil vÔi Google Cloud Build'is;
- Bazel kohalikult;
- Jib Maven ja Jib Gradle kohalikult vÔi Google Cloud Build'is;
- kohandatud build-skriptid, mis kĂ€ivitatakse kohalikult. Kui vajate teistsugust (paindlikumat / tuttavamat / âŠ) kogumise lahendust, siis see kirjeldatakse skriptis, et Skaffold kĂ€ivitaks just selle.) See vĂ”imaldab kasutada ĂŒldse mitte mingit kogujat, mida on vĂ”imalik skripti abil kutsuda;
- Testeetapis toetatakse juba mainitud ;
- Deployimiseks on ette nÀhtud:
- Kubectl;
- Helm;
- kustomize.
Selle tÔttu vÔib Skaffoldit nimetada teatud mÀÀral CI/CD ehitamise raamistiku. Siin on nÀide töökÀigust selle kasutamisel (projekti dokumentatsioonist):

Kuidas nĂ€eb Skaffoldi töö ĂŒldiselt vĂ€lja?
- Tööriist jĂ€lgib muudatusi lĂ€htekoodi kataloogis. Kui failidesse tehakse muudatusi, sĂŒnkroonitakse need rakenduse pod'iga Kubernetes klastris. Kui vĂ”imalik, siis ilma uue pildi eelnevata ehitamiseta. Kui see pole vĂ”imalik, siis ehitatakse uus pilt.
- Ehitatud pilti kontrollitakse container-structure-testiga, mÀrgistatakse ja saadetakse Docker Registry'sse.
- PĂ€rast seda pilti deployitakse â arendatakse ĂŒles Kubernetes klastris.
- Kui kÀivitamine algatati kÀsu kaudu
skaffold dev, siis hakkame saama rakendusest logisid, samas kui Skaffold ootab muudatusi, et kÔik toimingud uuesti korda teha.

Skaffoldi töö peamiste etappide illustreerimine
Praktika. Proovime Skaffoldi
Skaffoldi kasutamise demonstreerimiseks vÔtan nÀite Muide, mitmeid teisi nÀiteid, mis arvestavad erinevaid spetsiifikasid. KÔik toimingud teen kohapeal Minikubes. Installimine on lihtne ja vÔtab vaid mÔned minutid, kuid töötamiseks on vajalik kubectl.
Paigaldame 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 Skaffoldi hoidla vajalike nÀidetega:
git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/microservicesValisin nĂ€ite kahe podâiga, millest igaĂŒhes on ĂŒks vĂ€ike Go-rakendus. Ăks rakendus on front-end (leeroy-web), mis suunab pĂ€ringu teisele rakendusele â back-endile (leeroy-app). Vaatame, 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 kausta, 8 failileeroy-app ja leeroy-web sisaldavad Go koodi ja lihtsaid Dockerfiles selle kohaliku 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 ma nĂ€itama ei hakka â piisab sellest, et leeroy-web vastab pĂ€ringutele ja edastab need leeroy-app. SeetĂ”ttu failides Deployment.yaml on ainult Service app (sisemiseks marsruutimiseks). Pod'i port web edastatakse meile rakendusele kiire ligipÀÀsuks.
Kuidas nÀeb vÀlja 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 kirjeldatud kĂ”ik etapid, mis eelnevalt mainitud. Lisaks sellele konfiguratsioonile on olemas ka globaalsete seadistustega fail â ~/.skaffold/config. Seda saab redigeerida kĂ€sitsi vĂ”i CLI abil â nĂ€iteks nii:
skaffold config set --global local-cluster true See kĂ€sk seab globaalse muutujana local-cluster vÀÀrtuse true, pĂ€rast mida Skaffold ei pĂŒĂŒa pilte kaugregistrisse 'push'ida. Kui töötate lokaalsetes tingimustes, saate seda kĂ€sku kasutada, et koguda pilte samuti lokaalselt.
Naaseme skaffold.yaml:
- etappi
build, kus mÀÀrame, et pilt tuleb koguda ja salvestada lokaalselt. PĂ€rast esmakordset kompileerimise 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.1MBKuidas nĂ€ha, Skaffold ise markeeris pildid. Muide, toetatakse mitmeid markeerimispoliitikaid.
- Edasi on konfis nÀidatud
context: ./leeroy-app/, st on mÀÀratud kontekst, milles pilti kogutakse. - Depoos mÀÀratakse, et kasutame kubectlâi ja maski vajalike manifestide jaoks.
-
PortForward: sarnaselt sellele, kuidas me tavaliselt porte edastamekubectl port-forward, anname Skaffoldile korralduse selle kĂ€su vĂ€ljakutsumiseks. Antud juhul â lokaalne port 9000 suunatakse 8080-le Deployment'is, mille nimi onleeroy-web.
On aeg alustada skaffold dev: kĂ€sk loob jĂ€tkuva âtagasiside tsĂŒkliâ, st mitte ainult ei kogu kĂ”ike ja ei depoleeri klastrisse, vaid ka ĂŒtleb pod'ide seisundi hetkel, jĂ€lgib muudatusi ja uuendab pod'ide seisundit.
Siin on kÀivitamise tulemus skaffold dev --port-forward uuesti kokkupanemise korral:

Esiteks on nĂ€ha, et kasutatakse vahemĂ€lu. Edasi â rakendus kogutakse, depoleeritakse, ja portide edastamine toimub. Kuna on mÀÀratud --port-forward, Skaffold edastas porti kuni web, nagu paluti, kuid app ta edastas oma Ă€ranĂ€gemise jĂ€rgi (valis lĂ€hima vaba). PĂ€rast seda saame esimesed logid rakendustest.
Kontrollime toimivust?
~/skaffold/examples/microservices # kubectl get po
NIMI VALMIS SEISUND UUESTIKĂIVITAMISD VANUS
leeroy-app-6998dfcc95-2nxvf 1/1 KĂ€ib 0 103s
leeroy-web-69f7d47c9d-5ff77 1/1 KĂ€ib 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
NIMI VALMIS SEISUND UUESTIKĂIVITAMISD VANUS
leeroy-app-ffd79d986-l6nwp 1/1 KĂ€ib 0 11s
leeroy-web-69f7d47c9d-5ff77 1/1 KĂ€ib 0 4m59s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy Habr!!! Skaffold vĂ€ljastas konsoolis sama, mis varem, vĂ€lja arvatud ĂŒks aspekt: ta nĂ€itas ainult leeroy-app, mitte kĂ”ike korraga.
Rohkem praktikat
Tasub mainida, et uue projekti loomisel saab Skaffoldi konfiguratsioone âbootstrapâidaâ kĂ€suga init, mis on vĂ€ga mugav. Lisaks saab kirjutada mitu konfiguratsiooni: arendada vaikimisi konfiguratsiooni jĂ€rgi ja seejĂ€rel minna etappi kĂ€suga run sama protsess, mis on dev, kuid ei jĂ€lgi muudatusi, kasutades teist konfiguratsiooni.
Katacodas on nÀide, mis on veelgi lihtsam. Seal on juba valmis liivakast koos Kubernetes, rakenduse ja Skaffoldiga. SuurepÀrane vÔimalus, kui soovite ise proovida kÔige tÀhtsamaid aspekte.
Ăks vĂ”imalik Skaffoldi kasutamise variant on arendustöö kaugklastri peal. Mitte kĂ”ik ei soovi kĂ€ivitada Minikube'i oma riistvaral, pĂ€rast mida rakendust kĂ€ivitada ja oodata selle korrektselt toimimist⊠Sel juhul lahendab Skaffold ĂŒlesande suurepĂ€raselt, millest vĂ”ivad kinnitada nĂ€iteks Redditi insenerid, nagu oleme juba meie blogist.
Ja Weaveworksilt leiate nÀite tootmispipeline'i loomisest.
KokkuvÔte
Skaffold â mugav tööriist rakenduste juurutamise protsesside ĂŒlesehitamiseks Kuberneteses, mis keskendub eelkĂ”ige arenduse vajadustele. Selle abil on suhteliselt lihtne luua "lĂŒhi" protsess, mis arvestab arendaja peamisi vajadusi, kuid soovi korral on vĂ”imalik korraldada ka keerukamaid protsesse. NĂ€iteks vĂ”ib tuua Skaffoldi kasutamise nĂ€itena CI/CD protsessides selline 10 mikroteenust, mis kasutavad Kubernetes, gRPC, Istio ja OpenCensus jĂ€lgimist.
Skaffold on saanud peaaegu 8000+ tĂ€hte GitHubis, seda arendab Google ja see kuulub â praegu on igal juhul kĂ”ik tĂ”endid, et projekt jĂ€tkab pika ja eduka arengu teed.
P.S.
Lugege ka meie blogist:
- «»;
- «»;
- «»;
- «».
Allikas: habr.com
