werf - irinṣẹ wa fun CI / CD ni Kubernetes (ayẹwo ati ijabọ fidio)

Oṣu Karun ọjọ 27 ni gbongan akọkọ ti apejọ DevOpsConf 2019, ti o waye gẹgẹbi apakan ti ajọdun RIT++ Ọdun 2019, gẹgẹ bi apakan ti apakan “Ifijiṣẹ Ilọsiwaju”, a fun ijabọ kan “werf - irinṣẹ wa fun CI/CD ni Kubernetes”. O sọrọ nipa awọn awọn iṣoro ati awọn italaya ti gbogbo eniyan dojukọ nigba gbigbe lọ si Kubernetes, bakannaa nipa awọn nuances ti o le ma ṣe akiyesi lẹsẹkẹsẹ. Ṣiṣayẹwo awọn solusan ti o ṣeeṣe, a fihan bi eyi ṣe ṣe imuse ni irinṣẹ Orisun Ṣiṣii werf.

Lati igbejade, IwUlO wa (eyiti a mọ tẹlẹ bi dapp) ti de ibi-nla itan kan ti Awọn irawọ 1000 lori GitHub - a nireti pe agbegbe ti o dagba ti awọn olumulo yoo jẹ ki igbesi aye rọrun fun ọpọlọpọ awọn onimọ-ẹrọ DevOps.

werf - irinṣẹ wa fun CI / CD ni Kubernetes (ayẹwo ati ijabọ fidio)

Nitorinaa, jẹ ki a ṣafihan fidio iroyin (~ awọn iṣẹju 47, alaye diẹ sii ju nkan naa lọ) ati jade akọkọ lati inu rẹ ni fọọmu ọrọ. Lọ!

Ifijiṣẹ koodu si Kubernetes

Ọrọ naa kii yoo jẹ nipa werf mọ, ṣugbọn nipa CI/CD ni Kubernetes, ti o tumọ si pe sọfitiwia wa ni akopọ ninu awọn apoti Docker. (Mo ti sọrọ nipa eyi ni 2016 iroyin), ati K8s yoo ṣee lo lati ṣiṣe ni iṣelọpọ (diẹ sii nipa eyi ni Ọdun 2017).

Kini ifijiṣẹ dabi ni Kubernetes?

  • Ibi ipamọ Git wa pẹlu koodu ati awọn itọnisọna fun kikọ rẹ. Ohun elo naa jẹ itumọ sinu aworan Docker kan ati tẹjade ni iforukọsilẹ Docker.
  • Ibi ipamọ kanna naa tun ni awọn itọnisọna lori bi o ṣe le ranṣẹ ati ṣiṣe ohun elo naa. Ni ipele imuṣiṣẹ, awọn ilana wọnyi ni a firanṣẹ si Kubernetes, eyiti o gba aworan ti o fẹ lati iforukọsilẹ ati ṣe ifilọlẹ.
  • Ni afikun, awọn idanwo nigbagbogbo wa. Diẹ ninu awọn wọnyi le ṣee ṣe nigba titẹjade aworan kan. O tun le (atẹle awọn ilana kanna) gbe ẹda ohun elo naa (ni aaye orukọ K8s lọtọ tabi iṣupọ lọtọ) ati ṣiṣe awọn idanwo nibẹ.
  • Ni ipari, o nilo eto CI kan ti o gba awọn iṣẹlẹ lati Git (tabi awọn titẹ bọtini) ati pe gbogbo awọn ipele ti a yan: kọ, ṣe atẹjade, ranṣiṣẹ, idanwo.

werf - irinṣẹ wa fun CI / CD ni Kubernetes (ayẹwo ati ijabọ fidio)

