Te arotake o Skaffold mo te whanaketanga Kubernetes

Te arotake o Skaffold mo te whanaketanga Kubernetes

He tau me te hawhe ki muri, i te Maehe 5, 2018, ka tukuna e Google te putanga alpha tuatahi o tana kaupapa Open Source mo te CI/CD e kiia nei. Tauira, ko tana whainga ko te hanga "whakawhanaketanga Kubernetes ngawari me te tukurua" kia taea e nga kaiwhakawhanake te aro ki te whanaketanga, kaua ki te whakahaere. He aha pea te pai mo Skaffold? I te mea ka puta, he iti noa nga mahi tinihanga ka taea e ia hei taputapu kaha mo te kaiwhakawhanake, tae atu ki te miihini mahi. Kia mohio tatou ki te kaupapa me ona kaha.

NB: Ma te ara, kua korero poto matou mo Skaffold i roto i to maatau whanui arotake o nga taputapu kaiwhakawhanake, e hono ana ona oranga ki a Kubernetes.

Te ariā. Te kaupapa me nga kaha

Na, i te nuinga o te korero, ka whakatauhia e Skaffold te raruraru o te whakaaunoa i te huringa CI/CD (i te hanga, te pana, te tohatoha i nga waahanga), te tuku urupare tere ki te kaiwhakawhanake, ara. te kaha ki te whiwhi tere i nga hua o nga huringa waehere ka whai ake - i te ahua o te tono whakahou e rere ana i roto i te roopu Kubernetes. A ka taea te mahi i roto i nga waahanga rereke (dev, atamira, hanga...), ma te Skaffold e awhina ki te whakaahua i nga paipa paipa mo te whakaputa.

Ko te waehere puna a Skaffold kua tuhia ki te Haere, tohaina e i raro i te Raihana Apache koreutu 2.0 (GitHub).

Kia titiro tatou ki nga mahi matua me nga ahuatanga. Ko te tuatahi ko enei e whai ake nei:

  • Ka tuku taputapu a Skaffold mo te hanga paipa CI/CD.
  • Ka taea e koe te aro turuki i nga huringa o te waehere puna kei te papamuri me te whakahaere i te mahi aunoa mo te whakahiato waehere ki roto i nga whakaahua ipu, te whakaputa i enei whakaahua ki te Rehita Docker me te tuku ki te roopu Kubernetes.
  • Ka tukutahi i nga konae kei te putunga me te raarangi mahi kei roto i te ipu.
  • Ka whakamatautau aunoa ma te whakamahi ipu-hanganga-whakamatautau.
  • Whakamua tauranga.
  • Ka panui i nga raarangi o tetahi tono e rere ana i roto i te ipu.
  • Ka awhina i nga tono patuiro i tuhia ki Java, Node.js, Python, Go.

Inaianei mo nga ahuatanga:

  • Ko te Skaffold ake kaore he waahanga-taha kahui. Arā, kaore he take ki te whirihora ano i nga Kubernetes hei whakamahi i tenei taputapu.
  • Nga momo paipa rereke mo to tono. Me huri koe i te waehere ki te Minikube o te rohe i a koe e whakawhanake ana, katahi ki te atamira, ki te hanga ranei? Mo tenei kaupapa kei reira Tuhinga me nga whirihoranga a nga kaiwhakamahi, nga taurangi taiao me nga haki, ka taea e koe te whakaahua i nga paipa rereke mo te tono kotahi.
  • CLI. Ko nga taputapu papatohu me nga whirihoranga anake i YAML. I te Ipurangi ka kitea e koe nga tohutoro mo nga ngana ki te hanga GUI whakamatautau, Heoi, i tenei wa ko te tikanga tenei ka hiahia tetahi ki a ia, engari kaore i te tino.
  • Mahinga. Ehara a Skaffold i te kaikokoti takitahi, engari e ngana ana ki te whakamahi i nga waahanga takitahi me nga otinga o mua mo nga mahi motuhake.

Whakaahua o te whakamutunga:

  • I te waahi huihuinga ka taea e koe te whakamahi:
    • hanga docker i te rohe, i roto i te tautau ma te whakamahi i te kaniko, i te Google Cloud Build ranei;
    • Bazel i te rohe;
    • Jib Maven me Jib Gradle i te rohe, i te Google Cloud Build ranei;
    • Ko nga tuhinga hanga ritenga ka whakahaerehia i te rohe. Mena ka hiahia koe ki te whakahaere i tetahi atu otinga hanga (he ngawari ake/maamaa/...) hanga, ka whakaahuatia i roto i te tuhinga kia whakarewahia e Skaffold (tauira mai i nga tuhinga). Ma tenei ka taea e koe te whakamahi i tetahi kaikohi ka taea te karanga ma te whakamahi i te tuhinga;
  • I te waahi whakamatautau, kua whakahuahia ipu-hanganga-whakamatautau;
  • Mo te tohatoha ka whakaratohia nga mea e whai ake nei:
    • Kubectl;
    • Helm;
    • whakarite.

