Atunwo ti Skaffold fun idagbasoke Kubernetes

Atunwo ti Skaffold fun idagbasoke Kubernetes

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;
  • Ni ipele idanwo, ti a ti sọ tẹlẹ eiyan-igbeyewo;
  • Fun imuṣiṣẹ awọn wọnyi ni a pese:
    • Kubectl;
    • Helm;
    • ṣe akanṣe.

Ṣ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):

Atunwo ti Skaffold fun idagbasoke Kubernetes

Kini iṣẹ Skaffold dabi ni awọn ofin gbogbogbo?

  1. 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ọ.
  2. Aworan ti o pejọ jẹ ayẹwo ni lilo apoti-igbeyewo-igbeyewo, ti samisi ati firanṣẹ si Iforukọsilẹ Docker.
  3. Lẹhin eyi, aworan ti wa ni ransogun - ransogun ni Kubernetes iṣupọ.
  4. 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.

Atunwo ti Skaffold fun idagbasoke Kubernetes
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ẹ.

Fi sori ẹrọ 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

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:

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

Bawo ni o wo 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

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:

Atunwo ti Skaffold fun idagbasoke Kubernetes

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.

PS

Ka tun lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun