Adolygiad o Skaffold ar gyfer datblygiad Kubernetes
Flwyddyn a hanner yn ôl, ar Fawrth 5, 2018, rhyddhaodd Google y fersiwn alffa gyntaf o'i brosiect CI / CD Ffynhonnell Agored o'r enw Sgaffald, a'i nod oedd creu “datblygiad Kubernetes syml ac ailadroddadwy” fel y gallai datblygwyr ganolbwyntio ar ddatblygu yn hytrach na gweinyddu. Beth allai fod yn ddiddorol am Skaffold? Fel mae'n digwydd, mae ganddo ychydig o driciau i fyny ei lawes a all ei wneud yn arf pwerus i'r datblygwr, ac efallai hyd yn oed y peiriannydd gweithrediadau. Gadewch i ni ddod yn gyfarwydd â'r prosiect a'i alluoedd.
NB: Gyda llaw, rydym eisoes wedi siarad yn fyr am Skaffold yn ein cyffredinol adolygiad o offer datblygwyr, y mae eu bywydau yn gysylltiedig â Kubernetes.
Damcaniaeth. Pwrpas a galluoedd
Felly, yn gyffredinol, mae Skaffold yn datrys y broblem o awtomeiddio'r cylch CI/CD (yn y camau adeiladu, gwthio, defnyddio), gan gynnig adborth prydlon i'r datblygwr, h.y. y gallu i dderbyn canlyniad newidiadau cod dilynol yn gyflym - ar ffurf cais wedi'i ddiweddaru sy'n rhedeg yn y clwstwr Kubernetes. A gall weithio mewn gwahanol gylchedau (dev, llwyfan, cynhyrchu ...), y mae Skaffold yn helpu i ddisgrifio'r piblinellau cyfatebol ar gyfer cyflwyno.
Mae cod ffynhonnell Skaffold wedi'i ysgrifennu yn Go, dosbarthu gan o dan y Drwydded Apache 2.0 am ddim (GitHub).
Gadewch i ni edrych ar y prif swyddogaethau a nodweddion. Mae'r cyntaf yn cynnwys y canlynol:
Mae Skaffold yn cynnig offer ar gyfer creu piblinellau CI/CD.
Yn eich galluogi i fonitro newidiadau yn y cod ffynhonnell yn y cefndir a rhedeg proses awtomataidd o gydosod cod i ddelweddau cynhwysydd, gan gyhoeddi'r delweddau hyn yng Nghofrestrfa Docker a'u defnyddio i glwstwr Kubernetes.
Yn cydamseru ffeiliau yn yr ystorfa â'r cyfeiriadur gweithio yn y cynhwysydd.
Profion yn awtomatig gan ddefnyddio prawf strwythur cynhwysydd.
Ymlaen porthladdoedd.
Yn darllen logiau rhaglen sy'n rhedeg mewn cynhwysydd.
Yn helpu i ddadfygio cymwysiadau a ysgrifennwyd yn Java, Node.js, Python, Go.
Nawr am y nodweddion:
Nid oes gan Skaffold ei hun unrhyw gydrannau ochr clwstwr. Hynny yw, nid oes angen ffurfweddu Kubernetes ymhellach i ddefnyddio'r cyfleustodau hwn.
Piblinellau gwahanol ar gyfer eich cais. Oes angen i chi gyflwyno'r cod i Minikube lleol tra'ch bod chi'n datblygu, ac yna i'r llwyfan neu'r cynhyrchiad? At y diben hwn mae proffiliau a chyfluniadau defnyddwyr, newidynnau amgylchedd a baneri, sy'n eich galluogi i ddisgrifio gwahanol bibellau ar gyfer un cais.
CLI. Dim ond cyfleustodau consol a ffurfweddau yn YAML. Ar y Rhyngrwyd gallwch ddod o hyd i gyfeiriadau at ymdrechion i greu GUI arbrofol, fodd bynnag, ar hyn o bryd mae hyn yn fwyaf tebygol yn unig yn golygu bod rhywun ei angen, ond nid mewn gwirionedd.
Modiwlaidd. Nid yw Skaffold yn gynaeafwr annibynnol, ond mae'n ymdrechu i ddefnyddio modiwlau unigol neu atebion presennol ar gyfer tasgau penodol.
Darlun o'r olaf:
Yn y cam cydosod gallwch ddefnyddio:
adeiladu docwyr yn lleol, mewn clwstwr gan ddefnyddio kaniko neu yn Google Cloud Build;
Bazel yn lleol;
Jib Maven a Jib Gradle yn lleol neu yn Google Cloud Build;
sgriptiau adeiladu arfer yn rhedeg yn lleol. Os oes angen i chi redeg datrysiad adeiladu arall (mwy hyblyg/cyfarwydd/...), fe'i disgrifir yn y sgript fel bod Skaffold yn ei lansio (enghraifft o ddogfennaeth). Mae hyn yn caniatáu i chi ddefnyddio unrhyw gasglwr y gellir ei alw gan ddefnyddio sgript;
Diolch i hyn, gellir galw Skaffold yn unigryw fframwaith ar gyfer adeiladu CI/CD. Dyma enghraifft o lif gwaith wrth ei ddefnyddio (o ddogfennaeth y prosiect):
Sut olwg sydd ar waith Skaffold yn gyffredinol?
Mae'r cyfleustodau'n monitro newidiadau yn y cyfeiriadur cod ffynhonnell. Os gwneir addasiadau i'r ffeiliau, cânt eu cysoni â'r pod cais yng nghlwstwr Kubernetes. Os yn bosibl, heb ail-osod y ddelwedd. Fel arall, mae delwedd newydd yn cael ei chydosod.
Mae'r ddelwedd sydd wedi'i ymgynnull yn cael ei wirio gan ddefnyddio prawf strwythur-cynhwysydd, ei dagio a'i anfon i Gofrestrfa'r Docwyr.
Ar ôl hyn, mae'r ddelwedd yn cael ei defnyddio - yn cael ei defnyddio yng nghlwstwr Kubernetes.
Os cychwynnwyd y lansiad gan ddefnyddio'r gorchymyn skaffold dev, yna rydym yn dechrau derbyn logiau o'r cais, ac mae Skaffold yn aros am newidiadau i ailadrodd yr holl gamau gweithredu eto.
Darlun o brif gamau gweithrediad Skaffold
Ymarfer. Ceisio Skaffold
I ddangos y defnydd o Skaffold, cymeraf enghraifft o Ystorfa prosiect GitHub... Gyda llaw, yn yr un lle Gallwch ddod o hyd i lawer o enghreifftiau eraill sy'n ystyried gwahanol fanylion. Byddaf yn perfformio pob gweithred yn lleol yn Minikube. Mae'r gosodiad yn syml ac yn cymryd ychydig funudau, a bydd angen kubectl arnoch i ddechrau.
Gadewch i ni glonio ystorfa Skaffold gyda'r enghreifftiau angenrheidiol:
git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/microservices
Dewisais enghraifft gyda dau god, pob un yn cynnwys un cais Go bach. Un cymhwysiad yw'r frontend (leeroy-web), sy'n ailgyfeirio'r cais i'r ail gymhwysiad - y pen ôl (leeroy-app). Gawn ni weld sut olwg sydd arno:
mae leeroy-app a leeroy-web yn cynnwys cod Go a Dockerfiles syml ar gyfer adeiladu'r cod hwn yn lleol:
~/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 .
Ni fyddaf yn rhoi cod y cais - mae'n ddigon gwybod hynny leeroy-web yn derbyn ceisiadau ac yn eu dirprwyo iddynt leeroy-app. Felly yn y ffeiliau Deployment.yaml dim ond ar gyfer app (ar gyfer llwybro mewnol). Porth pod web byddwn yn ei anfon ymlaen atom ein hunain i gael mynediad cyflym i'r cais.
Disgrifir yr holl gamau uchod yma. Yn ogystal â'r ffurfwedd hon, mae yna hefyd ffeil gyda gosodiadau byd-eang - ~/.skaffold/config. Gellir ei olygu â llaw neu drwy'r CLI - er enghraifft, fel hyn:
skaffold config set --global local-cluster true
Bydd y gorchymyn hwn yn gosod y newidyn byd-eang local-cluster i mewn i ystyr true, ac ar ôl hynny ni fydd Skaffold yn ceisio gwthio delweddau i'r gofrestrfa bell. Os ydych chi'n datblygu'n lleol, gallwch chi ddefnyddio'r gorchymyn hwn i adeiladu delweddau yn lleol.
Nôl i skaffold.yaml:
Ar y llwyfan build rydym yn nodi bod angen i chi gasglu a chadw'r ddelwedd yn lleol. Ar ôl i'r gwaith adeiladu redeg am y tro cyntaf, byddwn yn gweld y canlynol:
// т.к. 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
Fel y gwelwch, tagiodd Skaffold y delweddau ei hun. Gyda llaw, cefnogir sawl polisi tagio.
Ymhellach yn y ffurfwedd fe'i nodir context: ./leeroy-app/, h.y. nodir y cyd-destun y cesglir y ddelwedd ynddo.
Ar y cam defnyddio, mae'n benderfynol y byddwn yn defnyddio kubectl a mwgwd ar gyfer y maniffestau angenrheidiol.
PortForward: yn debyg i sut yr ydym fel arfer yn anfon porthladdoedd ymlaen gan ddefnyddio kubectl port-forward, rydym yn rhoi cyfarwyddiadau i Skaffold i alw'r gorchymyn hwn. Yn yr achos hwn, mae porthladd lleol 9000 yn cael ei anfon ymlaen i 8080 mewn Defnydd gyda'r enw leeroy-web.
Mae'n amser lansio skaffold dev: Bydd y tîm yn creu “dolen adborth” barhaus, h.y. nid yn unig y bydd yn casglu popeth a'i anfon i'r clwstwr, ond bydd hefyd yn dweud wrthych am gyflwr y codennau ar hyn o bryd, yn monitro newidiadau ac yn diweddaru cyflwr y codennau.
Dyma ganlyniad y lansiad skaffold dev --port-forward wrth ail-gydosod:
Yn gyntaf, gallwch weld bod y storfa yn cael ei ddefnyddio. Nesaf, mae'r cais yn cael ei ymgynnull, ei ddefnyddio, ac mae porthladdoedd yn cael eu hanfon ymlaen. Ers y nodwyd --port-forward, Anfonodd Skaffold y porthladd i web, fel y gofynwyd iddo, ond yma app taflodd yn ôl ei ddisgresiwn ei hun (dewisodd yr un rhydd agosaf). Ar ôl hyn, rydym yn derbyn y logiau cyntaf o'r ceisiadau.
Gadewch i ni wirio a yw'n gweithio?
~/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!!!
Addasu'r ffeil leeroy-app/app.go - ychydig eiliadau yn mynd heibio... a:
~/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!!!
Ar yr un pryd, roedd Skaffold ei hun yn arddangos yr un peth yn y consol ag o'r blaen, ac eithrio un pwynt: dim ond ei gyflwyno leeroy-app, ac nid i gyd ar unwaith.
Mwy o ymarfer
Mae'n werth nodi hefyd, wrth greu prosiect newydd, y gellir cychwyn cyfluniadau ar gyfer Skaffold gan ddefnyddio'r gorchymyn init, sy'n gyfleus iawn. Yn ogystal, gallwch ysgrifennu sawl ffurfweddiad: cyflawni datblygiad ar y ffurfweddiad rhagosodedig, ac yna ei gyflwyno i'r llwyfan gyda'r gorchymyn run (yr un broses â dev, nid yw'n monitro newidiadau), gan ddefnyddio ffurfwedd wahanol.
Ar katacoda mae arweinyddiaeth Mae hyd yn oed yn haws gydag enghraifft. Ond mae'n cynnig blwch tywod parod gyda Kubernetes, cais a Skaffold. Opsiwn gwych os oes gennych ddiddordeb mewn rhoi cynnig ar y pethau sylfaenol eich hun.
Un achos defnydd posibl ar gyfer Skaffold yw cynnal datblygiad ar glwstwr anghysbell. Nid yw pawb yn gyfforddus yn rhedeg Minikube ar eu caledwedd eu hunain, yna'n cyflwyno'r cymhwysiad a disgwyl iddo weithio'n ddigonol ... Yn yr achos hwn, mae Skaffold yn datrys y broblem yn berffaith, y gellir ei gadarnhau, er enghraifft, gan beirianwyr Reddit, fel sydd gennym ni. a drafodwyd eisoes писали yn ein blog.
Ac yn y cyhoeddiad hwn o Weaveworks gallwch ddod o hyd i enghraifft o greu piblinell ar gyfer cynhyrchu.
Casgliad
Mae Skaffold yn offeryn cyfleus ar gyfer adeiladu piblinellau sy'n cynnwys cyflwyno ceisiadau i Kubernetes ac sy'n canolbwyntio'n bennaf ar anghenion datblygu. Mae'n ei gwneud hi'n eithaf hawdd creu piblinell “byr” sy'n ystyried anghenion sylfaenol y datblygwr, ond os dymunir, gallwch drefnu prosesau mwy. Fel un o'r enghreifftiau clir o ddefnyddio Skaffold mewn prosesau CI/CD yn cael ei roi o'r fath prosiect prawf o 10 microwasanaeth gan ddefnyddio galluoedd Kubernetes, gRPC, Istio ac OpenCensus Tracing.
Mae gan Skaffold eisoes bron i 8000+ o sêr ar GitHub, mae wedi'i ddatblygu gan Google ac mae'n rhan o GoogleContainerTools — yn gyffredinol, ar hyn o bryd mae pob rheswm i gredu y bydd y prosiect yn datblygu’n hapus byth wedyn.