Ni ọdun kan ati idaji sẹhin, ni Oṣu Kẹta Ọjọ 5, Ọdun 2018, Google ṣe ifilọlẹ ẹya alpha akọkọ ti iṣẹ akanṣe Orisun Orisun rẹ fun CI/CD ti a pe Skaffold, ẹniti ibi-afẹde rẹ ni lati ṣẹda “idagbasoke Kubernetes ti o rọrun ati atunṣe” ki awọn olupilẹṣẹ le dojukọ idagbasoke dipo iṣakoso. Ohun ti o le jẹ awon nipa Skaffold? Bi o ti wa ni jade, o ni awọn ẹtan diẹ soke ti o le jẹ ki o jẹ ohun elo ti o lagbara fun olupilẹṣẹ, ati boya paapaa ẹlẹrọ iṣẹ. Jẹ ki a ni imọran pẹlu iṣẹ akanṣe ati awọn agbara rẹ.
NB: Nipa ọna, a ti sọrọ ni ṣoki nipa Skaffold ni gbogbogbo wa awotẹlẹ ti Olùgbéejáde irinṣẹ, ti igbesi aye rẹ ni asopọ pẹlu Kubernetes.
Ilana. Idi ati awọn agbara
Nitorinaa, ni sisọ gbogbogbo, Skaffold yanju iṣoro ti adaṣe adaṣe CI / CD ọmọ (ni kikọ, titari, awọn ipele imuṣiṣẹ), fifun awọn esi iyara ti olupilẹṣẹ, ie. agbara lati yara gba abajade ti awọn iyipada koodu atẹle - ni irisi ohun elo imudojuiwọn ti n ṣiṣẹ ni iṣupọ Kubernetes. Ati pe o le ṣiṣẹ ni awọn iyika oriṣiriṣi (dev, ipele, iṣelọpọ ...), eyiti Skaffold ṣe iranlọwọ lati ṣe apejuwe awọn pipeline ti o baamu fun yiyi.
Koodu orisun Skaffold ti kọ ni Go, pin nipasẹ labẹ iwe-aṣẹ Apache ọfẹ 2.0 (GitHub).
Jẹ ki a wo awọn iṣẹ akọkọ ati awọn ẹya ara ẹrọ. Ni akọkọ pẹlu awọn wọnyi:
Skaffold nfunni awọn irinṣẹ fun ṣiṣẹda awọn opo gigun ti CI/CD.
Gba ọ laaye lati ṣe atẹle awọn ayipada ninu koodu orisun ni abẹlẹ ati ṣiṣe ilana adaṣe adaṣe ti iṣakojọpọ koodu sinu awọn aworan eiyan, titẹjade awọn aworan wọnyi ni iforukọsilẹ Docker ati gbigbe wọn lọ si iṣupọ Kubernetes.
Mu awọn faili ṣiṣẹpọ ni ibi ipamọ pẹlu itọsọna iṣẹ ninu apo eiyan.
Ṣe idanwo ni adaṣe ni lilo apoti-igbeyewo-igbeyewo.
Awọn ebute oko siwaju.
Ka awọn akọọlẹ ti ohun elo ti n ṣiṣẹ ninu apoti kan.
Ṣe iranlọwọ ni awọn ohun elo ti n ṣatunṣe aṣiṣe ti a kọ sinu Java, Node.js, Python, Go.
Bayi nipa awọn ẹya ara ẹrọ:
Skaffold funrararẹ ko ni awọn paati ẹgbẹ-iṣupọ. Iyẹn ni, ko si iwulo lati tunto Kubernetes siwaju sii lati lo ohun elo yii.
Awọn pipeline oriṣiriṣi fun ohun elo rẹ. Ṣe o nilo lati yi koodu naa jade si Minikube agbegbe lakoko ti o n dagbasoke, ati lẹhinna si ipele tabi iṣelọpọ? Fun idi eyi ni o wa awọn profaili ati awọn atunto olumulo, awọn oniyipada ayika ati awọn asia, eyiti o gba ọ laaye lati ṣe apejuwe awọn opo gigun ti o yatọ fun ohun elo kan.
CLI. IwUlO console nikan ati awọn atunto ni YAML. Lori Intanẹẹti o le wa awọn itọkasi si awọn igbiyanju lati ṣẹda esiperimenta GUI, sibẹsibẹ, ni akoko yi julọ seese o kan tumo si wipe ẹnikan nilo rẹ, sugbon ko gan.
Modularity. Skaffold kii ṣe olukore imurasilẹ, ṣugbọn ngbiyanju lati lo awọn modulu kọọkan tabi awọn solusan ti o wa tẹlẹ fun awọn iṣẹ ṣiṣe kan pato.
Apejuwe ti igbehin:
Ni ipele apejọ o le lo:
docker kọ ni agbegbe, ninu iṣupọ nipa lilo kaniko tabi ni Google Cloud Build;
Bazel ni agbegbe;
Jib Maven ati Jib Gradle ni agbegbe tabi ni Google Cloud Build;
aṣa Kọ awọn iwe afọwọkọ nṣiṣẹ tibile. Ti o ba nilo lati ṣiṣẹ miiran (diẹ rọ / faramọ /…) kọ ojutu, o jẹ apejuwe ninu iwe afọwọkọ ki Skaffold ṣe ifilọlẹ (apẹẹrẹ lati iwe). Eleyi faye gba o lati lo eyikeyi-odè ti o le wa ni a npe ni lilo a akosile;
Ṣeun si eyi, Skaffold le pe ni alailẹgbẹ ilana fun Ilé CI / CD. Eyi jẹ apẹẹrẹ ṣiṣiṣẹsẹhin nigba lilo rẹ (lati inu iwe iṣẹ akanṣe):
Kini iṣẹ Skaffold dabi ni awọn ofin gbogbogbo?
IwUlO n ṣe abojuto awọn ayipada ninu ilana koodu orisun. Ti awọn iyipada ba ṣe si awọn faili, wọn ti muuṣiṣẹpọ pẹlu adarọ-ese ohun elo ninu iṣupọ Kubernetes. Ti o ba ṣeeṣe, laisi atunto aworan naa. Bibẹẹkọ, aworan tuntun ti ṣajọpọ.
Aworan ti o pejọ jẹ ayẹwo ni lilo apoti-igbeyewo-igbeyewo, ti samisi ati firanṣẹ si Iforukọsilẹ Docker.
Lẹhin eyi, aworan ti wa ni ransogun - ransogun ni Kubernetes iṣupọ.
Ti o ba ti bẹrẹ ifilọlẹ naa nipa lilo aṣẹ naa skaffold dev, lẹhinna a bẹrẹ gbigba awọn igbasilẹ lati inu ohun elo naa, ati Skaffold duro fun awọn ayipada lati tun gbogbo awọn iṣe ṣe lẹẹkansi.
Apejuwe ti awọn ipele akọkọ ti iṣẹ Skaffold
Iwaṣe. Gbiyanju Skaffold
Lati ṣe afihan lilo Skaffold, Emi yoo gba apẹẹrẹ lati Ibi ipamọ ise agbese GitHub. Bi o ti le je pe, Nibẹ O le wa ọpọlọpọ awọn apẹẹrẹ miiran ti o ṣe akiyesi ọpọlọpọ awọn pato. Emi yoo ṣe gbogbo awọn iṣe ni agbegbe ni Minikube. Fifi sori jẹ rọrun ati gba iṣẹju diẹ, ati pe iwọ yoo nilo kubectl lati bẹrẹ.
Jẹ ki a ṣe ẹda ibi ipamọ Skaffold pẹlu awọn apẹẹrẹ pataki:
git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/microservices
Mo yan apẹẹrẹ pẹlu awọn podu meji, ọkọọkan ti o ni ohun elo Go kekere kan ninu. Ohun elo kan ni iwaju iwaju (leeroy-web), eyiti o ṣe atunṣe ibeere si ohun elo keji - ẹhin (leeroy-app). Jẹ ká wo bi o ti ri:
leeroy-app ati leeroy-web ni koodu Go ati Dockerfiles ti o rọrun fun kikọ koodu yii ni agbegbe:
~/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 .
Emi kii yoo fun koodu ohun elo - o to lati mọ iyẹn leeroy-web gba ibeere ati proxies wọn si leeroy-app. Nitorina ninu awọn faili Deployment.yaml Iṣẹ kan wa fun nikan app (fun ti abẹnu afisona). Pod ibudo web a yoo firanṣẹ si ara wa fun iraye yara si ohun elo naa.
Gbogbo awọn ipele ti a mẹnuba loke ti wa ni apejuwe nibi. Ni afikun si atunto yii, faili tun wa pẹlu awọn eto agbaye - ~/.skaffold/config. O le ṣe atunṣe pẹlu ọwọ tabi nipasẹ CLI - fun apẹẹrẹ, bii eyi:
skaffold config set --global local-cluster true
Aṣẹ yii yoo ṣeto oniyipada agbaye local-cluster sinu itumo true, lẹhin eyi Skaffold kii yoo gbiyanju lati Titari awọn aworan si iforukọsilẹ latọna jijin. Ti o ba n dagbasoke ni agbegbe, o le lo aṣẹ yii lati kọ awọn aworan ni agbegbe.
Pada si skaffold.yaml:
Lori ipele build a pato pe o nilo lati gba ati fi aworan pamọ ni agbegbe. Lẹhin ṣiṣe ṣiṣe fun igba akọkọ, a yoo rii atẹle naa:
// т.к. 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
Bi o ti le rii, Skaffold ṣe aami si awọn aworan funrararẹ. Nipa ọna, ọpọlọpọ awọn ilana fifi aami le ni atilẹyin.
Siwaju sii ninu atunto o jẹ itọkasi context: ./leeroy-app/, i.e. awọn ti o tọ ninu eyi ti awọn aworan ti wa ni gba ti wa ni pato.
Ni ipele imuṣiṣẹ, o pinnu pe a yoo lo kubectl ati iboju-boju fun awọn ifihan pataki.
PortForward: iru si bi a ti maa n dari awọn ibudo lilo kubectl port-forward, a fun awọn itọnisọna si Skaffold lati pe aṣẹ yii. Ni idi eyi, ibudo agbegbe 9000 ti wa ni gbigbe si 8080 ni Imuṣiṣẹ pẹlu orukọ leeroy-web.
O to akoko lati ṣe ifilọlẹ skaffold dev: Ẹgbẹ naa yoo ṣẹda “loop esi” ti nlọ lọwọ, i.e. kii ṣe pe yoo gba ohun gbogbo nikan ki o gbe lọ si iṣupọ, ṣugbọn yoo tun sọ fun ọ nipa ipo awọn adarọ-ese ni akoko, ṣe atẹle awọn ayipada ati mu ipo awọn adarọ-ese naa dojuiwọn.
Eyi ni abajade ifilọlẹ skaffold dev --port-forward nigbati atunto:
Ni akọkọ, o le rii pe a nlo kaṣe naa. Nigbamii ti, ohun elo naa ti pejọ, ti ran lọ, ati awọn ebute oko oju omi ti firanṣẹ siwaju. Niwon pato --port-forward, Skaffold dari ibudo si web, bi o ti beere, sugbon nibi app o jabọ lori ara rẹ lakaye (yan awọn sunmọ free). Lẹhin eyi, a gba awọn akọọlẹ akọkọ lati awọn ohun elo naa.
Jẹ ki a ṣayẹwo ti o ba ṣiṣẹ?
~/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!!!
Iyipada faili leeroy-app/app.go - iṣẹju diẹ kọja ati:
~/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!!!
Ni akoko kanna, Skaffold funrararẹ ṣafihan ohun kanna ninu console bi iṣaaju, ayafi ti aaye kan: o ti yiyi jade nikan leeroy-app, ati ki o ko gbogbo ni ẹẹkan.
Iwa diẹ sii
O tun tọ lati darukọ pe nigba ṣiṣẹda iṣẹ akanṣe tuntun, awọn atunto fun Skaffold le jẹ bata pẹlu lilo aṣẹ naa. init, eyiti o rọrun pupọ. Ni afikun, o le kọ ọpọlọpọ awọn atunto: ṣe idagbasoke lori atunto aiyipada, ati lẹhinna yi lọ si ipele pẹlu aṣẹ naa. run (ilana kanna bi dev, o kan ko ṣe atẹle awọn ayipada), ni lilo atunto oriṣiriṣi.
Lori katacoda wa isakoso O rọrun paapaa pẹlu apẹẹrẹ. Ṣugbọn o funni ni apoti iyanrin ti a ti ṣetan pẹlu Kubernetes, ohun elo ati Skaffold. Aṣayan nla ti o ba nifẹ lati gbiyanju awọn ipilẹ pupọ funrararẹ.
Ọkan ọran lilo ti o ṣeeṣe fun Skaffold ni lati ṣe idagbasoke lori iṣupọ latọna jijin. Kii ṣe gbogbo eniyan ni itunu lati ṣiṣẹ Minikube lori ohun elo ti ara wọn, lẹhinna yiyi ohun elo naa jade ati nireti pe yoo ṣiṣẹ ni deede… Ni idi eyi, Skaffold yanju iṣoro naa ni pipe, eyiti o le jẹrisi, fun apẹẹrẹ, nipasẹ awọn onimọ-ẹrọ Reddit, bi a ti ni. tẹlẹ sísọ kọwe ninu wa bulọọgi.
Ati ni atejade yii lati Weaveworks o le wa apẹẹrẹ ti ṣiṣẹda opo gigun ti epo fun iṣelọpọ.
ipari
Skaffold jẹ ohun elo irọrun fun kikọ awọn opo gigun ti epo ti o kan yiyi awọn ohun elo jade si Kubernetes ati pe o ni idojukọ akọkọ lori awọn iwulo idagbasoke. O jẹ ki o rọrun pupọ lati ṣẹda opo gigun ti epo “kukuru” ti o ṣe akiyesi awọn iwulo ipilẹ ti olupilẹṣẹ, ṣugbọn ti o ba fẹ, o le ṣeto awọn ilana nla. Gẹgẹbi ọkan ninu awọn apẹẹrẹ ti o han gbangba ti lilo Skaffold ni awọn ilana CI/CD ti wa ni fun iru igbeyewo ise agbese ti 10 microservices lilo awọn agbara ti Kubernetes, gRPC, Istio ati OpenCensus Tracing.
Skaffold tẹlẹ ti fẹrẹ to awọn irawọ 8000+ lori GitHub, jẹ idagbasoke nipasẹ Google ati pe o jẹ apakan ti GoogleContainerTools - ni gbogbogbo, ni akoko ti o wa ni gbogbo idi lati gbagbo pe ise agbese yoo se agbekale inudidun lailai lẹhin.