Wongororo yeSkaffold yeKubernetes budiriro

Wongororo yeSkaffold yeKubernetes budiriro

Gore nehafu rapfuura, munaKurume 5, 2018, Google yakaburitsa yekutanga alpha vhezheni yayo Open Source purojekiti yeCI/CD inonzi. Skaffold, avo vavariro yavo yaive yekugadzira "zvakareruka uye zvinodzokororwa Kubernetes budiriro" kuitira kuti vanogadzira vatarise kusimudzira kwete kutonga. Chii chingave chinonakidza nezveSkaffold? Sezvazvinozoitika, ine mashoma manomano kumusoro kwayo iyo inogona kuiita chishandiso chine simba kumugadziri, uye pamwe kunyangwe injiniya yekushanda. Ngatizivei nezve purojekiti uye kugona kwayo.

NB: Nenzira, takatotaura muchidimbu nezveSkaffold mune yedu general kuongororwa kwezvishandiso zvemugadziri, vane hupenyu hwakabatana neKubernetes.

Dzidziso. Chinangwa uye kugona

Saka, kazhinji kutaura, Skaffold inogadzirisa dambudziko rekuita otomatiki kutenderera kweCI/CD (pakuvaka, kusunda, kuendesa matanho), ichipa mugadziri wemhinduro yekukurumidza, i.e. kugona kukurumidza kugamuchira mhedzisiro yeanotevera kodhi shanduko - muchimiro cheyakagadziridzwa application inomhanya muKubernetes cluster. Uye inogona kushanda mumasekete akasiyana (dev, nhanho, kugadzirwa ...), iyo Skaffold inobatsira kutsanangura mapaipi anoenderana ekuburitsa.

Skaffold's source code yakanyorwa muGo, inoparadzirwa ne pasi pemahara Apache License 2.0 (GitHub).

Ngatitarisei mabasa makuru uye maitiro. Yekutanga inosanganisira zvinotevera:

  • Skaffold inopa maturusi ekugadzira CI/CD mapaipi.
  • Inokutendera kuti utarise shanduko mune kodhi kodhi kumashure uye kumhanya otomatiki maitiro ekuunganidza kodhi mumidziyo mifananidzo, kuburitsa iyi mifananidzo muDocker Registry uye nekuiendesa kune Kubernetes cluster.
  • Inowiriranisa mafaera mudura nedhairekitori rekushanda mumudziyo.
  • Edza otomatiki uchishandisa mudziyo-chimiro-bvunzo.
  • Forwards ports.
  • Inoverenga matanda ekushandisa ari mugaba.
  • Inobatsira mukugadzirisa zvikumbiro zvakanyorwa muJava, Node.js, Python, Go.

Zvino nezve maficha:

  • Skaffold pachayo haina cluster-side components. Ndiko kuti, hapana chikonzero chekuwedzera kugadzirisa Kubernetes kushandisa iyi yekushandisa.
  • Mapaipi akasiyana ekushandisa kwako. Iwe unofanirwa kuburitsa kodhi kune yemuno Minikube iwe uchigadzira, uye wozoenda pachinhanho kana kugadzira? Nechinangwa ichi pane profiles uye zvigadziriso zvemushandisi, nharaunda dzakasiyana uye mireza, izvo zvinokutendera iwe kutsanangura mapaipi akasiyana kune imwe application.
  • CLI. Chete console utility uye zvigadziriso muYAML. PaInternet unogona kuwana mareferensi ekuedza kugadzira yekuedza GUI, zvisinei, panguva ino izvi zvingangoreva chete kuti mumwe munhu anomuda, asi kwete chaizvoizvo.
  • Modularity. Skaffold haisi yekukohwa yakamira yega, asi inovavarira kushandisa mamodule ega kana mhinduro dziripo dzemamwe mabasa.

Mufananidzo wekupedzisira:

  • Muchikamu chekutanga unogona kushandisa:
    • docker inovaka munharaunda, musumbu uchishandisa kaniko kana muGoogle Cloud Build;
    • Bazel locally;
    • Jib Maven naJib Gradle munharaunda kana muGoogle Cloud Build;
    • tsika kuvaka zvinyorwa zvinomhanya munharaunda. Kana iwe uchida kumhanyisa imwe (inochinjika / yakajairwa /...) kuvaka mhinduro, inotsanangurwa mune script kuitira kuti Skaffold itange iyo (muenzaniso kubva pazvinyorwa) Izvi zvinokubvumira kushandisa chero muunganidzi anogona kunzi uchishandisa script;
  • Padanho rekuyedza, izvo zvatotaurwa mudziyo-chimiro-bvunzo;
  • Kuti zvitumirwe zvinotevera zvinopihwa:
    • Kubectl;
    • Helm;
    • gadzirisa.

