Tlhahlobo ea Skaffold bakeng sa nts'etsopele ea Kubernetes

Tlhahlobo ea Skaffold bakeng sa nts'etsopele ea Kubernetes

Selemong le halofo se fetileng, ka la 5 Hlakubele 2018, Google e ile ea lokolla mofuta oa pele oa alpha oa projeke ea eona ea Open Source bakeng sa CI/CD e bitsoang. Skaffold, bao sepheo sa bona e neng e le ho theha "ts'ebetso e bonolo le e pheta-phetoang ea Kubernetes" e le hore bahlahisi ba ka tsepamisa maikutlo ho nts'etsopele ho e-na le tsamaiso. Ke eng e ka khahlisang Skaffold? Ha ho ntse ho le joalo, e na le maqheka a 'maloa a ka etsang hore e be sesebelisoa se matla bakeng sa moqapi, mohlomong le moenjiniere oa ts'ebetso. Ha re itloaetse morero le bokhoni ba oona.

NB: Ka tsela, re se re buile hakhutšoanyane ka Skaffold ka kakaretso ea rona tlhahlobo ea lisebelisoa tsa ntlafatso, bao bophelo ba bona bo amanang le Kubernetes.

Khopolo. Sepheo le bokhoni

Kahoo, ka kakaretso, Skaffold e rarolla bothata ba ho iketsetsa potoloho ea CI / CD (mohahong, ho sututsa, ho tsamaisa mekhahlelo), ho fana ka maikutlo a potlakileng a moqapi, ke hore. bokhoni ba ho fumana kapele sephetho sa liphetoho tse latelang tsa khoutu - ka mokhoa oa ts'ebeliso e ntlafalitsoeng e sebetsang sehlopheng sa Kubernetes. 'Me e ka sebetsa lipotolohong tse fapaneng (dev, sethala, tlhahiso ...), eo Skaffold e thusang ho hlalosa liphaephe tse tsamaellanang tsa ho phatlalatsoa.

Khoutu ea mohloli oa Skaffold e ngotsoe ho Go, ajoa ke tlas'a Apache License ea mahala 2.0 (GitHub).

Ha re shebeng mesebetsi le likarolo tsa mantlha. Ea pele e kenyelletsa tse latelang:

  • Skaffold e fana ka lisebelisoa tsa ho theha liphaephe tsa CI/CD.
  • E u lumella ho beha leihlo liphetoho tsa khoutu ea mohloli ka morao 'me u tsamaise ts'ebetso e ikemetseng ea ho kopanya khoutu ka har'a litšoantšo tsa setshelo, ho phatlalatsa litšoantšo tsena ho Registry ea Docker le ho li fetisetsa sehlopheng sa Kubernetes.
  • E amahanya lifaele sebakeng sa polokelo le bukana e sebetsang ka har'a sets'oants'o.
  • E etsa liteko ka bo eona e sebelisa tlhahlobo ea sebopeho sa setshelo.
  • Boema-kepe ba pele.
  • E bala lintlha tsa ts'ebeliso e sebetsang ka har'a sets'oants'o.
  • E thusa ho lokisa lits'ebetso tse ngotsoeng ka Java, Node.js, Python, Go.

Joale mabapi le likarolo:

  • Skaffold ka boeona ha e na likarolo tsa mahlakore a lihlopha. Ke hore, ha ho na tlhoko ea ho hlophisa Kubernetes ho sebelisa sesebelisoa sena.
  • Liphaephe tse fapaneng bakeng sa kopo ea hau. Na o hloka ho fana ka khoutu ho Minikube ea lehae ha o ntse o nts'etsapele, ebe o ea sethaleng kapa tlhahiso? Bakeng sa morero ona ho na le litlaleho le litlhophiso tsa basebelisi, mefuta-futa ea tikoloho le lifolakha, tse u lumellang ho hlalosa liphaephe tse fapaneng bakeng sa ts'ebeliso e le 'ngoe.
  • CLI. Ke lisebelisoa le litlhophiso tsa console feela ho YAML. Marang-rang u ka fumana litšupiso tsa boiteko ba ho bopa GUI ea liteko, leha ho le joalo, hajoale sena se ka etsahala hore ebe se bolela feela hore ho na le motho ea mo hlokang, empa ha e le hantle.
  • Ho itloaetsa. Skaffold ha se sekotuli se ikemetseng, empa se ikitlaelletsa ho sebelisa limmojule ka bomong kapa litharollo tse teng bakeng sa mesebetsi e itseng.