Awọn akọsilẹ pataki diẹ wa nibi:

  1. Nitoripe a ni amayederun ti ko le yipada (awọn amayederun ti ko le yipada), aworan ohun elo ti o lo ni gbogbo awọn ipele (ipese, iṣelọpọ, bbl), nibẹ gbọdọ jẹ ọkan. Mo ti sọrọ nipa eyi ni awọn alaye diẹ sii ati pẹlu awọn apẹẹrẹ. nibi.
  2. Nitoripe a tẹle awọn amayederun bi ọna koodu (IaC), koodu ohun elo, awọn ilana fun apejọ ati ifilọlẹ o yẹ ki o jẹ gangan ni ibi ipamọ kan. Fun alaye diẹ sii nipa eyi, wo iroyin kanna.
  3. Ifijiṣẹ pq (ifijiṣẹ) a maa n rii bii eyi: ohun elo naa ti ṣajọpọ, idanwo, tu silẹ (Ipele itusilẹ) ati pe iyẹn - ifijiṣẹ ti waye. Ṣugbọn ni otitọ, olumulo gba ohun ti o yiyi, kii ṣe lẹhinna nigbati o ba firanṣẹ si iṣelọpọ, ati nigbati o ni anfani lati lọ sibẹ ati iṣelọpọ yii ṣiṣẹ. Nitorinaa Mo gbagbọ pe pq ifijiṣẹ pari nikan ni ipele iṣẹ (ṣiṣe), tabi diẹ sii ni deede, paapaa ni akoko ti a yọ koodu kuro lati iṣelọpọ (fidipo rẹ pẹlu tuntun kan).

Jẹ ki a pada si eto ifijiṣẹ ti o wa loke ni Kubernetes: kii ṣe nipasẹ wa nikan ni a ṣẹda, ṣugbọn nipasẹ ọrọ gangan gbogbo eniyan ti o koju iṣoro yii. Ni otitọ, apẹrẹ yii ni a pe ni GitOps bayi (o le ka diẹ sii nipa ọrọ naa ati awọn imọran lẹhin rẹ nibi). Jẹ ki a wo awọn ipele ti eto naa.

Kọ ipele

Yoo dabi pe o le sọrọ nipa kikọ awọn aworan Docker ni ọdun 2019, nigbati gbogbo eniyan mọ bi o ṣe le kọ Dockerfiles ati ṣiṣe docker build?.. Eyi ni awọn nuances ti Emi yoo fẹ lati fiyesi si:

  1. Iwọn aworan awọn ọrọ, nitorina lo olona-ipelelati fi silẹ ni aworan nikan ohun elo ti o jẹ pataki fun iṣẹ naa.
  2. Nọmba ti fẹlẹfẹlẹ gbọdọ wa ni o ti gbe sėgbė nipa apapọ pq ti RUN-pipaṣẹ gẹgẹ bi itumo.
  3. Sibẹsibẹ, eyi ṣe afikun awọn iṣoro n ṣatunṣe aṣiṣe, nitori nigbati apejọ ba ṣubu, o ni lati wa aṣẹ ti o tọ lati pq ti o fa iṣoro naa.
  4. Iyara apejọ pataki nitori a fẹ lati ni kiakia yiyi awọn ayipada ati ki o wo awọn esi. Fun apẹẹrẹ, iwọ ko fẹ lati tun awọn igbẹkẹle kọ ni awọn ile-ikawe ede ni gbogbo igba ti o ba kọ ohun elo kan.
  5. Nigbagbogbo lati ibi ipamọ Git kan o nilo ọpọlọpọ awọn aworan, eyi ti o le ṣe ipinnu nipasẹ ṣeto Dockerfiles (tabi awọn ipele ti a darukọ ni faili kan) ati iwe afọwọkọ Bash pẹlu apejọ ti o tẹle wọn.

