Ndemanga ya Skaffold ya Kubernetes chitukuko

Ndemanga ya Skaffold ya Kubernetes chitukuko

Chaka ndi theka chapitacho, pa Marichi 5, 2018, Google idatulutsa mtundu woyamba wa alpha wa projekiti yake ya Open Source ya CI/CD yotchedwa. Skaffold, omwe cholinga chawo chinali kupanga "chitukuko chosavuta komanso chobwerezabwereza cha Kubernetes" kotero kuti opanga athe kuyang'ana pa chitukuko m'malo moyang'anira. Ndi chiyani chomwe chingakhale chosangalatsa ndi Skaffold? Zotsatira zake, ili ndi zidule zingapo zomwe zingapangitse kuti ikhale chida champhamvu kwa wopanga, ndipo mwina ngakhale injiniya wa ntchito. Tiyeni tidziwe bwino za polojekitiyi komanso kuthekera kwake.

NB: Mwa njira, takambirana kale mwachidule za Skaffold mu general yathu kuwunika kwa zida zamapulogalamu, omwe moyo wawo umagwirizana ndi Kubernetes.

Chiphunzitso. Cholinga ndi luso

Chifukwa chake, nthawi zambiri, Skaffold amathetsa vuto lakusintha kuzungulira kwa CI/CD (pakumanga, kukankhira, kuyika magawo), kupereka mayankho mwachangu kwa wopanga, i.e. Kutha kulandira mwachangu zotsatira zakusintha kwa code - mu mawonekedwe a pulogalamu yosinthidwa yomwe ikuyenda mu gulu la Kubernetes. Ndipo imatha kugwira ntchito m'mabwalo osiyanasiyana (dev, siteji, kupanga ...), komwe Skaffold imathandizira kufotokozera mapaipi ofananirako.

Khodi ya Skaffold yalembedwa mu Go, wogawidwa ndi pansi pa Apache License 2.0 yaulere (GitHub).

Tiyeni tione ntchito zikuluzikulu ndi mbali. Zoyamba ndi izi:

  • Skaffold imapereka zida zopangira mapaipi a CI/CD.
  • Imakulolani kuti muwunikire kusintha kwa gwero lakumbuyo ndikuyendetsa njira yophatikizira yosonkhanitsira ma code kukhala zithunzi zotengera, kusindikiza zithunzizi mu Docker Registry ndikuzitumiza ku gulu la Kubernetes.
  • Amagwirizanitsa mafayilo omwe ali munkhokwe ndi chikwatu chogwirira ntchito mu chidebe.
  • Imayesa zokha pogwiritsa ntchito kontena-kapangidwe-test.
  • Patsogolo madoko.
  • Imawerenga zolemba za pulogalamu yomwe ikuyenda mu chidebe.
  • Imathandiza kuthetsa zolakwika zolembedwa mu Java, Node.js, Python, Go.

Tsopano za mawonekedwe:

  • Skaffold palokha ilibe zigawo zamagulu am'mbali. Ndiye kuti, palibe chifukwa chowonjezera Kubernetes kuti agwiritse ntchito izi.
  • Mapaipi osiyanasiyana a pulogalamu yanu. Kodi muyenera kutulutsa kachidindo ku Minikube komweko mukamakulitsa, kenako ndikuyika kapena kupanga? Kwa cholinga ichi pali Mbiri ndi masinthidwe a ogwiritsa ntchito, zosintha zachilengedwe ndi mbendera, zomwe zimakulolani kufotokoza mapaipi osiyanasiyana a ntchito imodzi.
  • CLI. Zothandizira ndi zosintha zokha mu YAML. Pa intaneti mungapeze zolozera zoyesera kupanga GUI yoyesera, komabe, pakali pano izi zimangotanthauza kuti wina akumufuna, koma osati kwenikweni.
  • Kusinthasintha. Skaffold sichiri chodziyimira chokha, koma amayesetsa kugwiritsa ntchito ma module kapena mayankho omwe alipo pa ntchito zinazake.

Chithunzi chomaliza:

  • Pa siteji ya msonkhano mungagwiritse ntchito:
    • docker amamanga kwanuko, mgulu pogwiritsa ntchito kaniko kapena mu Google Cloud Build;
    • Bazel kwanuko;
    • Jib Maven ndi Jib Gradle kwanuko kapena mu Google Cloud Build;
    • zolemba zomangika zimayendetsedwa kwanuko. Ngati mukufuna kuyendetsa njira ina (yowonjezereka / yodziwika bwino /...) yomanga, ikufotokozedwa mu script kuti Skaffold ayambe (chitsanzo kuchokera zolembedwa). Izi zimakuthandizani kuti mugwiritse ntchito wokhometsa aliyense yemwe angatchulidwe pogwiritsa ntchito script;
  • Pa siteji yoyesera, zomwe zatchulidwa kale chotengera-kapangidwe-mayeso;
  • Kuti atumizidwe, zotsatirazi zimaperekedwa:
    • Kubectl;
    • Helm;
    • makonda.

