Lèirmheas air Skaffold airson leasachadh Kubernetes

Lèirmheas air Skaffold airson leasachadh Kubernetes

O chionn bliadhna gu leth, air 5 Màrt 2018, leig Google a-mach a ’chiad dreach alpha den phròiseact Open Source aige airson CI / CD ris an canar Sgeadaich, leis an amas “leasachadh Kubernetes sìmplidh agus ath-aithris” a chruthachadh gus am b ’urrainn do luchd-leasachaidh fòcas a chuir air leasachadh seach rianachd. Dè dh’ fhaodadh a bhith inntinneach mu Skaffold? Mar a thionndaidh e, tha beagan chleasan aige suas a mhuin a dh’ fhaodas a dhèanamh na inneal cumhachdach don leasaiche, agus is dòcha eadhon an innleadair gnìomhachd. Leig leinn eòlas fhaighinn air a 'phròiseact agus na comasan aige.

NB: Co-dhiù, tha sinn mu thràth air bruidhinn goirid mu Skaffold san fharsaingeachd againn ath-sgrùdadh air innealan leasaiche, aig a bheil beatha ceangailte ri Kubernetes.

Teòiridh. Adhbhar agus comasan

Mar sin, san fharsaingeachd, bidh Skaffold a’ fuasgladh na duilgheadas a thaobh fèin-ghluasad a dhèanamh air cearcall CI/CD (aig ìrean togail, putadh, cleachdadh), a’ tabhann fios air ais sgiobalta don leasaiche, i.e. an comas toradh atharrachaidhean còd às deidh sin fhaighinn gu sgiobalta - ann an cruth tagradh ùraichte a ’ruith ann am buidheann Kubernetes. Agus faodaidh e obrachadh ann an diofar chuairtean (dev, àrd-ùrlar, cinneasachadh ...), airson a bheil Skaffold a 'cuideachadh le bhith a' toirt cunntas air na pìoban co-fhreagarrach airson an sgaoileadh.

Tha còd stòr Skaffold sgrìobhte ann an Go, air a sgaoileadh le fo cheadachas Apache 2.0 an-asgaidh (GitHub).

Bheir sinn sùil air na prìomh ghnìomhan agus feartan. Tha a 'chiad gabhail a-steach na leanas:

  • Bidh Skaffold a’ tabhann innealan airson pìoban CI/CD a chruthachadh.
  • A ’leigeil leat sùil a chumail air atharrachaidhean anns a’ chòd stòr air a ’chùl agus pròiseas fèin-ghluasadach de chòd a chuir ri chèile ann an ìomhaighean soithich, a’ foillseachadh nan ìomhaighean sin ann an Clàr Docker agus gan cleachdadh gu buidheann Kubernetes.
  • Sioncronaich faidhlichean san stòr leis an eòlaire obrach anns a’ ghobhar.
  • Deuchainnean gu fèin-ghluasadach a’ cleachdadh deuchainn structar container.
  • Air adhart puirt.
  • Leughadh logaichean aplacaid a tha a’ ruith ann an soitheach.
  • A’ cuideachadh le bhith a’ deasbaireachd thagraidhean sgrìobhte ann an Java, Node.js, Python, Go.

A-nis mu na feartan:

  • Chan eil co-phàirtean taobh brabhsair aig Skaffold fhèin. Is e sin, chan eil feum air tuilleadh Kubernetes a rèiteachadh gus an goireas seo a chleachdadh.
  • Pìoban eadar-dhealaichte airson an tagradh agad. Am feum thu an còd a sgaoileadh gu Minikube ionadail fhad ‘s a tha thu a’ leasachadh, agus an uairsin gu àrd-ùrlar no riochdachadh? Airson an adhbhair seo tha профили agus rèiteachadh luchd-cleachdaidh, caochladairean àrainneachd agus brataichean, a leigeas leat cunntas a thoirt air diofar phìoban airson aon iarrtas.
  • CLI. Is e dìreach goireas tòcan agus rèiteachadh ann an YAML. Air an eadar-lìon gheibh thu iomraidhean air oidhirpean cruthachadh GUI deuchainneach, ge-tà, an-dràsta tha seo nas coltaiche dìreach a 'ciallachadh gu bheil feum aig cuideigin air, ach chan ann dha-rìribh.
  • Modularity. Chan e inneal-buain leis fhèin a th’ ann an Skaffold, ach bidh e a’ feuchainn ri modalan fa leth no fuasglaidhean gnàthaichte a chleachdadh airson gnìomhan sònraichte.