Eleyi je o kan awọn sample ti yinyinberg ti gbogbo eniyan koju. Ṣugbọn awọn iṣoro miiran wa, ni pataki:

  1. Nigbagbogbo ni ipele apejọ a nilo nkankan gbe soke (fun apẹẹrẹ, kaṣe abajade ti aṣẹ kan bi apt ni itọsọna ẹnikẹta).
  2. A fẹ O ṣee dipo kikọ ni ikarahun.
  3. A fẹ kọ lai Docker (kilode ti a nilo ẹrọ aifọwọyi afikun ninu eyiti a nilo lati tunto ohun gbogbo fun eyi, nigba ti a ti ni iṣupọ Kubernetes tẹlẹ ninu eyiti a le ṣiṣe awọn apoti?).
  4. Apejọ ti o jọra, eyiti o le ni oye ni awọn ọna oriṣiriṣi: awọn ofin oriṣiriṣi lati Dockerfile (ti o ba lo awọn ipele pupọ), ọpọlọpọ awọn iṣẹ ti ibi ipamọ kanna, ọpọlọpọ awọn Dockerfiles.
  5. Apejọ pinpin: A fẹ lati gba awọn nkan ni awọn podu ti o jẹ "ephemeral" nitori kaṣe wọn parẹ, eyi ti o tumọ si pe o nilo lati wa ni ipamọ ni ibikan lọtọ.
  6. Níkẹyìn, Mo ti a npè ni ṣonṣo awọn ifẹ adaṣe: Yoo jẹ apẹrẹ lati lọ si ibi ipamọ, tẹ diẹ ninu awọn aṣẹ ati ki o gba aworan ti a ti ṣetan, ti a pejọ pẹlu oye ti bi ati ohun ti o yẹ lati ṣe. Sibẹsibẹ, Emi tikalararẹ ko ni idaniloju pe gbogbo awọn nuances ni a le rii tẹlẹ ni ọna yii.

Ati pe nibi ni awọn iṣẹ akanṣe:

  • moby/buildkit - Akole lati Docker Inc (ti ṣepọ tẹlẹ sinu awọn ẹya lọwọlọwọ ti Docker), eyiti o n gbiyanju lati yanju gbogbo awọn iṣoro wọnyi;
  • kaniko - Akole lati Google ti o fun ọ laaye lati kọ laisi Docker;
  • Buildpacks.io - Igbiyanju CNCF lati ṣe idan adaṣe ati, ni pataki, ojutu ti o nifẹ pẹlu ipilẹ-ipilẹ fun awọn fẹlẹfẹlẹ;
  • ati opo kan ti miiran igbesi, gẹgẹ bi awọn ikole, genuinetools/img...

... ati ki o wo iye awọn irawọ ti wọn ni lori GitHub. Iyẹn ni, ni apa kan, docker build wa ati pe o le ṣe nkan, ṣugbọn ni otitọ ọrọ naa ko yanju patapata - ẹri ti eyi ni idagbasoke ti o jọra ti awọn olugba yiyan, ọkọọkan eyiti o yanju diẹ ninu awọn iṣoro naa.

Apejọ ni werf

Nitorina a ni lati werf (tẹlẹ olokiki bi dapp) - IwUlO orisun ṣiṣi lati ile-iṣẹ Flant, eyiti a ti n ṣe fun ọpọlọpọ ọdun. Gbogbo rẹ bẹrẹ ni ọdun 5 sẹhin pẹlu awọn iwe afọwọkọ Bash ti o ṣe iṣapeye apejọ Dockerfiles, ati fun awọn ọdun 3 sẹhin ni idagbasoke kikun ti a ti ṣe laarin ilana ti iṣẹ akanṣe kan pẹlu ibi ipamọ Git tirẹ. (akọkọ ni Ruby, ati lẹhinna tun kọ lati Lọ, ati ni akoko kanna fun lorukọmii). Awọn ọran apejọ wo ni a yanju ni werf?

werf - irinṣẹ wa fun CI / CD ni Kubernetes (ayẹwo ati ijabọ fidio)

Awọn iṣoro ti iboji ni buluu ti ni imuse tẹlẹ, itumọ ti o jọra ni a ṣe laarin agbalejo kanna, ati pe awọn ọran ti o ṣe afihan ni ofeefee ni a gbero lati pari ni opin igba ooru.

Ipele ti ikede ni iforukọsilẹ (ti atẹjade)

A pe docker push... - kini o le nira nipa ikojọpọ aworan si iforukọsilẹ? Ati lẹhinna ibeere naa dide: “Tagi wo ni MO yẹ ki o fi sori aworan naa?” O dide fun idi ti a ni Gitflow (tabi ilana Git miiran) ati Kubernetes, ati ile-iṣẹ n gbiyanju lati rii daju pe ohun ti o ṣẹlẹ ni Kubernetes tẹle ohun ti o ṣẹlẹ ni Git. Lẹhinna, Git jẹ orisun otitọ wa nikan.