Chifukwa cha izi, Skaffold akhoza kutchedwa wapadera chimango chomanga CI/CD. Pano pali chitsanzo cha kayendedwe ka ntchito mukamagwiritsa ntchito (kuchokera ku zolemba za polojekiti):

Ndemanga ya Skaffold ya Kubernetes chitukuko

Kodi ntchito ya Skaffold imawoneka bwanji mwanthawi zonse?

  1. Oyang'anira othandizira amasintha mu code source directory. Ngati zosinthidwa zisinthidwa pamafayilo, amalumikizidwa ndi poda yogwiritsira ntchito mgulu la Kubernetes. Ngati n'kotheka, popanda kukonzanso chithunzicho. Apo ayi, chithunzi chatsopano chasonkhanitsidwa.
  2. Chithunzi chosonkhanitsidwa chimayang'aniridwa pogwiritsa ntchito test-structure-test, choikidwa ndikutumizidwa ku Docker Registry.
  3. Pambuyo pake, chithunzicho chikugwiritsidwa ntchito - chimayikidwa mu gulu la Kubernetes.
  4. Ngati kukhazikitsidwa kudayambitsidwa pogwiritsa ntchito lamulo skaffold dev, ndiye timayamba kulandira zipika kuchokera ku pulogalamuyi, ndipo Skaffold amadikirira zosintha kuti abwerezenso zochita zonse.

Ndemanga ya Skaffold ya Kubernetes chitukuko
Chithunzi cha magawo akuluakulu a ntchito ya Skaffold

Yesetsani. Kuyesa Skaffold

Kuwonetsa kugwiritsa ntchito Skaffold, nditenga chitsanzo kuchokera GitHub polojekiti yosungirako. Ndisanayiwale, Apo Mutha kupeza zitsanzo zina zambiri zomwe zimaganizira zamitundu yosiyanasiyana. Ndichita zonse kwanuko ku Minikube. Kuyika ndikosavuta ndipo kumatenga mphindi zochepa, ndipo mufunika kubectl kuti muyambe.

Ikani 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

Tiyeni tifanizire malo a Skaffold ndi zitsanzo zofunika:

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

Ndinasankha chitsanzo ndi ma pod awiri, iliyonse ili ndi pulogalamu yaing'ono ya Go. Ntchito imodzi ndi frontend (leeroy-web), yomwe imatumizanso pempho ku pulogalamu yachiwiri - backend (leeroy-app). Tiyeni tiwone momwe zimawonekera:

~/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 ndi leeroy-web zili ndi Go code ndi ma Dockerfiles osavuta opangira khodiyi kwanuko:

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

Sindipereka nambala yofunsira - ndizokwanira kudziwa izi leeroy-web amavomereza zopempha ndikuzitumizira leeroy-app. Chifukwa chake mumafayilo Deployment.yaml pali Service yokhayo app (zolowera mkati). Pod port web tidzatumiza kwa ife tokha kuti tipeze mwayi wogwiritsa ntchito pulogalamuyi.

Zomwe zimawoneka 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

Magawo onse omwe tawatchulawa akufotokozedwa apa. Kuphatikiza pakusintha uku, palinso fayilo yokhala ndi zosintha zapadziko lonse lapansi - ~/.skaffold/config. Itha kusinthidwa pamanja kapena kudzera pa CLI - mwachitsanzo, motere:

skaffold config set --global local-cluster true

Lamuloli lidzakhazikitsa kusintha kwapadziko lonse local-cluster mu mtengo true, pambuyo pake Skaffold sadzayesa kukankhira zithunzi ku registry yakutali. Ngati mukupanga kwanuko, mutha kugwiritsa ntchito lamulo ili kupanga zithunzi kwanuko.