Dealbh air an fhear mu dheireadh:

  • Aig an ìre cruinneachaidh faodaidh tu a chleachdadh:
    • togail docker gu h-ionadail, ann am brabhsair a’ cleachdadh kaniko no ann an Google Cloud Build;
    • Bazel gu h-ionadail;
    • Jib Maven agus Jib Gradle gu h-ionadail no ann an Google Cloud Build;
    • bidh sgriobtaichean togail àbhaisteach a’ ruith gu h-ionadail. Ma dh'fheumas tu fuasgladh togail eile (nas sùbailte / eòlach / ...) a ruith, tha e air a mhìneachadh san sgriobt gus am bi Skaffold ga chuir air bhog (eisimpleir bho sgrìobhainnean). Leigidh seo leat neach-cruinneachaidh sam bith a dh’ fhaodar a ghairm a’ cleachdadh sgriobt;
  • Aig an ìre deuchainn, an iomradh mu thràth container-structar-deuchainn;
  • Airson cleachdadh tha na leanas air a thoirt seachad:
    • Cubectl;
    • Helm;
    • gnàthachadh.

Taing dha seo, faodar Skaffold a ghairm sònraichte frèam airson CI/CD a thogail. Seo eisimpleir de shruth-obrach nuair a bhios tu ga chleachdadh (bho sgrìobhainnean a’ phròiseict):

Lèirmheas air Skaffold airson leasachadh Kubernetes

Cò ris a tha obair Skaffold coltach san fharsaingeachd?

  1. Bidh an goireas a’ cumail sùil air atharrachaidhean anns an eòlaire còd stòr. Ma thèid atharrachaidhean a dhèanamh air na faidhlichean, bidh iad air an sioncronadh leis a’ pod tagraidh ann am buidheann Kubernetes. Ma ghabhas e dèanamh, gun a bhith ag ath-chruinneachadh an ìomhaigh. Rud eile, thèid ìomhaigh ùr a chruinneachadh.
  2. Tha an ìomhaigh cruinnichte air a sgrùdadh le bhith a’ cleachdadh deuchainn structar-giùlain, air a tagadh agus air a chuir gu Clàr an Docker.
  3. Às deidh seo, tha an ìomhaigh air a chleachdadh - air a chleachdadh ann am buidheann Kubernetes.
  4. Ma chaidh an cur air bhog a thòiseachadh leis an àithne skaffold dev, an uairsin tòisichidh sinn a’ faighinn logaichean bhon tagradh, agus tha Skaffold a ’feitheamh ri atharrachaidhean gus na gnìomhan gu lèir ath-aithris a-rithist.

Lèirmheas air Skaffold airson leasachadh Kubernetes
Dealbh de na prìomh ìrean de obrachadh Skaffold

Cleachdaich. A' feuchainn ri Skaffold

Gus cleachdadh Skaffold a nochdadh, gabhaidh mi eisimpleir bho Stòr-tasgaidh pròiseact GitHub. A bharrachd air an sin, ann Gheibh thu mòran eisimpleirean eile a bheir aire do dhiofar fheartan sònraichte. Nì mi a h-uile gnìomh gu h-ionadail ann am Minikube. Tha an stàladh sìmplidh agus bheir e beagan mhionaidean, agus feumaidh tu kubectl airson tòiseachadh.

Stàlaich 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

Dèanamaid clonadh air stòr Skaffold leis na h-eisimpleirean riatanach:

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

Thagh mi eisimpleir le dà shlat, gach fear le aon iarrtas beag Go. Is e aon iarrtas an aghaidh (leeroy-web), a bhios ag ath-stiùireadh an iarrtais chun dàrna tagradh - an backend (leeroy-app). Feuch sinn cò ris a tha e coltach:

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

tha còd Go agus faidhlichean Docker sìmplidh airson a’ chòd seo a thogail gu h-ionadail ann an leeroy-app agus leeroy-web:

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

Cha toir mi an còd tagraidh - tha e gu leòr fios a bhith agad air sin leeroy-web gabhail ri iarrtasan agus a’ toirt cead dhaibh leeroy-app. Mar sin anns na faidhlichean Deployment.yaml chan eil ann ach seirbheis airson app (airson slighe a-staigh). port pod web cuiridh sinn air adhart e thugam fhìn airson faighinn gu sgiobalta chun tagradh.

A rèir coltais 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

Tha na h-ìrean gu h-àrd air am mìneachadh an seo. A bharrachd air an rèiteachadh seo, tha faidhle ann cuideachd le roghainnean cruinneil - ~/.skaffold/config. Faodar a dheasachadh le làimh neo tron ​​CLI - mar eisimpleir, mar seo:

skaffold config set --global local-cluster true

Suidhichidh an àithne seo an caochladair cruinne local-cluster ann an ciall true, às deidh sin cha bhith Skaffold a’ feuchainn ri dealbhan a phutadh chun chlàr iomallach. Ma tha thu a’ leasachadh gu h-ionadail, faodaidh tu an àithne seo a chleachdadh gus dealbhan a thogail gu h-ionadail.

Air ais gu skaffold.yaml:

  • Air an àrd-ùrlar build tha sinn a’ sònrachadh gum feum thu an dealbh a chruinneachadh agus a shàbhaladh gu h-ionadail. Às deidh an togail ruith airson a’ chiad uair, chì sinn na leanas:
    // т.к. 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

    Mar a chì thu, chuir Skaffold tagaichean air na h-ìomhaighean fhèin. Air an t-slighe, tha grunn phoileasaidhean tagaidh a 'faighinn taic.

  • Nas fhaide air adhart san config tha e air a chomharrachadh context: ./leeroy-app/, i.e. tha an co-theacsa anns a bheil an ìomhaigh air a chruinneachadh air a shònrachadh.
  • Aig an ìre cleachdadh, tha e air a dhearbhadh gun cleachd sinn kubectl agus masg airson na taisbeanaidhean riatanach.
  • PortForward: coltach ri mar a bhios sinn mar as trice air adhart puirt a 'cleachdadh kubectl port-forward, bheir sinn stiùireadh do Skaffold an àithne seo a ghairm. Anns a 'chùis seo, thèid port ionadail 9000 a chuir air adhart gu 8080 ann an cleachdadh leis an ainm leeroy-web.

Tha an t-àm ann a chuir air bhog skaffold dev: Cruthaichidh an sgioba “lùb fios-air-ais” leantainneach, i.e. chan e a-mhàin gun cruinnich e a h-uile càil agus gun cuir e a-steach e don bhuidheann, ach innsidh e dhut cuideachd mu staid nam pods an-dràsta, a’ cumail sùil air atharrachaidhean agus ag ùrachadh staid nam pods.

Seo an toradh tòiseachaidh skaffold dev --port-forward nuair a bhios tu ag ath-chruinneachadh:

Lèirmheas air Skaffold airson leasachadh Kubernetes