Nekuda kweizvi, Skaffold inogona kunzi yakasarudzika chimiro chekuvaka CI/CD. Heino muenzaniso wekufambisa kana uchiishandisa (kubva pane zvinyorwa zveprojekiti):

Wongororo yeSkaffold yeKubernetes budiriro

Basa raSkaffold rinotaridzika sei mune zvakajairika?

  1. Iyo yekushandisa monitors inochinja mune source code dhairekitori. Kana magadzirirwo akaitwa kumafaira, anowiriraniswa neiyo application pod muKubernetes cluster. Kana zvichibvira, pasina kubatanidzazve mufananidzo. Zvikasadaro, chifananidzo chitsva chinounganidzwa.
  2. Mufananidzo wakaunganidzwa unotariswa uchishandisa mudziyo-chimiro-bvunzo, wamaka uye unotumirwa kuDocker Registry.
  3. Mushure meizvi, chifananidzo chinoiswa - chakaiswa muKubernetes cluster.
  4. Kana kuvhurwa kwakatangwa uchishandisa murairo skaffold dev, ipapo tinotanga kugamuchira matanda kubva pachikumbiro, uye Skaffold inomirira shanduko kuti idzokorore zviito zvese zvakare.

Wongororo yeSkaffold yeKubernetes budiriro
Mufananidzo wematanho makuru eSkaffold oparesheni

Dzidzira. Kuedza Skaffold

Kuratidza kushandiswa kweSkaffold, ini ndichatora muenzaniso kubva GitHub purojekiti repository. Zviya, ikoko Iwe unogona kuwana mimwe mienzaniso yakawanda iyo inofunga zvakasiyana zvakasiyana. Ini ndichaita zvese zviito munharaunda muMinikube. Kuisa kuri nyore uye kunotora maminetsi mashoma, uye iwe uchada kubectl kuti utange.

Isa Skaffold:

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.1

Ngatitorei repository yeSkaffold nemienzaniso inodiwa:

git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/microservices

Ndakasarudza muenzaniso nemapodhi maviri, imwe neimwe iine imwe diki Go application. Imwe application ndeyekumberi (leeroy-web), iyo inodzosera chikumbiro kune yechipiri application - iyo backend (leeroy-app). Ngatione kuti zvinoita sei:

~/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 directories, 8 files

leeroy-app uye leeroy-web ine Go kodhi uye akareruka Dockerfiles ekuvaka iyi kodhi munharaunda:

~/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 .

Ini handisi kuzopa kodhi yekushandisa - zvakakwana kuziva izvozvo leeroy-web inogamuchira zvikumbiro uye inozvitumira kune leeroy-app. Saka mune mafaira Deployment.yaml pane Sevhisi chete app (yekutenderera kwemukati). Pod port web isu tichazvitumira kune isu kuti tiwane nekukurumidza kune application.

Zvinotarisa 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

Matanho ese ataurwa pamusoro anotsanangurwa pano. Pamusoro peiyo gadziriso, kune zvakare faira rine pasi rose marongero - ~/.skaffold/config. Inogona kugadziridzwa nemaoko kana kuburikidza neCLI - semuenzaniso, seizvi:

skaffold config set --global local-cluster true

Uyu murairo uchaisa shanduko yepasi rose local-cluster muchirevo true, mushure mezvo Skaffold haizoedzi kusundira mifananidzo kune kure registry. Kana iwe uri kusimudzira munharaunda, unogona kushandisa murairo uyu kuvaka mifananidzo munharaunda.

Dzokera ku skaffold.yaml:

  • Padariro build isu tinotsanangura kuti iwe unofanirwa kuunganidza uye kuchengetedza chifananidzo munharaunda. Mushure mekunge kuvaka kwaita kekutanga, tichaona zvinotevera:
    // т.к. 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

    Sezvauri kuona, Skaffold akamaka iyo mifananidzo pachake. Nenzira, mitemo yakawanda yekumaka inotsigirwa.

  • Kuwedzera mune iyo config inoratidzwa context: ./leeroy-app/, i.e. mamiriro ezvinhu umo mufananidzo unounganidzwa unotsanangurwa.
  • Padanho rekuendesa, zvinotemerwa kuti isu tichashandisa kubectl uye mask kune inodiwa inoratidzira.
  • PortForward: zvakafanana nemaitiro atinowanzo kuendesa madoko tichishandisa kubectl port-forward, tinopa mirairo kuSkaffold kudana uyu murairo. Muchiitiko ichi, chiteshi chemuno 9000 chinoendeswa kune 8080 muDeployment ine zita. leeroy-web.

