Ukubuyekezwa kwe-Skaffold yokuthuthukiswa kwe-Kubernetes

Ukubuyekezwa kwe-Skaffold yokuthuthukiswa kwe-Kubernetes

Ngonyaka nengxenye edlule, ngoMashi 5, 2018, iGoogle yakhipha inguqulo yokuqala ye-alpha yephrojekthi yayo yomthombo ovulekile ye-CI/CD ebizwa ngokuthi. I-Skaffold, inhloso yawo bekuwukudala “intuthuko ye-Kubernetes elula nephindaphindekayo” ukuze abathuthukisi bakwazi ukugxila ekuthuthukisweni kunokuphatha. Yini engase ithakasele nge-Skaffold? Njengoba kuvela, inamaqhinga ambalwa emkhonweni wayo angayenza ithuluzi elinamandla lonjiniyela, futhi mhlawumbe nonjiniyela wokusebenza. Ake sijwayelane nephrojekthi kanye namakhono ayo.

NB: Ngendlela, sesike sakhuluma kafushane nge-Skaffold ngokujwayelekile ukubuyekezwa kwamathuluzi onjiniyela, okuphila kwabo kuxhumene ne-Kubernetes.

Ithiyori. Inhloso namakhono

Ngakho-ke, ngokujwayelekile, i-Skaffold ixazulula inkinga yokuzenzakalela komjikelezo we-CI/CD (esigabeni sokwakha, sokusunduza, sokuphakela), enikeza impendulo esheshayo yonjiniyela, i.e. ikhono lokuthola ngokushesha umphumela wezinguquko zekhodi ezilandelayo - ngendlela yohlelo lokusebenza olubuyekeziwe olusebenza kuqoqo le-Kubernetes. Futhi ingasebenza kumasekethe ahlukene (i-dev, isiteji, ukukhiqiza...), lapho i-Skaffold isiza khona ukuchaza amapayipi ahambisanayo okukhishwa.

Ikhodi yomthombo ye-Skaffold ibhalwe kokuthi Go, isatshalaliswa ngu ngaphansi kwe-Apache License 2.0 (GitHub) yamahhala.

Ake sibheke imisebenzi esemqoka kanye nezici. Esokuqala sihlanganisa lokhu okulandelayo:

  • I-Skaffold inikeza amathuluzi okudala amapayipi e-CI/CD.
  • Ikuvumela ukuthi uqaphe izinguquko kukhodi yomthombo ngemuva futhi usebenzise inqubo ezenzakalelayo yokuhlanganisa ikhodi ezithombeni zesiqukathi, ukushicilela lezi zithombe ku-Docker Registry futhi uzithumele kuqoqo le-Kubernetes.
  • Ivumelanisa amafayela endaweni yokugcina nohla lwemibhalo olusebenzayo esitsheni.
  • Ihlola ngokuzenzakalela kusetshenziswa ukuhlola kwesakhiwo sesitsha.
  • Amachweba aphambili.
  • Ifunda amalogi ohlelo lokusebenza olusebenza esitsheni.
  • Isiza ekulungiseni izinhlelo zokusebenza ezibhalwe nge-Java, Node.js, Python, Go.

Manje mayelana nezici:

  • I-Skaffold yona ayinazo izingxenye ze-cluster-side. Okusho ukuthi, asikho isidingo sokuqhubeka nokulungiselela i-Kubernetes ukusebenzisa lolu hlelo lokusebenza.
  • Amapayipi ahlukene wohlelo lwakho lokusebenza. Ngabe udinga ukukhipha ikhodi ku-Minikube yasendaweni ngenkathi usathuthuka, bese uye esiteji noma ekukhiqizeni? Ngale njongo kukhona amaphrofayli kanye nokucushwa komsebenzisi, okuguquguqukayo kwendawo kanye namafulegi, akuvumela ukuthi uchaze amapayipi ahlukene ohlelo lokusebenza olulodwa.
  • CLI. Usizo lwekhonsoli kuphela nezilungiselelo ku-YAML. Ku-inthanethi ungathola izinkomba zemizamo yokuyidala i-GUI yokuhlola, nokho, okwamanje lokhu cishe kusho ukuthi othile uyamdinga, kodwa hhayi ngempela.
  • Ukuzijwayeza. I-Skaffold ayisona isivuni esizimele, kodwa silwela ukusebenzisa amamojula angawodwana noma izixazululo ezikhona zemisebenzi ethile.

Umfanekiso wakamuva:

  • Esigabeni somhlangano ungasebenzisa:
    • i-docker yakha endaweni, kuqoqo kusetshenziswa i-kaniko noma ku-Google Cloud Build;
    • Bazel endaweni;
    • UJib Maven noJib Gradle endaweni noma ku-Google Cloud Build;
    • izikripthi zokwakha ngokwezifiso ziqhutshwa endaweni. Uma udinga ukusebenzisa esinye isisombululo sokwakha (esivumelana nezimo kakhulu/esijwayeleke kakhulu/...), sichazwa embhalweni ukuze i-Skaffold iyethule (isibonelo esivela kumadokhumenti). Lokhu kukuvumela ukuthi usebenzise noma yimuphi umqoqi ongabizwa kusetshenziswa umbhalo;
  • Esigabeni sokuhlola, osekushiwo kakade ukuhlolwa kwesakhiwo sesitsha;
  • Ukuze kusetshenziswe okulandelayo kunikezwa:
    • Kubectl;
    • I-Helm;
    • ngokwezifiso.