Setšoantšo sa ho qetela:

  • Nakong ea kopano, u ka sebelisa:
    • docker e aha sebakeng sa heno, ka sehlopha se sebelisang kaniko kapa ho Google Cloud Build;
    • Bazel sebakeng sa heno;
    • Jib Maven le Jib Gradle sebakeng sa heno kapa ho Google Cloud Build;
    • mengolo ea kaho ea moetlo e tsamaisoang sebakeng sa heno. Haeba o hloka ho tsamaisa tharollo e 'ngoe (e bonolo haholoanyane / e tloaelehileng / ...) e hlalositsoe ka har'a script e le hore Skaffold e e qale (mohlala ho tsoa litokomaneng). Sena se o nolofalletsa ho sebelisa mokelli leha e le ofe ea ka bitsoang ho sebelisa script;
  • Sethaleng sa teko, se seng se boletsoe teko-sebopeho-setshelo;
  • Bakeng sa ho tsamaisoa ho fanoe ka lintlha tse latelang:
    • Kubectl;
    • Helm;
    • Customize.

Ka lebaka la sena, Skaffold e ka bitsoa e ikhethang moralo oa ho aha CI/CD. Mona ke mohlala oa ts'ebetso ha u e sebelisa (ho tsoa litokomaneng tsa morero):

Tlhahlobo ea Skaffold bakeng sa nts'etsopele ea Kubernetes

Mosebetsi oa Skaffold o shebahala joang ka kakaretso?

  1. Lisebelisoa tsa lisebelisoa li fetoha bukeng ea khoutu ea mohloli. Haeba ho etsoa liphetoho ho lifaele, li hokahanngoa le pod ea kopo sehlopheng sa Kubernetes. Haeba ho khoneha, ntle le ho kopanya setšoantšo hape. Ho seng joalo, setšoantšo se secha se bokelloa.
  2. Setšoantšo se kopaneng se hlahlojoa ho sebelisoa tlhahlobo ea sebopeho sa setshelo, se tšoailoe ebe se romelloa ho Registry ea Docker.
  3. Ka mor'a sena, setšoantšo se kenngoa - se kenngoa sehlopheng sa Kubernetes.
  4. Haeba tlhahiso e qalile ho sebelisoa taelo skaffold dev, ebe re qala ho amohela lits'oants'o ho tsoa ts'ebelisong, 'me Skaffold e emetse liphetoho ho pheta liketso tsohle hape.

Tlhahlobo ea Skaffold bakeng sa nts'etsopele ea Kubernetes
Setšoantšo sa mekhahlelo e meholo ea ts'ebetso ea Skaffold

Itloaetse. Ho leka Skaffold

Ho bontša tšebeliso ea Skaffold, ke tla nka mohlala ho Sebaka sa polokelo ea morero oa GitHub. Ebile, Mono U ka fumana mehlala e meng e mengata e nahanang ka lintlha tse fapaneng. Ke tla etsa liketso tsohle sebakeng sa Minikube. Ho kenya ho bonolo ebile ho nka metsotso e seng mekae, 'me u tla hloka kubectl ho qala.

Kenya 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

Ha re bapiseng polokelo ea Skaffold ka mehlala e hlokahalang:

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

Ke khethile mohlala ka li-pods tse peli, e 'ngoe le e' ngoe e na le kopo e nyane ea Go. Kopo e 'ngoe ke frontend (leeroy-web), e khutlisetsang kopo ts'ebetsong ea bobeli - backend (leeroy-app). Ha re bone hore na e shebahala joang:

~/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 le leeroy-web li na le Go code le Dockerfiles tse bonolo tsa ho aha khoutu ena sebakeng sa heno:

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

Nke ke ka fana ka khoutu ea kopo - ho lekane ho tseba seo leeroy-web e amohela likopo le ho li etsa proxies ho leeroy-app. Ka hona, lifaeleng Deployment.yaml ho na le Tšebeletso feela bakeng sa app (bakeng sa ho tsamaisa ka hare). Pod port web re tla e fetisetsa ho rona bakeng sa ho fihlella kopo ka potlako.

Ho shebahala joalo 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

Mekhahlelo eohle e boletsoeng ka holimo e hlalositsoe mona. Ntle le tlhophiso ena, ho boetse ho na le faele e nang le litlhophiso tsa lefats'e - ~/.skaffold/config. E ka hlophisoa ka letsoho kapa ka CLI - mohlala, joalo ka:

skaffold config set --global local-cluster true

Taelo ena e tla beha phetoho ea lefats'e local-cluster ho ba le moelelo true, ka mor'a moo Skaffold e ke ke ea leka ho sutumelletsa litšoantšo ho registry e hole. Haeba u nts'etsapele sebakeng sa heno, u ka sebelisa taelo ena ho aha litšoantšo sebakeng sa heno.