Kini o le bẹ nipa eyi? Rii daju atunṣe: lati kan ṣẹ ni Git, eyi ti o jẹ aileyipada ninu iseda (aileyipada), si aworan Docker, eyiti o yẹ ki o tọju kanna.

O tun ṣe pataki fun wa pinnu ipilẹṣẹ, nitori a fẹ lati ni oye lati eyi ti o ṣe ohun elo ti nṣiṣẹ ni Kubernetes ti a kọ (lẹhinna a le ṣe awọn iyatọ ati awọn nkan ti o jọra).

Awọn ilana fifi aami si

Ni igba akọkọ ti o rọrun git tag. A ni iforukọsilẹ pẹlu aworan ti a samisi bi 1.0. Kubernetes ni ipele ati iṣelọpọ, nibiti aworan yii ti gbejade. Ni Git a ṣe awọn adehun ati ni aaye kan a taagi 2.0. A gba ni ibamu si awọn ilana lati ibi ipamọ ati gbe e sinu iforukọsilẹ pẹlu tag 2.0. A yi lọ si ipele ati, ti gbogbo rẹ ba dara, lẹhinna si iṣelọpọ.

werf - irinṣẹ wa fun CI / CD ni Kubernetes (ayẹwo ati ijabọ fidio)

Iṣoro pẹlu ọna yii ni pe a kọkọ fi aami sii, ati pe lẹhinna ni idanwo ati yiyi jade. Kí nìdí? Ni akọkọ, o rọrun lasan: a n funni ni ẹya ti sọfitiwia ti a ko tii ṣe idanwo sibẹsibẹ (a ko le ṣe bibẹẹkọ, nitori lati le ṣayẹwo, a nilo lati fi aami sii). Ni ẹẹkeji, ọna yii ko ni ibamu pẹlu Gitflow.

Aṣayan keji ni git ṣẹ + tag. Ẹka titunto si ni aami kan 1.0; fun o ni iforukọsilẹ - aworan ti a fi ranṣẹ si iṣelọpọ. Ni afikun, iṣupọ Kubernetes ni awotẹlẹ ati awọn ibi isere. Nigbamii ti a tẹle Gitflow: ni ẹka akọkọ fun idagbasoke (develop) a ṣe titun awọn ẹya ara ẹrọ, Abajade ni a ifaramo pẹlu idamo #c1. A gba a a si tẹjade ni iforukọsilẹ ni lilo idamo yii (#c1). Pẹlu idanimọ kanna a yi jade lati ṣe awotẹlẹ. A ṣe kanna pẹlu awọn adaṣe #c2 и #c3.

