Lèirmheas air Skaffold airson leasachadh Kubernetes
O chionn bliadhna gu leth, air 5 Màrt 2018, leig Google a-mach a ’chiad dreach alpha den phròiseact Open Source aige airson CI / CD ris an canar Sgeadaich, leis an amas “leasachadh Kubernetes sìmplidh agus ath-aithris” a chruthachadh gus am b ’urrainn do luchd-leasachaidh fòcas a chuir air leasachadh seach rianachd. Dè dh’ fhaodadh a bhith inntinneach mu Skaffold? Mar a thionndaidh e, tha beagan chleasan aige suas a mhuin a dh’ fhaodas a dhèanamh na inneal cumhachdach don leasaiche, agus is dòcha eadhon an innleadair gnìomhachd. Leig leinn eòlas fhaighinn air a 'phròiseact agus na comasan aige.
NB: Co-dhiù, tha sinn mu thràth air bruidhinn goirid mu Skaffold san fharsaingeachd againn ath-sgrùdadh air innealan leasaiche, aig a bheil beatha ceangailte ri Kubernetes.
Teòiridh. Adhbhar agus comasan
Mar sin, san fharsaingeachd, bidh Skaffold a’ fuasgladh na duilgheadas a thaobh fèin-ghluasad a dhèanamh air cearcall CI/CD (aig ìrean togail, putadh, cleachdadh), a’ tabhann fios air ais sgiobalta don leasaiche, i.e. an comas toradh atharrachaidhean còd às deidh sin fhaighinn gu sgiobalta - ann an cruth tagradh ùraichte a ’ruith ann am buidheann Kubernetes. Agus faodaidh e obrachadh ann an diofar chuairtean (dev, àrd-ùrlar, cinneasachadh ...), airson a bheil Skaffold a 'cuideachadh le bhith a' toirt cunntas air na pìoban co-fhreagarrach airson an sgaoileadh.
Tha còd stòr Skaffold sgrìobhte ann an Go, air a sgaoileadh le fo cheadachas Apache 2.0 an-asgaidh (GitHub).
Bheir sinn sùil air na prìomh ghnìomhan agus feartan. Tha a 'chiad gabhail a-steach na leanas:
Bidh Skaffold a’ tabhann innealan airson pìoban CI/CD a chruthachadh.
A ’leigeil leat sùil a chumail air atharrachaidhean anns a’ chòd stòr air a ’chùl agus pròiseas fèin-ghluasadach de chòd a chuir ri chèile ann an ìomhaighean soithich, a’ foillseachadh nan ìomhaighean sin ann an Clàr Docker agus gan cleachdadh gu buidheann Kubernetes.
Sioncronaich faidhlichean san stòr leis an eòlaire obrach anns a’ ghobhar.
Deuchainnean gu fèin-ghluasadach a’ cleachdadh deuchainn structar container.
Air adhart puirt.
Leughadh logaichean aplacaid a tha a’ ruith ann an soitheach.
A’ cuideachadh le bhith a’ deasbaireachd thagraidhean sgrìobhte ann an Java, Node.js, Python, Go.
A-nis mu na feartan:
Chan eil co-phàirtean taobh brabhsair aig Skaffold fhèin. Is e sin, chan eil feum air tuilleadh Kubernetes a rèiteachadh gus an goireas seo a chleachdadh.
Pìoban eadar-dhealaichte airson an tagradh agad. Am feum thu an còd a sgaoileadh gu Minikube ionadail fhad ‘s a tha thu a’ leasachadh, agus an uairsin gu àrd-ùrlar no riochdachadh? Airson an adhbhair seo tha профили agus rèiteachadh luchd-cleachdaidh, caochladairean àrainneachd agus brataichean, a leigeas leat cunntas a thoirt air diofar phìoban airson aon iarrtas.
CLI. Is e dìreach goireas tòcan agus rèiteachadh ann an YAML. Air an eadar-lìon gheibh thu iomraidhean air oidhirpean cruthachadh GUI deuchainneach, ge-tà, an-dràsta tha seo nas coltaiche dìreach a 'ciallachadh gu bheil feum aig cuideigin air, ach chan ann dha-rìribh.
Modularity. Chan e inneal-buain leis fhèin a th’ ann an Skaffold, ach bidh e a’ feuchainn ri modalan fa leth no fuasglaidhean gnàthaichte a chleachdadh airson gnìomhan sònraichte.
Dealbh air an fhear mu dheireadh:
Aig an ìre cruinneachaidh faodaidh tu a chleachdadh:
togail docker gu h-ionadail, ann am brabhsair a’ cleachdadh kaniko no ann an Google Cloud Build;
Bazel gu h-ionadail;
Jib Maven agus Jib Gradle gu h-ionadail no ann an Google Cloud Build;
bidh sgriobtaichean togail àbhaisteach a’ ruith gu h-ionadail. Ma dh'fheumas tu fuasgladh togail eile (nas sùbailte / eòlach / ...) a ruith, tha e air a mhìneachadh san sgriobt gus am bi Skaffold ga chuir air bhog (eisimpleir bho sgrìobhainnean). Leigidh seo leat neach-cruinneachaidh sam bith a dh’ fhaodar a ghairm a’ cleachdadh sgriobt;
Airson cleachdadh tha na leanas air a thoirt seachad:
Cubectl;
Helm;
gnàthachadh.
Taing dha seo, faodar Skaffold a ghairm sònraichte frèam airson CI/CD a thogail. Seo eisimpleir de shruth-obrach nuair a bhios tu ga chleachdadh (bho sgrìobhainnean a’ phròiseict):
Cò ris a tha obair Skaffold coltach san fharsaingeachd?
Bidh an goireas a’ cumail sùil air atharrachaidhean anns an eòlaire còd stòr. Ma thèid atharrachaidhean a dhèanamh air na faidhlichean, bidh iad air an sioncronadh leis a’ pod tagraidh ann am buidheann Kubernetes. Ma ghabhas e dèanamh, gun a bhith ag ath-chruinneachadh an ìomhaigh. Rud eile, thèid ìomhaigh ùr a chruinneachadh.
Tha an ìomhaigh cruinnichte air a sgrùdadh le bhith a’ cleachdadh deuchainn structar-giùlain, air a tagadh agus air a chuir gu Clàr an Docker.
Às deidh seo, tha an ìomhaigh air a chleachdadh - air a chleachdadh ann am buidheann Kubernetes.
Ma chaidh an cur air bhog a thòiseachadh leis an àithne skaffold dev, an uairsin tòisichidh sinn a’ faighinn logaichean bhon tagradh, agus tha Skaffold a ’feitheamh ri atharrachaidhean gus na gnìomhan gu lèir ath-aithris a-rithist.
Dealbh de na prìomh ìrean de obrachadh Skaffold
Cleachdaich. A' feuchainn ri Skaffold
Gus cleachdadh Skaffold a nochdadh, gabhaidh mi eisimpleir bho Stòr-tasgaidh pròiseact GitHub. A bharrachd air an sin, ann Gheibh thu mòran eisimpleirean eile a bheir aire do dhiofar fheartan sònraichte. Nì mi a h-uile gnìomh gu h-ionadail ann am Minikube. Tha an stàladh sìmplidh agus bheir e beagan mhionaidean, agus feumaidh tu kubectl airson tòiseachadh.
Dèanamaid clonadh air stòr Skaffold leis na h-eisimpleirean riatanach:
git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/microservices
Thagh mi eisimpleir le dà shlat, gach fear le aon iarrtas beag Go. Is e aon iarrtas an aghaidh (leeroy-web), a bhios ag ath-stiùireadh an iarrtais chun dàrna tagradh - an backend (leeroy-app). Feuch sinn cò ris a tha e coltach:
tha còd Go agus faidhlichean Docker sìmplidh airson a’ chòd seo a thogail gu h-ionadail ann an leeroy-app agus leeroy-web:
~/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 .
Cha toir mi an còd tagraidh - tha e gu leòr fios a bhith agad air sin leeroy-web gabhail ri iarrtasan agus a’ toirt cead dhaibh leeroy-app. Mar sin anns na faidhlichean Deployment.yaml chan eil ann ach seirbheis airson app (airson slighe a-staigh). port pod web cuiridh sinn air adhart e thugam fhìn airson faighinn gu sgiobalta chun tagradh.
Tha na h-ìrean gu h-àrd air am mìneachadh an seo. A bharrachd air an rèiteachadh seo, tha faidhle ann cuideachd le roghainnean cruinneil - ~/.skaffold/config. Faodar a dheasachadh le làimh neo tron CLI - mar eisimpleir, mar seo:
skaffold config set --global local-cluster true
Suidhichidh an àithne seo an caochladair cruinne local-cluster ann an ciall true, às deidh sin cha bhith Skaffold a’ feuchainn ri dealbhan a phutadh chun chlàr iomallach. Ma tha thu a’ leasachadh gu h-ionadail, faodaidh tu an àithne seo a chleachdadh gus dealbhan a thogail gu h-ionadail.
Air ais gu skaffold.yaml:
Air an àrd-ùrlar build tha sinn a’ sònrachadh gum feum thu an dealbh a chruinneachadh agus a shàbhaladh gu h-ionadail. Às deidh an togail ruith airson a’ chiad uair, chì sinn na leanas:
// т.к. 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
Mar a chì thu, chuir Skaffold tagaichean air na h-ìomhaighean fhèin. Air an t-slighe, tha grunn phoileasaidhean tagaidh a 'faighinn taic.
Nas fhaide air adhart san config tha e air a chomharrachadh context: ./leeroy-app/, i.e. tha an co-theacsa anns a bheil an ìomhaigh air a chruinneachadh air a shònrachadh.
Aig an ìre cleachdadh, tha e air a dhearbhadh gun cleachd sinn kubectl agus masg airson na taisbeanaidhean riatanach.
PortForward: coltach ri mar a bhios sinn mar as trice air adhart puirt a 'cleachdadh kubectl port-forward, bheir sinn stiùireadh do Skaffold an àithne seo a ghairm. Anns a 'chùis seo, thèid port ionadail 9000 a chuir air adhart gu 8080 ann an cleachdadh leis an ainm leeroy-web.
Tha an t-àm ann a chuir air bhog skaffold dev: Cruthaichidh an sgioba “lùb fios-air-ais” leantainneach, i.e. chan e a-mhàin gun cruinnich e a h-uile càil agus gun cuir e a-steach e don bhuidheann, ach innsidh e dhut cuideachd mu staid nam pods an-dràsta, a’ cumail sùil air atharrachaidhean agus ag ùrachadh staid nam pods.
Seo an toradh tòiseachaidh skaffold dev --port-forward nuair a bhios tu ag ath-chruinneachadh:
An toiseach, chì thu gu bheil an tasgadan ga chleachdadh. An ath rud, tha an tagradh air a chruinneachadh, air a chuir a-steach, agus tha puirt air an cur air adhart. Bhon a chaidh a shònrachadh --port-forward, Chuir Skaffold am port air adhart gu web, mar dh' iarradh air, ach an so app thilg e air a thoil fhèin (thagh e am fear saor as fhaisge). Às dèidh seo, gheibh sinn a 'chiad logaichean bho na h-aplacaidean.
Feuch an dèan sinn cinnteach a bheil e ag obair?
~/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!!!
Ag atharrachadh am faidhle leeroy-app/app.go - beagan diogan seachad ... agus:
~/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!!!
Aig an aon àm, sheall Skaffold fhèin an aon rud anns a’ chonsail agus a bha e roimhe, ach a-mhàin aon phuing: cha deach a sgaoileadh ach leeroy-app, agus chan ann aig an aon àm.
Tuilleadh cleachdaidh
Is fhiach a ràdh cuideachd nuair a chruthaicheas tu pròiseact ùr, faodar configs airson Skaffold a chuir air adhart leis an àithne init, a tha gu math goireasach. A bharrachd air an sin, faodaidh tu grunn configs a sgrìobhadh: leasachadh a dhèanamh air an rèiteachadh bunaiteach, agus an uairsin a chuir a-mach chun àrd-ùrlar leis an àithne run (pròiseas co-ionann ri dev, dìreach gun a bhith a’ cumail sùil air atharrachaidhean), a’ cleachdadh config eadar-dhealaichte.
Air katacoda tha stiùireadh Tha e eadhon nas fhasa le eisimpleir. Ach tha e a’ tabhann bogsa gainmhich deiseil le Kubernetes, tagradh agus Skaffold. Deagh roghainn ma tha ùidh agad na rudan bunaiteach fheuchainn thu fhèin.
Is e aon chùis cleachdaidh a dh’ fhaodadh a bhith ann airson Skaffold leasachadh a dhèanamh air cruinneachadh iomallach. Chan eil a h-uile duine comhfhurtail a ’ruith Minikube air a’ bhathar-cruaidh aca fhèin, an uairsin a ’sgaoileadh an aplacaid agus an dùil gun obraich e gu h-iomchaidh ... Anns a’ chùis seo, bidh Skaffold a ’fuasgladh na duilgheadas gu foirfe, a dh’ fhaodar a dhearbhadh, mar eisimpleir, le innleadairean Reddit, mar a tha againn. air a dheasbad mu thràth sgrìobh anns a' bhlog againn.
Рђ РІ am foillseachadh seo bho Weaveworks gheibh thu eisimpleir de bhith a’ cruthachadh loidhne-phìoban airson cinneasachadh.
co-dhùnadh
Tha Skaffold na inneal goireasach airson pìoban a thogail a tha a’ toirt a-steach cleachdadh thagraidhean gu Kubernetes agus a tha gu sònraichte ag amas air feumalachdan leasachaidh. Tha e ga dhèanamh gu math furasta loidhne-phìoban “goirid” a chruthachadh a bheir aire do fheumalachdan bunaiteach an leasaiche, ach ma thogras tu, faodaidh tu pròiseasan nas motha a chuir air dòigh. Mar aon de na h-eisimpleirean soilleir de bhith a’ cleachdadh Skaffold ann am pròiseasan CI/CD air a thoirt seachad leithid de pròiseact deuchainn de 10 microservices a’ cleachdadh comasan Kubernetes, gRPC, Istio agus OpenCensus Tracing.
Tha faisg air 8000+ rionnag aig Skaffold mu thràth air GitHub, air a leasachadh le Google agus tha e na phàirt de GoogleContainerTools - san fharsaingeachd, aig an àm seo tha a h-uile adhbhar ann a bhith a’ creidsinn gun tig am pròiseact air adhart gu toilichte gu bràth.