Na tenei, ka taea te kiia a Skaffold he ahurei anga mo te hanga CI/CD. Anei he tauira rerengamahi ina whakamahi ana (mai i te tuhinga kaupapa):

Te arotake o Skaffold mo te whanaketanga Kubernetes

He aha te ahua o te mahi a Skaffold i roto i nga tikanga whanui?

  1. Ka aro turuki te whaipainga i nga huringa i roto i te whaiaronga waehere puna. Mena ka whakarereketia nga konae, ka tukutahia me te putunga tono kei te roopu Kubernetes. Mena ka taea, me te kore e whakakotahi i te ahua. Ki te kore, ka whakaemihia he ahua hou.
  2. Ka tirohia te ahua kua whakaemihia ma te whakamahi i te ipu-hanganga-whakamatautau, ka tohua ka tukuna ki te Rehita Docker.
  3. Whai muri i tenei, ka horahia te ahua - ka tukuna ki te roopu Kubernetes.
  4. Mena i arawhitihia te whakarewatanga ma te whakamahi i te whakahau skaffold dev, katahi ka timata tatou ki te tango i nga raarangi mai i te tono, ka tatari a Skaffold mo nga huringa ki te whakahoki ano i nga mahi katoa.

Te arotake o Skaffold mo te whanaketanga Kubernetes
Whakaahua o nga waahanga matua o te mahi Skaffold

Parakatihi. E ngana ana ki a Skaffold

Hei whakaatu i te whakamahinga o Skaffold, ka tango ahau i tetahi tauira mai i Pupuri kaupapa GitHub... Ma te ara, i reira Ka kitea e koe he maha atu nga tauira e whai whakaaro ana ki nga ahuatanga motuhake. Ka mahia e au nga mahi katoa i te takiwa o Minikube. He ngawari te whakaurunga me te tango i etahi meneti, ka hiahia koe ki te kubectl ki te timata.

Tāuta 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

Me whakakaohia te putunga a Skaffold me nga tauira e tika ana:

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

I whiriwhiria e au tetahi tauira me nga pene e rua, kei roto i ia waahanga kotahi te tono Go iti. Ko tetahi tono ko te pito o mua (leeroy-web), ka tukuna te tono ki te tono tuarua - ko te tuara (leeroy-app). Kia kite tatou he aha te ahua:

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

Kei roto i te leeroy-app me te leeroy-web te waehere Haere me nga Dockerfiles ngawari mo te hanga i tenei waehere ki te rohe:

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

E kore ahau e hoatu i te waehere tono - he nui te mohio ki tera leeroy-web ka whakaae ki nga tono me te takawaenga ki a ratou leeroy-app. No reira i roto i nga konae Deployment.yaml he Ratonga mo anake app (mo te ararere o roto). Tauranga Pod web ka tukuna atu e matou ki a matou mo te uru tere ki te tono.

He rite te ahua 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

Ko nga waahanga katoa kua whakahuahia i runga ake nei ka whakaahuahia i konei. I tua atu i tenei whirihora, he konae ano me nga tautuhinga ao - ~/.skaffold/config. Ka taea te whakatika ma te ringa, ma te CLI ranei - hei tauira, penei:

skaffold config set --global local-cluster true

Ma tenei whakahau e whakarite te taurangi o te ao local-cluster ki te tikanga true, muri iho ka kore a Skaffold e ngana ki te pana i nga whakaahua ki roto i te rehitatanga mamao. Mena kei te whakawhanake koe i te rohe, ka taea e koe te whakamahi i tenei whakahau ki te hanga whakaahua i te rohe.