Ngenxa yalokhu, i-Skaffold ingabizwa ngokuthi iyingqayizivele uhlaka lokwakha i-CI/CD. Nasi isibonelo sokugeleza komsebenzi lapho usisebenzisa (kusuka kumadokhumenti ephrojekthi):

Ukubuyekezwa kwe-Skaffold yokuthuthukiswa kwe-Kubernetes

Ngabe ubukeka kanjani umsebenzi kaSkaffold ngokwejwayelekile?

  1. I-Utility monitors iyashintsha kumkhombandlela wekhodi yomthombo. Uma kwenziwa izinguquko kumafayela, avumelaniswa ne-pod yohlelo lokusebenza kuqoqo le-Kubernetes. Uma kungenzeka, ngaphandle kokuhlanganisa kabusha isithombe. Uma kungenjalo, isithombe esisha siyahlanganiswa.
  2. Isithombe esihlanganisiwe sibhekwa kusetshenziswa ukuhlolwa kwesakhiwo sesitsha, simakwe futhi sithunyelwe ku-Docker Registry.
  3. Ngemuva kwalokhu, isithombe siyasetshenziswa - sisetshenziswe kuqoqo le-Kubernetes.
  4. Uma ukwethulwa kwaqalwa kusetshenziswa umyalo skaffold dev, bese siqala ukuthola izingodo kuhlelo lokusebenza, futhi i-Skaffold ilinda izinguquko ukuze iphinde zonke izenzo futhi.

Ukubuyekezwa kwe-Skaffold yokuthuthukiswa kwe-Kubernetes
Umfanekiso wezigaba eziyinhloko zokusebenza kwe-Skaffold

Prakthiza. Izama i-Skaffold

Ukukhombisa ukusetshenziswa kwe-Skaffold, ngizothatha isibonelo ku Inqolobane yephrojekthi ye-GitHub. Konje, Lapho Ungathola ezinye izibonelo eziningi ezicabangela imininingwane ehlukahlukene. Ngizokwenza zonke izenzo endaweni kwaMinikube. Ukufaka kulula futhi kuthatha imizuzu embalwa, futhi uzodinga i-kubectl ukuze uqalise.

Faka i-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

Ake sihlanganise inqolobane ye-Skaffold nezibonelo ezidingekayo:

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

Ngikhethe isibonelo esinama-pods amabili, ngalinye liqukethe uhlelo lokusebenza olulodwa oluncane lwe-Go. Olunye uhlelo lokusebenza luyi-frontend (i-leeroy-web), eqondisa kabusha isicelo kuhlelo lokusebenza lwesibili - i-backend (i-leeroy-app). Ake sibone ukuthi ibukeka kanjani:

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

I-leeroy-app kanye ne-leeroy-web iqukethe ikhodi ye-Go kanye nama-Dockerfiles alula wokwakha le khodi endaweni:

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

Ngeke nginikeze ikhodi yesicelo - kwanele ukwazi lokho leeroy-web yamukela izicelo futhi izithumelele zona leeroy-app. Ngakho-ke kumafayela Deployment.yaml kukhona Isevisi kuphela app (ngomzila wangaphakathi). Imbobo ye-Pod web sizozidlulisela kithi ukuze sifinyelele ngokushesha kuhlelo lokusebenza.

Kubukeka kanjani 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

Zonke izigaba ezibalulwe ngenhla zichazwe lapha. Ngaphezu kwalokhu kulungiselelwa, kukhona nefayela elinezilungiselelo zomhlaba wonke - ~/.skaffold/config. Ingahlelwa ngesandla noma nge-CLI - ngokwesibonelo, kanje:

skaffold config set --global local-cluster true

Lo myalo uzosetha ukuguquguquka komhlaba wonke local-cluster ibe yincazelo true, ngemva kwalokho i-Skaffold ngeke izame ukuphusha izithombe ekubhaliseni okukude. Uma uthuthukisa endaweni, ungasebenzisa lo myalo ukwakha izithombe endaweni.