Nigba ti a ba rii pe awọn ẹya to wa, a bẹrẹ lati ṣe iduroṣinṣin ohun gbogbo. Ṣẹda ẹka kan ni Git release_1.1 (lori ipilẹ #c3 ati bẹbẹ lọ develop). Ko si iwulo lati gba itusilẹ yii, nitori… eyi ni a ṣe ni igbesẹ ti tẹlẹ. Nitorina, a le jiroro ni yiyi jade si iṣeto. A ṣatunṣe awọn idun sinu #c4 ati bakanna ni yiyi jade si iṣeto. Ni akoko kanna, idagbasoke ti nlọ lọwọ develop, ibi ti ayipada ti wa ni lorekore ya lati release_1.1. Ni aaye kan, a gba adehun kan ti a pejọ ati gbejade si iṣeto, eyiti a ni idunnu pẹlu (#c25).

Lẹhinna a dapọ (pẹlu iyara-siwaju) ẹka itusilẹ (release_1.1) ni oluwa. A fi aami sii pẹlu ẹya tuntun lori iṣẹ yii (1.1). Ṣugbọn aworan yii ti gba tẹlẹ ninu iforukọsilẹ, nitorinaa ki o má ba gba lẹẹkansi, a kan ṣafikun tag keji si aworan ti o wa tẹlẹ (bayi o ni awọn afi ninu iforukọsilẹ #c25 и 1.1). Lẹhin iyẹn, a gbe jade si iṣelọpọ.

Aṣiṣe kan wa ti aworan kan nikan ni o gbejade si titoṣe (#c25), ati ni iṣelọpọ o jẹ oriṣi ti o yatọ (1.1), ṣugbọn a mọ pe "ti ara" iwọnyi jẹ aworan kanna lati iforukọsilẹ.

werf - irinṣẹ wa fun CI / CD ni Kubernetes (ayẹwo ati ijabọ fidio)

Alailanfani gidi ni pe ko si atilẹyin fun awọn ifarapọ idapọ, o ni lati ṣe ni iyara siwaju.

A le lọ siwaju ki o ṣe ẹtan kan... Jẹ ki a wo apẹẹrẹ ti Dockerfile ti o rọrun:

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

Jẹ ki a kọ faili kan lati ọdọ rẹ ni ibamu si ipilẹ atẹle:

  • SHA256 lati awọn idamo ti awọn aworan ti a lo (ruby:2.3 и nginx:alpine), eyi ti o jẹ ayẹwo awọn akoonu wọn;
  • gbogbo awọn ẹgbẹ (RUN, CMD ati bẹbẹ lọ.);
  • SHA256 lati awọn faili ti a fi kun.

... ati ki o gba checksum (lẹẹkansi SHA256) lati iru faili kan. Eyi ibuwọlu ohun gbogbo ti o ṣalaye awọn akoonu ti aworan Docker.

werf - irinṣẹ wa fun CI / CD ni Kubernetes (ayẹwo ati ijabọ fidio)

Jẹ ká lọ pada si awọn aworan atọka ati dipo awọn ifaramo a yoo lo iru awọn ibuwọlu, i.e. taagi awọn aworan pẹlu awọn ibuwọlu.

werf - irinṣẹ wa fun CI / CD ni Kubernetes (ayẹwo ati ijabọ fidio)

Ni bayi, nigbati o ba jẹ dandan, fun apẹẹrẹ, lati dapọ awọn ayipada lati itusilẹ si titunto si, a le ṣe ifarapọ idapọ gidi kan: yoo ni idanimọ ti o yatọ, ṣugbọn ibuwọlu kanna. Pẹlu idanimọ kanna a yoo yi aworan naa jade si iṣelọpọ.

Aila-nfani ni pe ni bayi kii yoo ṣee ṣe lati pinnu iru iru ifaramo ti a ti tẹ si iṣelọpọ - awọn sọwedowo ṣiṣẹ nikan ni itọsọna kan. Iṣoro yii jẹ ipinnu nipasẹ ipele afikun pẹlu metadata - Emi yoo sọ fun ọ diẹ sii nigbamii.

Ifi aami ni werf

Ni werf a ti lọ paapaa siwaju ati pe a ngbaradi lati ṣe ipilẹ ti a pin pẹlu kaṣe ti a ko tọju sori ẹrọ kan ... Nitorina, a n ṣe awọn oriṣi meji ti awọn aworan Docker, a pe wọn. ipele и image.

Ibi ipamọ werf Git ni awọn ile itaja awọn ilana-itumọ ti o ṣe apejuwe awọn ipele oriṣiriṣi ti kikọ (ṣaaju fifi sori ẹrọ, fi sori ẹrọ, ṣaaju Eto, ṣeto). A n gba aworan ipele akọkọ pẹlu ibuwọlu ti a ṣalaye bi iwe ayẹwo ti awọn igbesẹ akọkọ. Lẹhinna a ṣafikun koodu orisun, fun aworan ipele tuntun a ṣe iṣiro rẹ checksum... Awọn iṣẹ wọnyi tun ṣe fun gbogbo awọn ipele, nitori abajade eyi ti a gba ṣeto awọn aworan ipele. Lẹhinna a ṣe aworan ikẹhin, eyiti o tun ni metadata nipa ipilẹṣẹ rẹ. Ati pe a fi aami si aworan yii ni awọn ọna oriṣiriṣi (awọn alaye nigbamii).

werf - irinṣẹ wa fun CI / CD ni Kubernetes (ayẹwo ati ijabọ fidio)

Ṣebi lẹhin eyi adehun tuntun kan han ninu eyiti koodu ohun elo nikan ti yipada. Kini yoo ṣẹlẹ? Fun awọn iyipada koodu, alemo kan yoo ṣẹda ati pe yoo pese aworan ipele tuntun kan. Ibuwọlu rẹ yoo jẹ ipinnu bi iwe ayẹwo ti aworan ipele atijọ ati alemo tuntun. Aworan ipari tuntun yoo ṣẹda lati aworan yii. Iwa iru yoo waye pẹlu awọn iyipada ni awọn ipele miiran.

Nitorinaa, awọn aworan ipele jẹ kaṣe ti o le wa ni fipamọ ni pinpin, ati awọn aworan ti a ṣẹda tẹlẹ lati inu rẹ ti gbejade si iforukọsilẹ Docker.

werf - irinṣẹ wa fun CI / CD ni Kubernetes (ayẹwo ati ijabọ fidio)

Ninu iforukọsilẹ

A ko sọrọ nipa piparẹ awọn fẹlẹfẹlẹ ti o wa ni adiye lẹhin awọn aami ti paarẹ - eyi jẹ ẹya boṣewa ti iforukọsilẹ Docker funrararẹ. A n sọrọ nipa ipo kan nigbati ọpọlọpọ awọn aami Docker kojọpọ ati pe a loye pe a ko nilo diẹ ninu wọn mọ, ṣugbọn wọn gba aaye (ati / tabi a sanwo fun rẹ).

Kini awọn ilana mimọ?

  1. O kan le ṣe ohunkohun maṣe nu. Nigba miiran o rọrun gaan lati sanwo diẹ fun aaye afikun ju lati ṣii tangle nla ti awọn afi. Ṣugbọn eyi ṣiṣẹ nikan titi di aaye kan.
  2. Atunto ni kikun. Ti o ba pa gbogbo awọn aworan rẹ ki o tun ṣe awọn ti o wa lọwọlọwọ nikan ni eto CI, iṣoro le dide. Ti eiyan naa ba tun bẹrẹ ni iṣelọpọ, aworan tuntun yoo kojọpọ fun rẹ - ọkan ti ko ti ni idanwo nipasẹ ẹnikẹni. Eyi pa imọran ti awọn amayederun ti ko yipada.
  3. Alawọ-alawọ ewe. Iforukọsilẹ kan bẹrẹ si ṣiṣan - a gbe awọn aworan si omiiran. Iṣoro kanna bi ni ọna ti tẹlẹ: ni aaye wo ni o le yọ iforukọsilẹ ti o ti bẹrẹ lati ṣaju?
  4. Nipa akoko. Pa gbogbo awọn aworan ti o dagba ju oṣu kan lọ bi? Ṣugbọn dajudaju iṣẹ kan yoo wa ti ko ti ni imudojuiwọn fun oṣu kan…
  5. Pẹlu ọwọ pinnu kini o le paarẹ tẹlẹ.

Awọn aṣayan ṣiṣeeṣe otitọ meji lo wa: maṣe sọ di mimọ tabi apapo ti bulu-alawọ ewe + pẹlu ọwọ. Ninu ọran igbehin, a n sọrọ nipa atẹle yii: nigbati o ba loye pe o to akoko lati nu iforukọsilẹ, o ṣẹda tuntun kan ki o ṣafikun gbogbo awọn aworan tuntun si i ni akoko ti, fun apẹẹrẹ, oṣu kan. Ati lẹhin oṣu kan, wo iru awọn adarọ-ese ni Kubernetes tun nlo iforukọsilẹ atijọ, ati gbe wọn paapaa si iforukọsilẹ tuntun.

Kini a ti de werf? A gba:

  1. Git ori: gbogbo awọn afi, gbogbo awọn ẹka - ro pe a nilo ohun gbogbo ti a samisi ni Git ninu awọn aworan (ati bi ko ba ṣe bẹ, lẹhinna a nilo lati paarẹ ni Git funrararẹ);
  2. gbogbo awọn podu ti a fa jade lọwọlọwọ si Kubernetes;
  3. atijọ ReplicaSets (ohun ti a ti laipe tu), ati awọn ti a gbero tun kan ọlọjẹ Helm tu ati ki o yan awọn titun images nibẹ.

... ki o si ṣe iwe funfun lati inu eto yii - atokọ ti awọn aworan ti a kii yoo paarẹ. A nu gbogbo ohun miiran kuro, lẹhin eyi a wa awọn aworan ipele alainibaba ati paarẹ wọn paapaa.

Ran awọn ipele

Declarativeness ti o gbẹkẹle

Ojuami akọkọ ti Emi yoo fẹ lati fa ifojusi si ni imuṣiṣẹ ni yiyi ti atunto awọn orisun ti a ṣe imudojuiwọn, ti kede ni ikede. Iwe atilẹba YAML ti n ṣapejuwe awọn orisun Kubernetes nigbagbogbo yatọ pupọ si abajade gangan ti nṣiṣẹ ni iṣupọ. Nitori Kubernetes ṣe afikun si iṣeto:

  1. idamo;
  2. alaye iṣẹ;
  3. ọpọlọpọ awọn iye aiyipada;
  4. apakan pẹlu ipo lọwọlọwọ;
  5. awọn ayipada ti a ṣe gẹgẹbi apakan ti webhook gbigba;
  6. abajade iṣẹ ti awọn olutona pupọ (ati oluṣeto).

Nitorinaa, nigbati iṣeto orisun orisun tuntun ba han (titun), a ko le gba nikan ki o tun kọ lọwọlọwọ, iṣeto ni "ifiwe" pẹlu rẹ (gbe). Lati ṣe eyi a yoo ni lati ṣe afiwe titun pẹlu iṣeto ti o kẹhin ti a lo (kẹhin-loo) ki o si yi lọ si gbe ti gba alemo.

Ilana yii ni a npe ni 2-ọna àkópọ. O ti lo, fun apẹẹrẹ, ni Helm.

O tun wa 3-ọna àkópọ, eyi ti o yatọ ni pe:

  • afiwera kẹhin-loo и titun, a wo ohun ti a ti paarẹ;
  • afiwera titun и gbe, a wo ohun ti a ti fi kun tabi yipada;
  • alemo summed ti wa ni loo si gbe.

A ran awọn ohun elo 1000+ pẹlu Helm, nitorinaa a n gbe ni otitọ pẹlu iṣọpọ ọna 2. Sibẹsibẹ, o ni nọmba awọn iṣoro ti a ti yanju pẹlu awọn abulẹ wa, eyiti o ṣe iranlọwọ fun Helm lati ṣiṣẹ ni deede.

Ipo yipo gidi

Lẹhin ti eto CI wa ṣe agbekalẹ iṣeto tuntun fun Kubernetes ti o da lori iṣẹlẹ atẹle, o gbejade fun lilo (bere) to a iṣupọ - lilo Helm tabi kubectl apply. Nigbamii ti, ọna asopọ N-ọna ti a ti ṣalaye tẹlẹ waye, eyiti Kubernetes API ṣe idahun ni itẹwọgba si eto CI, ati pe si olumulo rẹ.

werf - irinṣẹ wa fun CI / CD ni Kubernetes (ayẹwo ati ijabọ fidio)

Sibẹsibẹ, iṣoro nla kan wa: lẹhinna ohun elo aṣeyọri ko tumọ si yiyọkuro aṣeyọri. Ti Kubernetes ba loye kini awọn ayipada nilo lati lo ati lo, a ko tun mọ kini abajade yoo jẹ. Fun apẹẹrẹ, imudojuiwọn ati tun bẹrẹ awọn adarọ-ese ni iwaju iwaju le jẹ aṣeyọri, ṣugbọn kii ṣe ni ẹhin, ati pe a yoo gba awọn ẹya oriṣiriṣi ti awọn aworan ohun elo nṣiṣẹ.

Lati ṣe ohun gbogbo ni deede, ero yii nilo ọna asopọ afikun - olutọpa pataki kan ti yoo gba alaye ipo lati Kubernetes API ati gbejade fun itupalẹ siwaju ti ipo gidi ti awọn nkan. A ṣẹda ile-ikawe Orisun Ṣii ni Go - cubedog (wo ikede rẹ nibi), eyi ti o yanju iṣoro yii ati pe a ṣe sinu werf.

Iwa ti olutọpa yii ni ipele werf jẹ tunto nipa lilo awọn akọsilẹ ti o gbe sori Awọn imuṣiṣẹ tabi StatefulSets. Itumọ akọkọ - fail-mode - loye awọn itumọ wọnyi:

  • IgnoreAndContinueDeployProcess - a foju awọn iṣoro ti yiyi paati yii ati tẹsiwaju imuṣiṣẹ;
  • FailWholeDeployProcessImmediately - aṣiṣe ninu paati yii da ilana imuṣiṣẹ duro;
  • HopeUntilEndOfDeployProcess - a nireti pe paati yii yoo ṣiṣẹ nipasẹ opin imuṣiṣẹ.

Fun apẹẹrẹ, apapo awọn orisun ati awọn iye asọye fail-mode:

werf - irinṣẹ wa fun CI / CD ni Kubernetes (ayẹwo ati ijabọ fidio)

Nigba ti a ba lo fun igba akọkọ, ibi ipamọ data (MongoDB) le ma ti ṣetan sibẹsibẹ - Awọn imuṣiṣẹ yoo kuna. Ṣugbọn o le duro fun akoko lati bẹrẹ, ati imuṣiṣẹ yoo tun waye.

Awọn alaye meji miiran wa fun kubedog ni werf:

  • failures-allowed-per-replica - awọn nọmba ti laaye ṣubu fun kọọkan ajọra;
  • show-logs-until - ṣe ilana akoko naa titi ti awọn ifihan werf (ni stdout) lati gbogbo awọn adarọ-ese ti yiyi. Awọn aiyipada ni PodIsReady (lati foju awọn ifiranṣẹ ti a ko fẹ nigbati ijabọ bẹrẹ wiwa si adarọ ese), ṣugbọn awọn iye tun wulo: ControllerIsReady и EndOfDeploy.

Kini ohun miiran ti a fẹ lati imuṣiṣẹ?

Ni afikun si awọn aaye meji ti a ti ṣalaye tẹlẹ, a yoo fẹ:

  • wo awọn akọọlẹ - ati awọn pataki nikan, kii ṣe ohun gbogbo ni ọna kan;
  • orin itesiwaju, nitori ti iṣẹ naa ba wa ni idorikodo "ipalọlọ" fun awọn iṣẹju pupọ, o ṣe pataki lati ni oye ohun ti n ṣẹlẹ nibẹ;
  • ni laifọwọyi rollback ti nkan kan ba jẹ aṣiṣe (ati nitorina o ṣe pataki lati mọ ipo gidi ti imuṣiṣẹ naa). Yiyi gbọdọ jẹ atomiki: boya o kọja si opin, tabi ohun gbogbo yoo pada si ipo iṣaaju rẹ.

Awọn esi

Fun wa bi ile-iṣẹ kan, lati ṣe gbogbo awọn nuances ti a ṣalaye ni awọn ipele oriṣiriṣi ti ifijiṣẹ (kọ, atẹjade, ranṣiṣẹ), eto CI ati ohun elo ti to. werf.

Dipo ipari:

werf - irinṣẹ wa fun CI / CD ni Kubernetes (ayẹwo ati ijabọ fidio)

Pẹlu iranlọwọ ti werf, a ti ni ilọsiwaju to dara ni ipinnu nọmba nla ti awọn iṣoro fun awọn ẹlẹrọ DevOps ati pe yoo dun ti agbegbe ti o gbooro ba kere ju gbiyanju ohun elo yii ni iṣe. Yoo rọrun lati ṣaṣeyọri abajade to dara papọ.

Awọn fidio ati awọn kikọja

Fidio lati iṣẹ (~ iṣẹju 47):

Igbejade ijabọ naa:

PS

Awọn ijabọ miiran nipa Kubernetes lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun