werf - ngwa anyị maka CI / CD na Kubernetes (nleba anya na akụkọ vidiyo)

Mee 27 na nnukwu ọnụ ụlọ nke DevOpsConf 2019 ogbako, emere dị ka akụkụ nke mmemme ahụ. RIT++ 2019, dị ka akụkụ nke ngalaba "Nnyefe Na-aga n'ihu", e nyere akụkọ "werf - ngwá ọrụ anyị maka CI/CD na Kubernetes". Ọ na-ekwu maka ndị ahụ nsogbu na ihe ịma aka nke onye ọ bụla na-eche ihu mgbe ebuga na Kubernetes, yana gbasara nuances nke nwere ike ọ gaghị ahụ ozugbo. N'ịtụle azịza nwere ike ime, anyị na-egosi otu esi etinye ya na ngwa Open Source werf.

Kemgbe ihe ngosi ahụ, ike anyị (nke a na-akpọbu dapp) eruola nnukwu akụkọ ihe mere eme nke Kpakpando 1000 na GitHub - anyị nwere olile anya na obodo ndị ọrụ ya na-eto eto ga-eme ka ndụ dịrị ọtụtụ ndị injinia DevOps mfe.

werf - ngwa anyị maka CI / CD na Kubernetes (nleba anya na akụkọ vidiyo)

Yabụ, ka anyị webata vidiyo nke akụkọ (~ nkeji 47, ọtụtụ ihe ọmụma karịa akụkọ) na isi ihe si na ya dị n'ụdị ederede. Gaba!

Na-ebufe koodu na Kubernetes

Okwu a agakwaghị abụ maka werf, kama gbasara CI/CD na Kubernetes, na-egosi na etinyere ngwanro anyị na arịa Docker. (M kwuru banyere nke a na 2016 akụkọ), na K8 ga-eji na-agba ọsọ ya na mmepụta (kwuo maka nke a na Afọ 2017).

Kedu ka nnyefe dị na Kubernetes?

  • Enwere ebe nchekwa Git nwere koodu yana ntuziaka maka iwulite ya. Emebere ngwa a n'ime onyonyo Docker wee bipụta ya na ndekọ Docker.
  • Otu ebe nchekwa ahụ nwekwara ntuziaka maka otu esi ebuga ma mee ngwa ahụ. N'oge nhazi ọkwa, a na-ezigara ntụziaka ndị a na Kubernetes, nke na-enweta ihe oyiyi achọrọ site na ndekọ ma malite ya.
  • Na mgbakwunye, a na-enwekarị ule. Enwere ike ime ụfọdụ n'ime ihe ndị a mgbe ị na-ebipụta onyonyo. Ị nwekwara ike (na-eso otu ntuziaka ahụ) wepụta nnomi nke ngwa ahụ (na ebe aha K8 dị iche ma ọ bụ ụyọkọ dị iche) wee mee ule ebe ahụ.
  • N'ikpeazụ, ịchọrọ usoro CI nke na-enweta ihe omume site na Git (ma ọ bụ bọtịnụ bọtịnụ) wee kpọọ ọkwa niile ahọpụtara: wuo, bipụta, ibuga, nwalee.

werf - ngwa anyị maka CI / CD na Kubernetes (nleba anya na akụkọ vidiyo)