Bwererani ku skaffold.yaml:

  • Pa siteji build timafotokozera kuti muyenera kusonkhanitsa ndi kusunga chithunzicho kwanuko. Pambuyo pomanga koyamba, tiwona zotsatirazi:
    // т.к. 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

    Monga mukuwonera, Skaffold adayika yekha zithunzizo. Mwa njira, ndondomeko zingapo zolembera zimathandizidwa.

  • Komanso mu config izo zikuwonetsedwa context: ./leeroy-app/,ndi. nkhani yomwe chithunzicho chimasonkhanitsidwa chikufotokozedwa.
  • Pakutumiza, zatsimikiziridwa kuti tigwiritsa ntchito kubectl ndi chigoba pazowonetsa zofunikira.
  • PortForward: zofanana ndi momwe timatumizira madoko pogwiritsa ntchito kubectl port-forward, timapereka malangizo kwa Skaffold kuti atchule lamuloli. Pachifukwa ichi, doko lapafupi 9000 limatumizidwa ku 8080 mu Deployment ndi dzina. leeroy-web.

Yakwana nthawi yoyambitsa skaffold dev: Gululo lidzapanga "ndemanga zobwereza" mosalekeza, i.e. sichidzangosonkhanitsa chilichonse ndikuchiyika pagulu, komanso ndikuwuzani za momwe mapokowo alili pakadali pano, kuyang'anira zosintha ndikusintha momwe ma pods alili.

Nazi zotsatira zoyambitsa skaffold dev --port-forward pomanganso:

Ndemanga ya Skaffold ya Kubernetes chitukuko

Choyamba, mutha kuwona kuti cache ikugwiritsidwa ntchito. Pambuyo pake, pulogalamuyo imasonkhanitsidwa, kutumizidwa, ndipo madoko amatumizidwa. Popeza kutchulidwa --port-forward, Skaffold adatumiza doko ku web, monga anafunsidwa, koma apa app adaponya mwakufuna kwake (anasankha mfulu yapafupi). Pambuyo pake, timalandira zipika zoyamba kuchokera ku mapulogalamu.

Tiyeni tione ngati zikugwira ntchito?

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

Kusintha fayilo leeroy-app/app.go - masekondi angapo adutsa ... ndipo:

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

Panthawi imodzimodziyo, Skaffold mwiniwakeyo adawonetsa zomwezo mu console monga kale, kupatulapo mfundo imodzi: idangotuluka. leeroy-app, ndipo osati zonse nthawi imodzi.

Kuchita zambiri

Ndikoyeneranso kutchula kuti popanga pulojekiti yatsopano, ma configs a Skaffold akhoza kukhazikitsidwa pogwiritsa ntchito lamulo. init, yomwe ili yabwino kwambiri. Kuphatikiza apo, mutha kulemba ma config angapo: chitani chitukuko pazikhazikiko zosasinthika, ndiyeno tulutsani siteji ndi lamulo. run (njira yofanana ndi dev, samangoyang'anira kusintha), pogwiritsa ntchito kasinthidwe kosiyana.

Pa katacoda pali kalozera Ndikosavuta ndi chitsanzo. Koma imapereka bokosi la mchenga lopangidwa kale ndi Kubernetes, ntchito ndi Skaffold. Njira yabwino ngati mukufuna kuyesa zoyambira nokha.

Njira imodzi yogwiritsira ntchito Skaffold ndikuchita chitukuko pamagulu akutali. Sikuti aliyense ali womasuka kuthamanga Minikube pa hardware yawo, kenaka akutulutsa pulogalamuyo ndikuyembekezera kuti igwire ntchito mokwanira ... Pankhani iyi, Skaffold amathetsa vutoli mwangwiro, zomwe zingathe kutsimikiziridwa, mwachitsanzo, ndi akatswiri a Reddit, monga momwe tachitira. takambirana kale analemba mu blog yathu.

Ndipo mkati chofalitsidwa ichi kuchokera ku Weaveworks mutha kupeza chitsanzo chopanga mapaipi opangira.

Pomaliza

Skaffold ndi chida chosavuta chopangira mapaipi omwe amaphatikizapo kutumiza mapulogalamu ku Kubernetes ndipo amayang'ana kwambiri pazachitukuko. Zimapangitsa kukhala kosavuta kupanga payipi "yachidule" yomwe imaganizira zofunikira za wopanga, koma ngati mungafune, mutha kukonza njira zazikulu. Monga chimodzi mwa zitsanzo zomveka bwino zogwiritsira ntchito Skaffold mu njira za CI / CD amapatsidwa yotero test project ya 10 microservices pogwiritsa ntchito Kubernetes, gRPC, Istio ndi OpenCensus Tracing.

Skaffold ili kale ndi nyenyezi pafupifupi 8000+ pa GitHub, yopangidwa ndi Google ndipo ndi gawo la GoogleContainerTools - kawirikawiri, pakali pano pali zifukwa zonse zokhulupirira kuti polojekitiyi idzakhala yosangalala mpaka kalekale.

PS

Werenganinso pa blog yathu:

Source: www.habr.com

Kuwonjezera ndemanga