Yasvika nguva yekutanga skaffold dev: Chikwata chichagadzira inoenderera mberi "feedback loop", i.e. kwete chete iyo ichaunganidza zvese nekuzviendesa kune sumbu, asi zvakare ichakuudza nezve mamiriro emapods panguva ino, tarisa shanduko uye kugadzirisa mamiriro epods.

Heino mhedzisiro yekuvhurwa skaffold dev --port-forward pakuunganidza zvakare:

Wongororo yeSkaffold yeKubernetes budiriro

Kutanga, iwe unogona kuona kuti cache iri kushandiswa. Tevere, chishandiso chinounganidzwa, chinoiswa, uye madoko anotumirwa. Kubva zvatsanangurwa --port-forward, Skaffold akaendesa chiteshi kune web, sezvaakabvunzwa, asi pano app akakanda pakuda kwake (akasarudza ari pedyo akasununguka). Mushure meizvi, tinogashira matanda ekutanga kubva kune zvikumbiro.

Ngatitarisei kuti inoshanda here?

~/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!!!

Kugadzirisa faira leeroy-app/app.go - masekonzi mashoma anopfuura ... uye:

~/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!!!

Panguva imwecheteyo, Skaffold pachayo yakaratidza chinhu chimwe chete mukoni sepakutanga, kunze kwepoindi imwe chete: yakangobuda. leeroy-app, uye kwete zvose panguva imwe chete.

More kudzidzira

Izvo zvakakoshawo kutaura kuti kana uchigadzira purojekiti nyowani, configs yeSkaffold inogona kubhutsurwa uchishandisa rairo. init, iyo iri nyore kwazvo. Uye zvakare, iwe unogona kunyora akati wandei ma configs: ita budiriro pane default config, uye wobva wabuda kuenda pachikuva nemurairo. run (maitiro akafanana ne dev, haingotarise shanduko), uchishandisa imwe gadziriso.

Pa katacoda pane gwara Zvakatonyanya nyore nemuenzaniso. Asi inopa yakagadzirira-yakagadzirwa bhokisi rejecha neKubernetes, application uye Skaffold. Sarudzo huru kana iwe uchida kuyedza izvo zvakakosha iwe pachako.

Imwe inogona kushandiswa kesi yeSkaffold ndeyekuita budiriro pane iri kure cluster. Haasi munhu wese akasununguka kumhanyisa Minikube pane yavo hardware, vobva vaburitsa iyo application uye vachitarisira kuti ishande zvakaringana ... Muchiitiko ichi, Skaffold inogadzirisa dambudziko racho zvakakwana, izvo zvinogona kusimbiswa, semuenzaniso, nevanjiniya veReddit, sezvatakaita. zvatokurukurwa akanyora mu blog yedu.

Uye mukati chinyorwa ichi kubva kuWeaveworks unogona kuwana muenzaniso wekugadzira pombi yekugadzira.

mhedziso

Skaffold chishandiso chiri nyore chekuvaka mapaipi anosanganisira kuburitsa zvikumbiro kuKubernetes uye anonyanya kutarisana nezvinodiwa zvebudiriro. Zvinoita kuti zvive nyore kugadzira pombi "pfupi" iyo inofunga nezve zvakakosha zvemugadziri, asi kana zvichidikanwa, unogona kuronga maitiro akakura. Semumwe wemienzaniso yakajeka yekushandisa Skaffold muCI / CD maitiro anopiwa wakadaro test project yegumi microservices uchishandisa kugona kweKubernetes, gRPC, Istio uye OpenCensus Tracing.

Skaffold yatove neinoda kusvika 8000+ nyeredzi paGitHub, inogadzirwa neGoogle uye chikamu che GoogleContainerTools - kazhinji, panguva ino pane chikonzero chekutenda kuti chirongwa ichi chichakura nerufaro zvachose.

PS

Verenga zvakare pablog yedu:

Source: www.habr.com

Voeg