Enwere ndetu ole na ole dị mkpa ebe a:

  1. N'ihi na anyị nwere akụrụngwa na-adịghị agbanwe agbanwe akụrụngwa na-adịghị agbanwe agbanwe, onyonyo ngwa a na-eji na ọkwa niile (nhazi, mmepụta, wdg), a ga-enwerịrị otu. Ekwuru m nke a n'ụzọ zuru ezu yana ihe atụ. ebe a.
  2. N'ihi na anyị na-agbaso akụrụngwa dịka usoro koodu (IaC), koodu ngwa, ntuziaka maka ịgbakọta na mmalite ya kwesịrị ịbụ kpọmkwem n'otu ebe nchekwa. Maka ozi ndị ọzọ gbasara nke a, lee otu akụkọ ahụ.
  3. Yinye nnyefe (nnyefe) anyị na-ahụkarị ya dị ka nke a: a chịkọtara ngwa ahụ, nwalere, wepụta ya (ogbo mwepụta) na nke ahụ bụ - nnyefe eweela. Mana n'eziokwu, onye ọrụ na-enweta ihe ị wepụtara, bụghị mgbe ahụ mgbe ị na-enyefe ya na mmepụta, na mgbe ọ nwere ike ịga ebe ahụ na mmepụta a na-arụ ọrụ. Ya mere, ekwere m na agbụ nnyefe ahụ akwụsị naanị n'oge ọrụ (gbaa), ma ọ bụ karịa kpọmkwem, ọbụlagodi n'oge ewepụrụ koodu ahụ na mmepụta (dochie ya na nke ọhụrụ).

Ka anyị laghachi na atụmatụ nnyefe dị n'elu na Kubernetes: ọ bụghị naanị anyị ka e mepụtara ya, ma n'ezie onye ọ bụla na-edozi nsogbu a. N'ezie, a na-akpọ ụkpụrụ a ugbu a GitOps (ị nwere ike ịgụkwu gbasara okwu ahụ na echiche dị n'azụ ya ebe a). Ka anyị leba anya na usoro nke atụmatụ ahụ.

Mee ogbo

Ọ ga-adị ka ị nwere ike ikwu maka iwulite onyonyo Docker na 2019, mgbe onye ọ bụla maara ka esi ede Dockerfiles wee gbaa ọsọ. docker build?.. Nke a bụ nuances m ga-achọ itinye uche na:

  1. Ibu onyonyo okwu, ya mere were multi-ogboịhapụ na oyiyi ahụ naanị ngwa nke dị mkpa n'ezie maka ọrụ ahụ.
  2. Ọnụọgụ nke akwa akwa a ga-ebelata site na ijikọta agbụ nke RUN-iwu dị ka ihe pụtara.
  3. Otú ọ dị, nke a na-agbakwụnye nsogbu debugging, n'ihi na mgbe mgbakọ ahụ dara, ị ga-achọta iwu ziri ezi site na agbụ nke kpatara nsogbu ahụ.
  4. Mgbakọ ọsọ dị mkpa n'ihi na anyị chọrọ ngwa ngwa gbanwee mgbanwe ma hụ nsonaazụ. Dịka ọmụmaatụ, ịchọghị iwughachi ndabere na ọba akwụkwọ asụsụ oge ọ bụla ị wulitere ngwa.
  5. Ọtụtụ mgbe site na otu ebe nchekwa Git ị chọrọ ọtụtụ onyonyo, nke enwere ike idozi site na otu Dockerfiles (ma ọ bụ ọkwa aha n'otu faịlụ) yana edemede Bash na mgbakọ usoro ha.

Nke a bụ naanị ọnụ ọnụ iceberg nke onye ọ bụla chere ihu. Mana enwere nsogbu ndị ọzọ, ọkachasị:

  1. Ọtụtụ mgbe na mgbakọ ogbo anyị chọrọ ihe ugwu (dịka ọmụmaatụ, cache nsonaazụ nke iwu dịka dabara na ndekọ ndekọ nke ndị ọzọ).
  2. Anyị chọrọ Eziokwu kama ide na shei.
  3. Anyị chọrọ wuo na-enweghị Docker ( gịnị kpatara anyị ji chọọ igwe mebere ọzọ nke anyị kwesịrị ịhazi ihe niile maka nke a, mgbe anyị nwere ụyọkọ Kubernetes nke anyị nwere ike ịgbanye arịa?).
  4. Mkpọkọta ọnụ, nke enwere ike ịghọta n'ụzọ dị iche iche: iwu dị iche iche sitere na Dockerfile (ọ bụrụ na ejiri multi-stage mee ihe), ọtụtụ ntinye nke otu ebe nchekwa, ọtụtụ Dockerfiles.
  5. Mgbakọ ekesa: Anyị chọrọ ịnakọta ihe na pọd bụ "ephemeral" n'ihi na cache ha na-apụ n'anya, nke pụtara na ọ dị mkpa ka echekwa ya ebe iche.
  6. N'ikpeazụ, m kpọrọ isi nke ọchịchọ akpaaka: Ọ ga-adị mma ịga na ebe nchekwa, pịnye ụfọdụ iwu ma nweta ihe oyiyi dị njikere, gbakọtara na nghọta nke otu na ihe ị ga-eme nke ọma. Agbanyeghị, mụ onwe m ejighị n'aka na enwere ike ibu ụzọ hụ nuances niile n'ụzọ dị otu a.

Ma ebe a bụ ọrụ:

  • moby/buildkit - onye na-ewu ụlọ sitere na Docker Inc (etinyelarị na ụdị Docker ugbu a), nke na-agbalị idozi nsogbu ndị a niile;
  • kaniko - onye nrụpụta sitere na Google nke na-enye gị ohere iwu ụlọ na-enweghị Docker;
  • Buildpacks.io - Mgbalị CNCF ime anwansi akpaka na, karịsịa, ngwọta na-adọrọ mmasị na rebase maka akwa akwa;
  • na ụyọkọ akụrụngwa ndị ọzọ, dị ka wuo, ezigbo ngwaọrụ/img...

... leekwa kpakpando ole ha nwere na GitHub. Ya bụ, n'otu aka, docker build dị ma nwee ike ime ihe, mana n'eziokwu a naghị edozi okwu ahụ kpamkpam - ihe akaebe nke a bụ mmepe yiri nke ndị nchịkọta ọzọ, nke ọ bụla na-edozi akụkụ ụfọdụ nke nsogbu ahụ.

Mgbakọ na werf

Ya mere, anyị nwetara werf (na mbụ ama ama dị ka dap) - Ngwa mepere emepe sitere na ụlọ ọrụ Flant, nke anyị na-eme kemgbe ọtụtụ afọ. Ihe niile malitere afọ 5 gara aga site na edemede Bash nke mere ka ọgbakọ Dockerfiles dịkwuo mma, na afọ 3 gara aga emewo mmepe zuru oke n'ime usoro nke otu ọrụ nwere ebe nchekwa Git nke ya. (nke mbụ na Ruby, na mgbe ahụ edegharịrị Go, ma n'otu oge ahụ degharịrị aha). Kedu nsogbu mgbakọ na-edozi na werf?

werf - ngwa anyị maka CI / CD na Kubernetes (nleba anya na akụkọ vidiyo)

Emebelarị nsogbu ndị na-acha anụnụ anụnụ na-acha anụnụ anụnụ, a na-eme ihe nrụgharị ahụ n'ime otu onye ọbịa ahụ, na ihe ndị e gosipụtara na edo edo na-ezube imecha na njedebe nke oge okpomọkụ.

Ọkwa mbipụta na ndekọ (bipụta)

Anyị kpọrọ oku docker push... - kedu ihe nwere ike isi ike gbasara ibugo onyonyo na ndekọ? Mgbe ahụ ajụjụ na-ebilite: "Kedu mkpado m ga-etinye na oyiyi ahụ?" Ọ na-ebilite n'ihi na anyị nwere Ọwara mmiri (ma ọ bụ atụmatụ Git ọzọ) na Kubernetes, ụlọ ọrụ ahụ na-agbalịkwa ịhụ na ihe na-eme na Kubernetes na-esote ihe na-eme na Git. A sị ka e kwuwe, Git bụ naanị isi iyi nke eziokwu.

Kedu ihe siri ike gbasara nke a? Gbaa mbọ hụ na mmụgharị: site na ntinye na Git, nke na-enweghị ike ịgbanwe na okike (adịghị agbanwe agbanwe), gaa na onyonyo Docker, nke ekwesịrị idobe ya.