Buyela ku skaffold.yaml:

  • Esiteji build sicacisa ukuthi udinga ukuqoqa futhi ulondoloze isithombe endaweni. Ngemuva kokuthi isakhiwo sisebenze okokuqala, sizobona okulandelayo:
    // т.к. 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

    Njengoba ubona, uSkaffold umake izithombe ngokwakhe. Ngendlela, izinqubomgomo ezimbalwa zokumaka ziyasekelwa.

  • Ngokuqhubekayo ku-config kubonisiwe context: ./leeroy-app/, i.e. kucacisiwe umongo lapho isithombe siqoqwa khona.
  • Esigabeni sokusatshalaliswa, kunqunywa ukuthi sizosebenzisa i-kubectl kanye nemaski ukuze kubonakale okudingekile.
  • PortForward: kufana nendlela esivamise ukudlulisa ngayo izimbobo sisebenzisa kubectl port-forward, sinikeza iziyalezo ku-Skaffold ukubiza lo myalo. Kulokhu, i-port 9000 yendawo idluliselwa ku-8080 ku-Deployment enegama. leeroy-web.

Isikhathi sokuqalisa skaffold dev: Ithimba lizodala "i-loop yempendulo" eqhubekayo, i.e. ngeke nje iqoqe yonke into futhi ikuthumele ku-cluster, kodwa izophinde ikutshele mayelana nesimo se-pods okwamanje, iqaphe izinguquko futhi ibuyekeze isimo se-pods.

Nawu umphumela wokwethulwa skaffold dev --port-forward uma uhlanganisa kabusha:

Ukubuyekezwa kwe-Skaffold yokuthuthukiswa kwe-Kubernetes

Okokuqala, ungabona ukuthi i-cache iyasetshenziswa. Okulandelayo, uhlelo lokusebenza luyahlanganiswa, lusetshenziswe, futhi izimbobo zidluliselwe phambili. Njengoba kucacisiwe --port-forward, i-Skaffold idlulisele ichweba kuyo web, njengoba ebuzwa, kodwa lapha app wajikijela ngokubona kwakhe (wakhetha eseduze ekhululekile). Ngemva kwalokhu, sithola izingodo zokuqala ezivela kuzinhlelo zokusebenza.

Ake sihlole ukuthi iyasebenza yini?

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

Ilungisa ifayela leeroy-app/app.go - kudlula imizuzwana embalwa... futhi:

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

Ngesikhathi esifanayo, i-Skaffold ngokwayo ibonise into efanayo ku-console njengangaphambili, ngaphandle kwephuzu elilodwa: yaphuma kuphela. leeroy-app, futhi hhayi ngesikhathi esisodwa.

Ukuzijwayeza okwengeziwe

Kuyafaneleka futhi ukusho ukuthi lapho udala iphrojekthi entsha, ukulungiselelwa kwe-Skaffold kungenziwa i-bootstrapped kusetshenziswa umyalo. init, okuyinto elula kakhulu. Ngaphezu kwalokho, ungabhala izilungiselelo ezimbalwa: wenze intuthuko ekucushweni okuzenzakalelayo, bese uphumela esiteji ngomyalo. run (inqubo efanayo ne dev, ayiqapheli izinguquko), isebenzisa ukulungiselelwa okuhlukile.

Ku-katacoda kukhona umhlahlandlela Kulula nakakhulu ngesibonelo. Kodwa inikeza i-sandbox esenziwe ngomumo ene-Kubernetes, uhlelo lokusebenza kanye ne-Skaffold. Inketho enhle uma ungathanda ukuzama izinto eziyisisekelo ngokwakho.

Icala elilodwa elingasetshenziswa le-Skaffold ukwenza intuthuko kuqoqo elikude. Akuwona wonke umuntu okhululekile ukusebenzisa i-Minikube ku-hardware yabo, bese ekhipha uhlelo lokusebenza futhi elindele ukuthi lusebenze ngokwanele... Kulokhu, i-Skaffold ixazulula inkinga ngokuphelele, engaqinisekiswa, isibonelo, onjiniyela be-Reddit, njengoba sine osekuxoxiwe ngakho wabhala kubhulogi yethu.

Futhi ku lolu shicilelo kusuka ku-Weaveworks ungathola isibonelo sokudala ipayipi lokukhiqiza.

isiphetho

I-Skaffold iyithuluzi elisebenziseka kalula lokwakha amapayipi afaka ukwethulwa kwezicelo ku-Kubernetes futhi agxile kakhulu ezidingweni zentuthuko. Kwenza kube lula kakhulu ukwakha ipayipi “elifushane” elicabangela izidingo eziyisisekelo zonjiniyela, kodwa uma uthanda, ungahlela izinqubo ezinkulu. Njengesinye sezibonelo ezicacile zokusebenzisa i-Skaffold kuzinqubo ze-CI/CD inikezwa 逵 克 i-spine 橘 iphrojekthi yokuhlola yezinsiza ezincane eziyi-10 zisebenzisa amandla e-Kubernetes, gRPC, Istio kanye ne-OpenCensus Tracing.

I-Skaffold isivele inezinkanyezi ezicishe zibe ngu-8000+ ku-GitHub, ithuthukiswe yi-Google futhi iyingxenye ye I-GoogleContainerTools - ngokuvamile, okwamanje kukhona zonke izizathu zokukholelwa ukuthi iphrojekthi izothuthuka ngenjabulo kuze kube phakade.

PS

Funda futhi kubhulogi yethu:

Source: www.habr.com

Engeza amazwana