Khutlela ho skaffold.yaml:

  • Sefaleng build re totobatsa hore o hloka ho bokella le ho boloka setšoantšo sebakeng sa heno. Ka mor'a hore mohaho o sebetse ka lekhetlo la pele, re tla bona tse latelang:
    // т.к. 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

    Joalokaha u bona, Skaffold o ile a tšoaea litšoantšo ka boeena. Ka tsela, maano a 'maloa a ho tšoaea a tšehetsoa.

  • Ho feta moo ho config ho bontšitsoe context: ./leeroy-app/, ke. moelelo oa moelelo oo setšoantšo se bokelloang ho oona o hlalosoa.
  • Mothating oa ho romelloa, ho ikemiselitsoe hore re tla sebelisa kubectl le mask bakeng sa lipontšo tse hlokahalang.
  • PortForward: e ts'oanang le kamoo re tloaetseng ho fetisa likou re sebelisa kubectl port-forward, re fana ka litaelo ho Skaffold ho bitsa taelo ena. Tabeng ena, port 9000 ea lehae e fetisetsoa ho 8080 ho Deployment ka lebitso. leeroy-web.

Ke nako ea ho qala skaffold dev: Sehlopha se tla theha "feedback loop" e tsoelang pele, i.e. e ke ke ea bokella ntho e 'ngoe le e' ngoe feela le ho e fetisetsa sehlopheng, empa hape e tla u bolella ka boemo ba li-pods hona joale, ho shebella liphetoho le ho ntlafatsa boemo ba li-pods.

Sephetho ke sena skaffold dev --port-forward ha o kopanya hape:

Tlhahlobo ea Skaffold bakeng sa nts'etsopele ea Kubernetes

Ntlha ea pele, u ka bona hore cache e sebelisoa. Ka mor'a moo, kopo e bokelloa, e sebelisoe, 'me likou li rometsoe. Ho tloha ha ho hlalositsoe --port-forward, Skaffold e fetiselitse boema-kepe ho web, joalokaha a ile a botsoa, ​​empa mona app o ile a lahlela ka boikhethelo ba hae (a khetha e haufi ea mahala). Ka mor'a sena, re fumana li-log tsa pele ho tsoa lits'ebetsong.

Ha re hlahlobeng hore na e ea sebetsa?

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

Ho fetola faele leeroy-app/app.go - metsotsoana e seng mekae ea feta ... mme:

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

Ka nako e ts'oanang, Skaffold ka boeona e ne e bonts'a ntho e ts'oanang ka har'a console joalo ka pele, ntle le ntlha e le 'ngoe: e ile ea tsoa feela. leeroy-app, mme eseng ka nako e le nngwe.

Boikoetliso bo eketsehileng

Ho bohlokoa hape ho bolela hore ha u theha projeke e ncha, litlhophiso tsa Skaffold li ka qalisoa ka ho sebelisa taelo. init, e loketseng haholo. Ntle le moo, o ka ngola li-configs tse 'maloa: etsa nts'etsopele ho tlhophiso ea kamehla, ebe o fetela sethaleng ka taelo. run (ts'ebetso e ts'oanang le dev, ha e shebe liphetoho), e sebelisa tlhophiso e fapaneng.

Ho katacoda ho na le tsamaiso Ho bonolo le ho feta ka mohlala. Empa e fana ka lebokose la lehlabathe le entsoeng hantle le Kubernetes, kopo le Skaffold. Khetho e ntle haeba u thahasella ho leka lintho tsa motheo ka bouena.

Taba e 'ngoe e ka sebelisoang bakeng sa Skaffold ke ho etsa nts'etsopele sehlopheng se hole. Hase motho e mong le e mong ea phutholohileng ho tsamaisa Minikube ka hardware ea hae, ebe o ntša kopo le ho lebella hore e sebetse ka mokhoa o lekaneng ... Tabeng ena, Skaffold e rarolla bothata ka mokhoa o phethahetseng, o ka tiisoang, ka mohlala, ke baenjiniere ba Reddit, joalokaha re na le e seng e tšohliloe o ngotse ka blog ea rona.

Mme ka phatlalatso ena ho tsoa ho Weaveworks u ka fumana mohlala oa ho theha phaephe bakeng sa tlhahiso.

fihlela qeto e

Skaffold ke sesebelisoa se bonolo sa ho aha lipeipi tse kenyelletsang ho kenya lits'ebetso ho Kubernetes mme li shebane haholo le litlhoko tsa nts'etsopele. E etsa hore ho be bonolo haholo ho theha pipeline e "khutšoane" e nahanang ka litlhoko tsa mantlha tsa moqapi, empa haeba ho hlokahala, o ka hlophisa lits'ebetso tse kholoanyane. E le e 'ngoe ea mehlala e hlakileng ea ho sebelisa Skaffold mekhoeng ea CI / CD ho fanoa joalo morero oa teko ea li-microservices tse 10 tse sebelisang bokhoni ba Kubernetes, gRPC, Istio le OpenCensus Tracing.

Skaffold e se e na le linaleli tse ka bang 8000+ ho GitHub, e ntlafalitsoe ke Google mme ke karolo ea GoogleContainerTools - ka kakaretso, hona joale ho na le mabaka 'ohle a ho lumela hore morero o tla tsoela pele ka thabo ka mor'a moo.

PES

Bala hape ho blog ea rona:

Source: www.habr.com

Eketsa ka tlhaloso