Hoki ki skaffold.yaml:

  • I runga i te atamira build whakapūtā matou e hiahia ana koe ki te kohikohi me te tiaki i te whakapakoko rohe. I muri i te wa tuatahi o te hanga, ka kite tatou i nga mea e whai ake nei:
    // т.к. 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

    Ka taea e koe te kite, i tohuhia e Skaffold nga whakaahua. Ma te ara, he maha nga kaupapa here tohu e tautokohia ana.

  • I tua atu i te whirihora ka tohuhia context: ./leeroy-app/, i.e. kua tohua te horopaki e kohia ai te ahua.
  • I te waahi tuku, ka whakatauhia ka whakamahia e matou te kubectl me te kanohi mo nga whakaaturanga e tika ana.
  • PortForward: He rite tonu ki ta maatau tuku tauranga i te nuinga o te waa kubectl port-forward, ka hoatu tohutohu matou ki a Skaffold ki te karanga i tenei whakahau. I tenei take, ka tukuna te tauranga rohe 9000 ki te 8080 i te Whakamahinga me te ingoa leeroy-web.

Kua tae ki te wa ki te whakarewa skaffold dev: Ka hangahia e te kapa he "whakaaro urupare" haere tonu, ara. ehara i te mea ka kohia e ia nga mea katoa ka tukuna ki te roopu, engari ka korero ano ki a koe mo te ahua o nga pene i tenei wa, te aroturuki i nga huringa me te whakahou i te ahua o nga pene.

Anei te hua o te whakarewatanga skaffold dev --port-forward i te wa e huihuia ana:

Te arotake o Skaffold mo te whanaketanga Kubernetes

Tuatahi, ka kite koe kei te whakamahia te keteroki. I muri mai, ka huihuia te tono, ka tohatohahia, ka tukuna nga tauranga. Mai i tohua --port-forward, I tukuna e Skaffold te tauranga ki web, i te mea i uia ki a ia, engari i konei app i whiua e ia i runga i tana ake whakaaro (whiria te mea utu tata rawa atu). Whai muri i tenei, ka whiwhi matou i nga raarangi tuatahi mai i nga tono.

Kia tirohia mena ka mahi?

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

Te whakarereke i te konae leeroy-app/app.go - kua hipa etahi hēkona... a:

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

I te wa ano, ko Skaffold ake te whakaatu i te mea ano i roto i te papatohu pera i mua, haunga te waahi kotahi: ka huri noa. leeroy-app, a kaore i te wa kotahi.

He whakaharatau ake

He mea tika ano kia whakahuahia i te wa e hanga ana i tetahi kaupapa hou, ka taea te whirihora mo Skaffold ma te whakamahi i te whakahau. init, he tino watea. I tua atu, ka taea e koe te tuhi i etahi whirihoranga: mahia te whanaketanga i runga i te whirihora taunoa, ka huri ki te atamira me te whakahau run (he rite tonu te tukanga ki dev, kaore e aro turuki i nga huringa), ma te whakamahi i tetahi whirihora rereke.

Kei runga i te katacoda rangatira He maamaa ake ma te tauira. Engari ka tukuna he pouaka kirikiri kua rite ki a Kubernetes, he tono me te Skaffold. He whiringa pai mena kei te pirangi koe ki te whakamatau i nga mea taketake ake.

Ko tetahi take whakamahi mo Skaffold ko te whakahaere whanaketanga i runga i te tautau mamao. Kaore nga tangata katoa e pai ki te whakahaere i a Minikube i runga i o raatau ake taputapu, ka huri i te tono me te tumanako kia pai te mahi ... I tenei keehi, ka whakaoti pai a Skaffold i te raru, ka taea te whakapumau, hei tauira, na nga miihini Reddit, penei i a maatau. kua korerohia i tuhi i roto i to tatou blog.

Tuhinga o mua tenei whakaputanga mai i Weaveworks ka kitea he tauira mo te hanga paipa mo te hanga.

mutunga

He taputapu watea a Skaffold mo te hanga paipa e uru ana ki te tuku tono ki nga Kubernetes me te aro nui ki nga hiahia whanaketanga. He mea ngawari ki te hanga i tetahi paipa "poto" e whai whakaaro ana ki nga hiahia taketake o te kaiwhakawhanake, engari ki te hiahiatia, ka taea e koe te whakarite i nga tikanga nui ake. Ko tetahi o nga tauira maamaa mo te whakamahi i te Skaffold i roto i nga tukanga CI/CD ka hoatu taua kaupapa whakamatautau o 10 ratonga moroiti e whakamahi ana i nga kaha o Kubernetes, gRPC, Istio me OpenCensus Tracing.

Kua tata ki te 8000+ nga whetu a Skaffold i runga i te GitHub, he mea whakawhanakehia e Google, he wahanga o GoogleContainerTools — i roto i te nuinga, i tenei wa he tino take ki te whakapono ka whanake pai te kaupapa i muri mai.

PS

Pānuihia hoki i runga i ta maatau blog:

Source: will.com

Tāpiri i te kōrero