Ọ dịkwa anyị mkpa chọpụta mmalite, n'ihi na anyị chọrọ ịghọta site na-eme ngwa na-agba ọsọ na Kubernetes e wuru (mgbe ahụ anyị nwere ike ime diffs na ihe ndị yiri ya).

Atụmatụ mkpado

Nke mbụ dị mfe git mkpado. Anyị nwere ndekọ nwere mkpado onyonyo dị ka 1.0. Kubernetes nwere ogbo na mmepụta, ebe ebugo onyonyo a. Na Git anyị na-eme nkwa na oge ụfọdụ anyị na-akpado 2.0. Anyị na-anakọta ya dịka ntuziaka ndị sitere na ebe nchekwa ma tinye ya na ndekọ na mkpado 2.0. Anyị na-atụgharị ya na ogbo na, ọ bụrụ na ihe niile dị mma, mgbe ahụ na mmepụta.

werf - ngwa anyị maka CI / CD na Kubernetes (nleba anya na akụkọ vidiyo)

Nsogbu dị na ụzọ a bụ na anyị na-ebu ụzọ tinye mkpado ahụ, na-anwale ma tụgharịa ya. Gịnị kpatara? Nke mbụ, ọ bụ ihe ezi uche na-adịghị na ya: anyị na-enye ụdị sọftụwia nke anyị na-anwalebeghị (anyị enweghị ike ịme ọzọ, n'ihi na iji lelee, anyị kwesịrị itinye mkpado). Nke abụọ, ụzọ a adabaghị na Gitflow.

Nhọrọ nke abuo bu git ime + mkpado. Alaka nna ukwu nwere mkpado 1.0; maka ya na ndekọ - ihe oyiyi etinyere na mmepụta. Na mgbakwunye, ụyọkọ Kubernetes nwere nhụchalụ na nhazi nhazi. Ọzọ anyị na-eso Gitflow: na isi alaka maka mmepe (develop) anyị na-eme atụmatụ ọhụrụ, na-ebute nkwekọrịta na njirimara #c1. Anyị na-anakọta ya wee bipụta ya na ndekọ site na iji njirimara a (#c1). Site n'otu ihe nchọpụta ahụ, anyị na-atụgharị ka ịhụchalụ. Anyị na-eme otu ihe ahụ na nkwa #c2 и #c3.

Mgbe anyị ghọtara na e nwere atụmatụ zuru ezu, anyị na-amalite ịkwado ihe niile. Mepụta alaka na Git release_1.1 (na base #c3 si develop). Ọ dịghị mkpa ịnakọta ntọhapụ a, n'ihi na ... Emere nke a na nzọụkwụ gara aga. N'ihi ya, anyị nwere ike iji ya mee ihe n'ụzọ ziri ezi. Anyị na-edozi ahụhụ n'ime #c4 ma n'otu aka ahụ tụgharịa na nhazi. N'otu oge ahụ, mmepe na-aga n'ihu na develop, ebe mgbanwe na-mgbe ụfọdụ si release_1.1. N'oge ụfọdụ, anyị na-enweta nkwa chịkọtara ma bulite ya na nhazi, nke anyị nwere obi ụtọ na (#c25).

Mgbe ahụ, anyị na-ejikọta (na-aga n'ihu) ngalaba ntọhapụ (release_1.1) na nna ukwu. Anyị na-etinye mkpado na ụdị ọhụrụ a na nkwa a (1.1). Mana achịkọtalarị ihe onyonyo a na ndekọ, yabụ ka anyị ghara ịnakọta ya ọzọ, anyị na-agbakwunye mkpado nke abụọ na onyonyo dị ugbu a (ugbu a o nwere mkpado na ndekọ ahụ. #c25 и 1.1). Mgbe nke ahụ gasịrị, anyị na-atụgharị ya na mmepụta.

Enwere ndọghachi azụ na naanị otu onyonyo ka ebugoro na nhazi (#c25), na mmepụta ya bụ ụdị dị iche iche (1.1), ma anyị maara na "anụ ahụ" ndị a bụ otu ihe oyiyi si na ndekọ.

werf - ngwa anyị maka CI / CD na Kubernetes (nleba anya na akụkọ vidiyo)

Ezigbo mwepu bụ na ọ nweghị nkwado maka mmekọ ọnụ, ị ga-eme ngwa ngwa.

Anyị nwere ike ịga n'ihu wee mee aghụghọ… Ka anyị lelee ọmụmaatụ nke Dockerfile dị mfe:

FROM ruby:2.3 as assets
RUN mkdir -p /app
WORKDIR /app
COPY . ./
RUN gem install bundler && bundle install
RUN bundle exec rake assets:precompile
CMD bundle exec puma -C config/puma.rb

FROM nginx:alpine
COPY --from=assets /app/public /usr/share/nginx/www/public

Ka anyị wulite faịlụ site na ya dịka ụkpụrụ a si dị:

  • SHA256 sitere na njirimara nke onyonyo ejiri (ruby:2.3 и nginx:alpine), nke bụ ndenye ego nke ọdịnaya ha;
  • otu niile (RUN, CMD were gabazie.);
  • SHA256 sitere na faịlụ agbakwunyere.

... ma were checksum (ọzọ SHA256) site na faịlụ dị otú ahụ. Nke a mbinye aka ihe niile na-akọwapụta ọdịnaya nke onyonyo Docker.

werf - ngwa anyị maka CI / CD na Kubernetes (nleba anya na akụkọ vidiyo)

Ka anyị laghachi azụ na eserese na kama ime anyị ga-eji ụdị mbinye aka, i.e. kpado onyonyo na mbinye aka.

werf - ngwa anyị maka CI / CD na Kubernetes (nleba anya na akụkọ vidiyo)

Ugbu a, mgbe ọ dị mkpa, dịka ọmụmaatụ, ijikọta mgbanwe site na ntọhapụ na nna ukwu, anyị nwere ike ime ezigbo njikọ njikọ: ọ ga-enwe njirimara dị iche, ma otu mbinye aka. Site n'otu ihe nchọpụta ahụ, anyị ga-ebupụ onyinyo ahụ na mmepụta.

Mwepu bụ na ugbu a, ọ gaghị ekwe omume ikpebi ụdị ntinye aka na mmepụta - checksums na-arụ ọrụ naanị n'otu ụzọ. A na-edozi nsogbu a site na oyi akwa ọzọ nwere metadata - Aga m agwa gị ọzọ ma emechaa.

Ịkpado na werf

Na werf anyị gara n'ihu ma na-akwado ime ụlọ nkesa nkesa na cache na-adịghị echekwa na otu igwe ... Ya mere, anyị na-ewu ụdị abụọ nke ihe oyiyi Docker, anyị na-akpọ ha. ogbo и image.

Ebe nchekwa werf Git na-echekwa ntuziaka akọwapụtara nke na-akọwa usoro dị iche iche nke ihe owuwu ahụ (tupu wụnye, tinye, tupu Mbido, melite). Anyị na-anakọta onyonyo ọkwa mbụ yana mbinye aka akọwapụtara dị ka ndenye ego nke nzọụkwụ mbụ. Mgbe ahụ, anyị na-agbakwunye koodu isi mmalite, maka ihe oyiyi ogbo ọhụrụ anyị na-agbakọ checksum ... A na-arụ ọrụ ndị a ugboro ugboro maka usoro niile, n'ihi nke a anyị na-enweta nhazi nke ihe oyiyi ogbo. Mgbe ahụ, anyị na-eme ihe oyiyi ikpeazụ, nke nwekwara metadata banyere mmalite ya. Anyị na-akpado onyonyo a n'ụzọ dị iche iche (nkọwa ma emechaa).

werf - ngwa anyị maka CI / CD na Kubernetes (nleba anya na akụkọ vidiyo)

Ka e were ya na mgbe nke a gachara, nkwekọrịta ọhụrụ pụtara nke naanị koodu ngwa ka agbanwere. Gịnị ga-eme? Maka mgbanwe koodu, a ga-emepụta patch ma kwadoo onyonyo ọkwa ọhụrụ. A ga-ekpebi mbinye aka ya dị ka checksum nke onyonyo ogbo ochie na patch ọhụrụ. A ga-emepụta onyonyo ikpeazụ ọhụrụ site na onyonyo a. Omume yiri nke ahụ ga-enwe mgbanwe na ọkwa ndị ọzọ.

Ya mere, onyonyo ogbo bụ ebe nchekwa enwere ike ịchekwa ya nke ọma, a na-ebugokwa onyonyo ndị emegoro na ya na ndekọ Docker.

werf - ngwa anyị maka CI / CD na Kubernetes (nleba anya na akụkọ vidiyo)

Na-ehicha ndekọ

Anyị anaghị ekwu maka ihichapụ ọkwa nke kwụgidere mgbe mkpado ehichapụchara - nke a bụ njirimara ọkọlọtọ nke Docker Registry n'onwe ya. Anyị na-ekwu maka ọnọdụ mgbe ọtụtụ mkpado Docker na-agbakọta ma anyị ghọtara na anyị anaghịzi achọ ụfọdụ n'ime ha, mana ha na-eweghara ohere (na / ma ọ bụ anyị na-akwụ ụgwọ ya).

Kedu ihe bụ atụmatụ nhicha?

  1. Ị nweghị ike ime ihe ọ bụla adịghị ọcha. Mgbe ụfọdụ, ọ na-adị mfe ịkwụ ntakịrị maka ohere ọzọ karịa ịkọwapụta nnukwu mkpado. Mana nke a na-arụ ọrụ naanị ruo otu ebe.
  2. Ntọgharị zuru oke. Ọ bụrụ na ihichapụ onyonyo niile wee wughachi naanị ndị dị ugbu a na sistemụ CI, nsogbu nwere ike ibilite. Ọ bụrụ na akpa ahụ amaliteghachiri na mmepụta, a ga-ebunye ihe oyiyi ọhụrụ maka ya - nke onye ọ bụla nwalebeghị. Nke a na-egbu echiche nke akụrụngwa na-adịghị agbanwe agbanwe.
  3. Agba-acha ọbara ọbara. Otu ndekọ malitere ijupụta - anyị na-ebugo onyonyo gaa na nke ọzọ. Otu nsogbu ahụ dị na usoro gara aga: kedu mgbe ị nwere ike ikpochapụ ndekọ nke malitere ijupụta?
  4. Site na oge. Hichapụ onyonyo niile karịrị otu ọnwa? Mana a ga-enwerịrị ọrụ nke emelitebeghị otu ọnwa...
  5. Iji aka chọpụta ihe enwere ike ihichapụ.

Enwere nhọrọ abụọ nwere ike ime n'ezie: adịghị ọcha ma ọ bụ ngwakọta nke acha anụnụ anụnụ-acha akwụkwọ ndụ + na aka. N'okwu nke ikpeazụ, anyị na-ekwu maka ihe ndị a: mgbe ị ghọtara na ọ bụ oge iji kpochapụ ndekọ ahụ, ị ​​na-emepụta ihe ọhụrụ ma tinye ihe oyiyi ọhụrụ niile na ya n'ime oge, dịka ọmụmaatụ, otu ọnwa. Ma mgbe otu ọnwa gachara, hụ pọd ndị dị na Kubernetes ka na-eji ndekọ ochie, ma bufee ha na ndekọ ọhụrụ.

Kedu ihe anyị bịarutere werf? Anyị na-anakọta:

  1. Git isi: mkpado niile, alaka niile - na-eche na anyị chọrọ ihe niile akara na Git na onyonyo (ma ọ bụrụ na ọ bụghị, mgbe ahụ anyị kwesịrị ihichapụ ya na Git n'onwe ya);
  2. pọọsụ niile a na-ebupụ ugbu a na Kubernetes;
  3. ochie ReplicaSets (ihe ewepụtara n'oge na-adịbeghị anya), anyị na-eme atụmatụ inyocha mwepụta Helm wee họrọ onyonyo kachasị ọhụrụ n'ebe ahụ.

... ma mee whitelist site na nke a - ndepụta onyonyo nke anyị agaghị ehichapụ. Anyị na-ehichapụ ihe ọ bụla ọzọ, mgbe nke ahụ gasịrị, anyị na-ahụ ihe oyiyi ụmụ mgbei ma hichapụ ha.

Nyefee ogbo

Nkwuwapụta ntụkwasị obi

Isi ihe mbụ m ga-achọ ịdọrọ uche gaa na mbugharị ahụ bụ mwepụta nke nhazi akụrụngwa emelitere, nke ekwuputara n'ụzọ doro anya. Akwụkwọ mbụ YAML na-akọwa akụrụngwa Kubernetes na-adị iche mgbe niile na nsonaazụ na-agba ọsọ na ụyọkọ ahụ. N'ihi na Kubernetes na-agbakwụnye na nhazi ahụ:

  1. ihe nchọpụta;
  2. ozi ọrụ;
  3. ọtụtụ ụkpụrụ ndabara;
  4. ngalaba nwere ọnọdụ dị ugbu a;
  5. mgbanwe emere ka akụkụ nke webhook nnabata;
  6. nsonaazụ nke ọrụ nke ndị njikwa dị iche iche (na onye nhazi oge).

Ya mere, mgbe nhazi akụrụngwa ọhụrụ pụtara (ọhụrụ), anyị enweghị ike were na degharịa ugbu a, "dị ndụ" nhazi na ya (-ebi). Iji mee nke a, anyị ga-atụnyere ọhụrụ na nhazi ikpeazụ etinyere (ikpeazụ-etinye) ma tụgharịa na -ebi natara kwachie.

A na-akpọ ụzọ a Njikọ 2-ụzọ. A na-eji ya dịka ọmụmaatụ, na Helm.

E nwekwara Njikọ 3-ụzọ, nke dị iche na nke ahụ:

  • atụnyere ikpeazụ-etinye и ọhụrụ, anyị na-ele anya ihe ehichapụrụ;
  • atụnyere ọhụrụ и -ebi, anyị na-ele anya ihe agbakwunyere ma ọ bụ gbanwee;
  • a na-etinye ihe nchikota nchikota na -ebi.

Anyị na-ebuga ngwa 1000+ na Helm, yabụ anyị na-ebikọ ọnụ ụzọ abụọ. Otú ọ dị, ọ nwere ọtụtụ nsogbu ndị anyị ji nkpuchi anyị dozie, nke na-enyere Helm aka ịrụ ọrụ nke ọma.

Ezigbo ọkwa mbughari

Mgbe usoro CI anyị weputara nhazi ọhụrụ maka Kubernetes dabere na ihe omume na-esote, ọ na-ebufe ya maka ojiji. (itinye) na ụyọkọ - iji Helm ma ọ bụ kubectl apply. Na-esote, njikọ N-ụzọ akọwara nke ọma na-eme, nke Kubernetes API na-anabata nke ọma na sistemụ CI, yana nke onye ọrụ ya.

werf - ngwa anyị maka CI / CD na Kubernetes (nleba anya na akụkọ vidiyo)

Agbanyeghị, enwere nnukwu nsogbu: ka emechara Ngwa na-aga nke ọma apụtaghị na mbupụ ga-aga nke ọma. Ọ bụrụ na Kubernetes ghọtara mgbanwe ndị a ga-etinye n'ọrụ ma tinye ya, anyị amaghị ihe ga-esi na ya pụta. Dịka ọmụmaatụ, imelite na ịmalitegharị pods na frontend nwere ike ịga nke ọma, ma ọ bụghị na azụ azụ, anyị ga-enweta ụdị dị iche iche nke ihe oyiyi ngwa na-agba ọsọ.

Iji mee ihe niile n'ụzọ ziri ezi, atụmatụ a chọrọ njikọ ọzọ - onye na-achọpụta ihe pụrụ iche nke ga-enweta ozi ọkwa site na Kubernetes API ma nyefee ya maka nyocha ọzọ nke ezigbo ọnọdụ ihe. Anyị mepụtara ọba akwụkwọ mepere emepe na Go - cubedog (lee ọkwa ya ebe a), nke na-edozi nsogbu a ma wuo ya n'ime werf.

A na-ahazi omume nke tracker a na ọkwa werf site na iji nkọwa ndị etinyere na Deployments ma ọ bụ StatefulSets. Nkọwa isi - fail-mode - ghọtara ihe ndị a pụtara:

  • IgnoreAndContinueDeployProcess - anyị na-eleghara nsogbu nke iwepụta akụrụngwa a ma gaa n'ihu na ntinye;
  • FailWholeDeployProcessImmediately - njehie na mpaghara a na-akwụsị usoro ntinye;
  • HopeUntilEndOfDeployProcess - anyị nwere olileanya na akụkụ a ga-arụ ọrụ na njedebe nke ntinye.

Dịka ọmụmaatụ, ngwakọta akụrụngwa na ụkpụrụ nkọwapụta fail-mode:

werf - ngwa anyị maka CI / CD na Kubernetes (nleba anya na akụkọ vidiyo)

Mgbe anyị na-ebuga na nke mbụ, nchekwa data (MongoDB) nwere ike ọ gaghị adị njikere - Nkwanye ga-ada. Ma ị nwere ike chere oge ka ọ malite, na ntinye ga-ewere ọnọdụ.

Enwere nkọwa abụọ maka kubedog na werf:

  • failures-allowed-per-replica - ọnụ ọgụgụ nke ekwe dara maka oyiri ọ bụla;
  • show-logs-until - na-ahazi oge ruo mgbe werf na-egosi (na stdout) ndekọ sitere na pọd niile akpọpụtara. Ihe ndabara bụ PodIsReady (ileghara ozi anyị na-achọghị n'ezie mgbe okporo ụzọ malitere ịbịa na pọd), mana ụkpụrụ dịkwa irè: ControllerIsReady и EndOfDeploy.

Kedu ihe ọzọ anyị chọrọ site na ntinye?

Na mgbakwunye na isi ihe abụọ akọwarala, anyị ga-achọ:

  • ịhụ ndekọ - na naanị ndị dị mkpa, ma ọ bụghị ihe niile n'usoro;
  • egwu oganihu, n'ihi na ọ bụrụ na ọrụ ahụ kwụgidere "na-agbachi nkịtị" ruo ọtụtụ nkeji, ọ dị mkpa ịghọta ihe na-eme n'ebe ahụ;
  • ọzọ ntughari akpaka ọ bụrụ na ihe na-aga nke ọma (ya mere ọ dị oke mkpa ịmata ọnọdụ nke mbupụ). Ntugharị ahụ ga-abụrịrị atọm: ma ọ ga-agafe na njedebe, ma ọ bụ ihe niile na-alaghachi na ọnọdụ mbụ ya.

Nsonaazụ

Maka anyị dị ka ụlọ ọrụ, iji mejuputa nuances niile akọwapụtara na ọkwa dị iche iche nke nnyefe (ewu, bipụta, ibuga), usoro CI na ịba uru zuru ezu. werf.

Kama nkwubi okwu:

werf - ngwa anyị maka CI / CD na Kubernetes (nleba anya na akụkọ vidiyo)

Site n'enyemaka nke werf, anyị enweela ọganihu dị mma n'ịdozi ọtụtụ nsogbu maka ndị injinia DevOps ma ọ ga-enwe obi ụtọ ma ọ bụrụ na obodo ka ukwuu ma ọ dịkarịa ala nwaa ọrụ a n'omume. Ọ ga-adị mfe iji nweta ezigbo nsonaazụ ọnụ.

Vidiyo na slide

Vidiyo sitere na arụmọrụ (~ nkeji 47):

Ngosipụta akụkọ a:

PS

Akụkọ ndị ọzọ gbasara Kubernetes na blọọgụ anyị:

isi: www.habr.com

Tinye a comment