An toiseach, chì thu gu bheil an tasgadan ga chleachdadh. An ath rud, tha an tagradh air a chruinneachadh, air a chuir a-steach, agus tha puirt air an cur air adhart. Bhon a chaidh a shònrachadh --port-forward, Chuir Skaffold am port air adhart gu web, mar dh' iarradh air, ach an so app thilg e air a thoil fhèin (thagh e am fear saor as fhaisge). Às dèidh seo, gheibh sinn a 'chiad logaichean bho na h-aplacaidean.

Feuch an dèan sinn cinnteach a bheil e ag obair?

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

Ag atharrachadh am faidhle leeroy-app/app.go - beagan diogan seachad ... agus:

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

Aig an aon àm, sheall Skaffold fhèin an aon rud anns a’ chonsail agus a bha e roimhe, ach a-mhàin aon phuing: cha deach a sgaoileadh ach leeroy-app, agus chan ann aig an aon àm.

Tuilleadh cleachdaidh

Is fhiach a ràdh cuideachd nuair a chruthaicheas tu pròiseact ùr, faodar configs airson Skaffold a chuir air adhart leis an àithne init, a tha gu math goireasach. A bharrachd air an sin, faodaidh tu grunn configs a sgrìobhadh: leasachadh a dhèanamh air an rèiteachadh bunaiteach, agus an uairsin a chuir a-mach chun àrd-ùrlar leis an àithne run (pròiseas co-ionann ri dev, dìreach gun a bhith a’ cumail sùil air atharrachaidhean), a’ cleachdadh config eadar-dhealaichte.

Air katacoda tha stiùireadh Tha e eadhon nas fhasa le eisimpleir. Ach tha e a’ tabhann bogsa gainmhich deiseil le Kubernetes, tagradh agus Skaffold. Deagh roghainn ma tha ùidh agad na rudan bunaiteach fheuchainn thu fhèin.

Is e aon chùis cleachdaidh a dh’ fhaodadh a bhith ann airson Skaffold leasachadh a dhèanamh air cruinneachadh iomallach. Chan eil a h-uile duine comhfhurtail a ’ruith Minikube air a’ bhathar-cruaidh aca fhèin, an uairsin a ’sgaoileadh an aplacaid agus an dùil gun obraich e gu h-iomchaidh ... Anns a’ chùis seo, bidh Skaffold a ’fuasgladh na duilgheadas gu foirfe, a dh’ fhaodar a dhearbhadh, mar eisimpleir, le innleadairean Reddit, mar a tha againn. air a dheasbad mu thràth sgrìobh anns a' bhlog againn.

Рђ РІ am foillseachadh seo bho Weaveworks gheibh thu eisimpleir de bhith a’ cruthachadh loidhne-phìoban airson cinneasachadh.

co-dhùnadh

Tha Skaffold na inneal goireasach airson pìoban a thogail a tha a’ toirt a-steach cleachdadh thagraidhean gu Kubernetes agus a tha gu sònraichte ag amas air feumalachdan leasachaidh. Tha e ga dhèanamh gu math furasta loidhne-phìoban “goirid” a chruthachadh a bheir aire do fheumalachdan bunaiteach an leasaiche, ach ma thogras tu, faodaidh tu pròiseasan nas motha a chuir air dòigh. Mar aon de na h-eisimpleirean soilleir de bhith a’ cleachdadh Skaffold ann am pròiseasan CI/CD air a thoirt seachad leithid de pròiseact deuchainn de 10 microservices a’ cleachdadh comasan Kubernetes, gRPC, Istio agus OpenCensus Tracing.

Tha faisg air 8000+ rionnag aig Skaffold mu thràth air GitHub, air a leasachadh le Google agus tha e na phàirt de GoogleContainerTools - san fharsaingeachd, aig an àm seo tha a h-uile adhbhar ann a bhith a’ creidsinn gun tig am pròiseact air adhart gu toilichte gu bràth.

PS

Leugh cuideachd air ar blog:

Source: www.habr.com

Cuir beachd ann