werf - instrumentum nostrum CI/CD in Kubernetes (respectiva et fama video)

Die 27 Maii in aula principali colloquii DevOpsConf 2019 habita est pars festivitatis RIT++ 2019, cum pars sectionis "Continuae traditionis", relatio "werf-nostri instrumenti CI/CD in Kubernetes" data est. Is de his loquitur difficultates et provocationes quae quisque respicit ad Kubernetes explicansac etiam de nuances non statim notabiles. Solutiones possibiles examinantes, ostendimus quomodo hoc in instrumento patenti perficiatur werf *.

Cum praesentatio, nostra utilitas (olim ut dapp nota) ad miliarium historicum pervenit 1000 stellae in GitHub - speramus fore ut crescens communitas usorum vitam multis fabrum DevOpibus faciliorem reddat.

werf - instrumentum nostrum CI/CD in Kubernetes (respectiva et fama video)

Nos igitur praesentes video de fama (~ 47 minuta, multo magis informativus quam articulus) et principale extractum ex eo in forma textu. Perge!

Tradens codicem ad Kubernetes

Narratio non iam de werf, sed de CI/CD in Kubernetes erit, si programmata nostra in Docker vasis fasciculata sit. (Locutus sum de hoc in 2016 report)et K8s in productione currere debet (Plus de hoc in anno 2017).

Quid partus simile in Kubernetes?

  • Est repositio Git cum codice ac instructionibus ad illud aedificandum. Applicatio aedificata est in imaginem Docker et in Registro Docker publici iuris fecit.
  • Eadem repositio continet etiam instructiones quomodo explicandi et applicandi currunt. In scaena instruere, hae instructiones ad Kubernetes mittuntur, quae imaginem desideratam ex registro accipit et eam immittit.
  • Plus, esse usitas volutpat. Ex his quaedam fieri possunt cum editae imagini. Potes etiam (secundum easdem instructiones) exemplar applicationis (in spatio nominali K8s separato vel in racemo separato) explicare et ibi probationes currere.
  • Postremo, ratio CI necessaria est quae eventus ab Git (vel globulis globulorum) accipit et omnes gradus designatos vocat: aedificare, praedicare, explica, test.

werf - instrumentum nostrum CI/CD in Kubernetes (respectiva et fama video)

Paucae notae hic momenti sunt:

  1. Quia incommutabilem infrastructuram habemus (Inmutabilis infrastructure)applicatio imaginis quae in omnibus gradibus adhibetur (cervgia, productio, etc.); oportet esse unum. De hoc fusius et cum exemplis loquutus sum. hic.
  2. Quia sequimur infrastructuram ut codicem accessus (IaC), schedula schedula, instructiones ad conveniendum ac deducendum esse oportet prorsus in unum repositio. Plura de hoc vide eadem fama.
  3. Partus catenae (traditio) solemus videre sic: applicatio congregata, probata, dimissa (Remissionis scaena) et hoc est - traditio facta est. Sed profecto utentis accipit quod evolvis; non deinde cum ad productionem tradidisti, et quando potuit ire, et hoc opus factum est. Ita credo traditio catenae terminos nisi in operational scaena (Curre)aut pressius, etiam momento temporis cum a productione codicis remotum est (reponendo illud novum).

Redeamus ad schema superius in Kubernetes traditum: id non solum a nobis, sed proprie omnes, qui de hac quaestione tractaverunt, inventum est. Reapse exemplaris nunc vocatur GitOps (Potes legere plura de termino et notionibus post eum hic). Intueamur stadia schematis.

Aedificate scaena

Videtur quod loqui de imaginibus Docker aedificandis anno MMXIX, cum omnes sciunt scribere Dockerfiles et currunt docker build?

  1. Imago pondus res ita usus multi scaenain imagine relinquere solam applicationem, quae ad operationem vere necessaria est.
  2. Numerus layers debet elevat combining catenis RUN-imperat secundum significationem.
  3. Sed haec adiungit problemata debuggingquod, cum inruerit multitudo, e vinculo quaestionem habeas quod jusseris invenias.
  4. Conventus celeritas momenti est quod mutationes cito evolvere et eventus videre volumus. Exempli gratia, clientelas linguarum bibliothecarum omni tempore applicationem aedificationis reficere non vis.
  5. Saepe ab uno Git repositorio indigetis multae imaginesquae solvi possunt per praefinitum Dockerfiles (vel stadia in uno fasciculo nominata) et scripturam Bash cum sequentiali conventu.

Hoc erat extremum iceberg quod omnes facies. Sunt autem aliae quaestiones in speciali;

  1. Saepe in ecclesia scaena aliquid opus est mons (exempli gratia, effectus praecepti quasi aptum directorium tertiae partis).
  2. Volumus Ansible scribebat pro testudine.
  3. Volumus aedificare sine Docker (cur additamento virtualis machinae indigemus in qua omnia ad hoc configurare debemus, cum iam habemus botrum Kubernetes in quo vasa curritur?).
  4. Conventus parallelId quod diversimode intelligi potest: diversa mandata a Dockerfile (si multi-scaena adhibetur), plura committit in eodem reposito, plures Dockerfiles.
  5. Distributa est ecclesia: Volumus colligere res in siliquas quae " evanidae " sunt cella eorum evanescit, quo pacto alicubi seorsim condi debet.
  6. Denique pinnam cupiditatum nominavi automagicPropositum esset ad repositorium, exemplar aliquod mandatum et imaginem paratam accipere, convenerunt cum intellectu quomodo et quid recte facere. Attamen, ego ipse non sum certus de omnibus nuances praevideri posse hoc modo.

Heic sunt incepta;

  • moby / buildit — aedificator ab Docker Inc (iam integram in versionibus currentibus Docker), qui has omnes difficultates solvere conatur;
  • kaniko — aedificator a Google quod sine Docker aedificare permittit;
  • Buildpacks.io - CNCF conatus est magicam facere automatice et, in specie, solutionem interesting cum laminis retractare;
  • et fasciculum aliorum utilitatum, ut buildah, genuinetools/img...

...et vide quot stellas habent in GitHub. Id est, ex una parte; docker build existit et potest facere aliquid, sed in re res non omnino liquet - Probatio huius est parallela progressionis alterorum collectorum, quorum unumquodque problematum partem aliquam solvit.

Conventus in werf

Sic obtinuit ut werf * (formerly clarus sicut dapp) - Patens fons utilitatis ex comitatu Flant, quod per multos annos fuimus. Omnia abhinc V annos cum scriptis Bash optimizing in coetu Dockerfiles incohavit, et per ultimos 5 annos plenae evolutionis mobilis peractae intra unius instituti compagem cum Git repositorio suo. (Primum in Ruby et postea revocetur ire, simul renam). Quid conventus quaestiones in werf solvuntur?

werf - instrumentum nostrum CI/CD in Kubernetes (respectiva et fama video)

Problemata in caerula opacata iam completa sunt, constructum parallelum intra eundem exercitum factum, et quaestiones in luce flavo ad finem aestatis perficiendas disponuntur.

Stage publicationis in registro (publish)

Nos dialed docker push... - Quid difficile est de imagine impositi registro? Deinde oritur quaestio: "Quid tag imaginem imponam?" Oritur ex causa quam habemus Gitflow (vel aliis consiliis Git) et Kubernetes, et industria nititur ut ea quae in Kubernetes fiunt, sequatur ea quae in Git fiunt. Post omnes, Git est nobis unicum principium veritatis.

Quid hoc tam difficile est? Ensure reproducibility: ex commit in Git, quod est immutabile in natura (immutabilis)ad Docker imaginem, quae servanda est.

Etiam sit amet nobis determinare originemquia volumus intelligere, ex quo applicatione cursus in Kubernetes constructus est (deinde possumus facere diss et similia).

Tagging Strategies

Primum est simplex git tag. Habemus subcriptio cum imagine tagged as 1.0. Kubernetes scaenam et productionem habet, ubi haec imago imponatur. In Git facimus committit et aliquando nos tag 2.0. Id colligimus secundum mandatum e conditorio et in registro ponemus cum tag . 2.0. Devolvimus in scenam et, si recte, tum ad producendum.

werf - instrumentum nostrum CI/CD in Kubernetes (respectiva et fama video)

Difficultas huic accessionis est quod primum tag ponemus, et tunc demum probatum et evolvit illud. Quare? Primum est simpliciter consequens: versionem programmatum edimus quam necdum experti sumus (aliter facere non possumus, quia ad reprimendam, tag ponere necesse est). Secundo, haec via cum Gitflow non compatitur.

Secundum optio - git committere + tag. Dominus ramus habet tag 1.0; pro eo in registro - imago ad productionem explicatur. Praeterea, botrus Kubernetes praevia et choragias habet. Proximum sequimur Gitflow: in principali genere ad progressionem (develop) novas notas facimus, unde fit commissio cum identificatorio #c1. Colligimus eam et divulgamus in registro hoc identificatorio utendo.#c1). Cum eodem identifier rebum evolvimus. Idem facimus cum commissis #c2 и #c3.

Cum animadvertimus notas satis esse, omnia stabilire incipimus. Ramum creare in Git release_1.1 (In basi #c3 ex develop). Non opus est colligere hanc liberationem, quia... Hoc factum est in gradu praecedenti. Unde simpliciter volvere possumus choragium illud. Nos figere bugs in #c4 et similiter evolvunt ad choragium. Eodem tempore progressus est in promptu developUbi mutationes temporibus sumptae sunt release_1.1. Aliquando committimus compilata et immissa choragium, quod sumus cum beatis.#c25).

Tunc merge nos (cum celeriter-ante) emissio ramus (release_1.1) in dominum. Ponamus tag cum versione nova de hoc committo (1.1). Sed haec imago iam in registro collecta est, quare ne iterum colligam, alterum tag imagini exsistenti simpliciter addimus (iam habet tags in registro. #c25 и 1.1). deinde ad productionem devolvemus.

Incommodum est quod una tantum imago ad choragium adducitur.#c25) et in productione aliud est genus (1.1Scimus autem physice eandem esse imaginem ex registro.

werf - instrumentum nostrum CI/CD in Kubernetes (respectiva et fama video)

Vera incommodum est quod non est subsidium merge committit, ut facias ieiunium deinceps.

Progredi possumus ulterius et cautelam facere ... Inspiciamus exemplum simplicis Dockerfile:

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

Ex eo limam aedificemus secundum hoc principium:

  • SHA256 ex identificantibus imaginum usus (ruby:2.3 и nginx:alpine) , quae sunt synthesis contentorum;
  • omnes teams (RUN, CMD et sic porro.);
  • SHA256 ex scriniis additae sunt.

... et sume ex tali fasciculo checksum (iterum SHA256). Hoc signature omnia quae in Docker imaginis contenta definit.

werf - instrumentum nostrum CI/CD in Kubernetes (respectiva et fama video)

Eamus ad tabulam et loco committit utemur huiusmodi subscriptionibus, i.e. tag imagines cum subscriptionibus.

werf - instrumentum nostrum CI/CD in Kubernetes (respectiva et fama video)

Nunc, cum opus est, exempli gratia, mutationibus iungi ex dimissione ad dominum, verum committere possumus merge: aliud identifier erit, sed idem subscriptio. Eodem identifiente imaginem ad productionem evolvebimus.

Incommodum est quod nunc fieri non potest determinare quod genus committi pulsus est ad productionem - checksum solum opus in unam partem. Solvitur haec quaestio per metadata addito tabulato - Plura tibi postea dicam.

Tagging in werf

In werf etiam ulterius processimus et construimus cum cella, quae in una machina non recondita est. tempus и imago.

The werf Git repositorium thesaurorum aedificare - specialium instructionum quae varios gradus aedificiorum describuntur (beforeInstall, install, beforeSetup, Setup). Primum scaena imaginem colligimus cum subscriptione definita esse checksum primorum graduum. Deinde addimus fontem codicem, novae scaenicae imaginis, cuius checksum computamus. Deinde facimus imaginem finalem, quae etiam metadata de origine sua continet. Et hanc imaginem subiungimus diversimode (singula post).

werf - instrumentum nostrum CI/CD in Kubernetes (respectiva et fama video)

Pone post hoc novum committum in quo tantum schedula codicis mutata est. Quæ in ea ventura? Codicis enim mutationes, moles creabitur et nova imago scaenae praeparetur. Subscriptio eius sicut checksum imaginis scaenae veteris et panni novi constituetur. Nova imago finalis ex hac imagine formabitur. Similia habitudines in aliis aetatibus occurrent mutationibus.

Ita imagines scaenicae sunt cella quae distributim condi potest, et imagines ex eo iam factae ad Subcriptio Docker imponuntur.

werf - instrumentum nostrum CI/CD in Kubernetes (respectiva et fama video)

Purgato subcriptio

Non loquimur de stratis deletis quae pendebant post deletas tags manentes - hoc signum est notae ipsius Docker Registry. Loquimur de condicione cum multa de Docker tags cumulant et intellegimus nos non amplius aliquos egere, sed spatium sumentes (vel pro ea solvimus).

Quae sunt consilia purgatio?

  1. Vos can iustus facere nihil non emundare. Interdum re vera facilior est paulum extra spatium solvere quam ingens textorum chaos evolvite. Sed hoc solum operatur usque ad aliquid.
  2. Plena reset. Si omnes imagines delere et solas hodiernas in systemate CI reficere, quaestio oriri potest. Si continens in productione restarted, nova imago ei oneratur - quae nondum a quoquam probata est. Haec idea infrastructuris immutabilis necat.
  3. Caeruleo, viridi,. Unum subcriptio superfluum esse coepit - imagines imposuisti alteri. Eadem quaestio ac in priori methodo: qua ex parte potes purgare subcriptio quod redundare incoepit?
  4. per tempus. Omnes imagines delere maior quam I mensis? Sed certum erit servitium quod per mensem non renovatum est.
  5. manually quid iam deleri potest.

Duae optiones vere viabiles sunt: ​​non munda vel compositum ex caeruleo-viride + manually. In hoc casu de his loquimur: cum tempus intelligas subcriptio purgare, unam novam creas, et omnes novas imagines ei per ordinem addis, verbi gratia, mensem. Et post mensem, vide quae siliquae in Kubernetes adhuc veteri registro utuntur, eas quoque ad novum registro transferunt.

Quid venimus ad? werf *? Colligimus:

  1. Git caput: omnes tags, omnes rami - si opus est omnia quae in imaginibus Tagged in Git (et si minus, in ipsa Git delere necesse est);
  2. siliquae omnes, quae nunc Kubernetes exantlatae sunt;
  3. vetera ReplicaSets (quod nuper emissum erat), et nos quoque disponimus ut Helm emicandum solvo et imagines illic novissimas lego.

... et ex hoc statuto album fac - indicem imaginum quae non delebimus. Cetera omnia emundamus, post quae imagines scenae pupilli invenimus et eas quoque delemus.

Deploy scaena

Certa declarativa

Primum punctum, quod in instruere volumus animum advertere est volutatio configurationis renovatae, declarative declaravit. Originale YAML documentum, facultates Kubernetes describens, semper multum differt ab eventu actu in botro currente. Quia Kubernetes ad configurationem addit:

  1. identifiers;
  2. indicium muneris;
  3. plures defectus valorum;
  4. sectionem current status;
  5. mutationes factae pro parte admissionis webhook;
  6. eventum operis moderatoris varii (et schedulae).

Itaque, cum nova schematismi figuratio apparet (new), non possumus solum hodiernam conformationem "vivere" capere et rescribere cum ea (vivere). Ad hoc habebimus comparare new de configuratione ultima applicatae (postremo-applicari) Et volvunt vivere accepit panni.

Aditus dicitur 2-modo merge. Ponitur vg, apud Helm.

Ibi quoque est 3-modo mergequi differt in eo;

  • comparet postremo-applicari и newintuemur quid deletum sit;
  • comparet new и viverequae addita vel mutata intuemur;
  • summa commissuram applicantur ad vivere.

1000 applicationes cum Helm explicamus, ut actu cum 2-modo merge vivimus. Plures tamen difficultates habet quas cum nostris inaequaliter solvimus, quae Helm ad operandum normaliter adiuvant.

Verus rollout status

Postquam systema CI nostrum novam configurationem pro Kubernetibus in proximo eventu fundatam generat, eam ad usum transmittit (applicare) ut botrum portassent - per galeam seu kubectl apply. Deinde iam descriptus N-modo merge occurrit, cui Kubernetes API congruenti rationi CI, et eius usori respondet.

werf - instrumentum nostrum CI/CD in Kubernetes (respectiva et fama video)

Sed quaestio ingens est: post omnes felix application non intelliguntur felix rollout. Si Kubernetes intellexit quantas mutationes applicandae ac applicandae sint, tamen quid eventurum sit ignoramus. Exempli gratia, siliquae adaequationis et siliquae in frontend prosperae possunt, non autem in backend, et varias versiones imaginum applicationis currentium dabimus.

Ad omnia recte facienda, haec schema additicium nexum requirit - investigatorem specialem qui status informationes ex Kubernetibus API recipiet et eam ad ulteriorem analysim realem rerum statum transmittat. Fontem apertum bibliothecae in Go - nos creavimus cubedog (Videatur denuntiatio hic)qui solvit hanc quaestionem et aedificatur in werf.

Mores huius semitarii in gradu werfo configuratur per annotationes quae in instruere vel StatefulSets posita sunt. Praecipua annotationis - fail-mode — intelli- gentia sequentia ;

  • IgnoreAndContinueDeployProcess — Negligimus problemata evolutionis huius componentis et instruere continuare;
  • FailWholeDeployProcessImmediately — error in hac parte impedit processum instruere;
  • HopeUntilEndOfDeployProcess — speramus fore ut haec pars in fine instituti operabitur.

Exempli gratia, haec coniunctio opum et valorum annotationis fail-mode:

werf - instrumentum nostrum CI/CD in Kubernetes (respectiva et fama video)

Cum primum explicabimus, datorum (MongoDB) nondum paratos esse potest - incepta deficient. Sed exspectāre potes iūllum ut committitur, et institutio adhuc fiet.

Duae plures annotationes sunt pro kubedog in werf;

  • failures-allowed-per-replica — numerus permissus cadit in unamquamque effigiem;
  • show-logs-until — tempus regit usque ad quod werfum ostendit ligna ab omni siliqua evoluta. Congue est PodIsReady (necessarias ignorare quas verisimile non vis cum commercium ad legumen venire incipit), sed valores etiam validi sunt; ControllerIsReady и EndOfDeploy.

Quid aliud instruere volumus?

Praeter duo puncta iam descripta velimus;

  • videre acta — et tantum necessaria, et non omnia ordine;
  • track progressusquia, si per plures minutas tacite dependet officium, interest scire quid ibi agatur;
  • иметь automatic reverti in casu aliquid erravit (et ideo criticum est cognoscere realem statum instruere). Volubilis atomicus esse debet: aut percurrit ad finem, aut omnia in priorem statum suum redeunt.

results

Nobis, ut societas, ad omnes descriptos nuances deducendi in diversis gradibus traditionis (aedificare, praedicare, deploy), a CI ratio et utilitas satis sunt. werf *.

Pro conclusione:

werf - instrumentum nostrum CI/CD in Kubernetes (respectiva et fama video)

Auxilio werf, in solvendo numeros fabros DevOps problemata bene profecisse et laetabimur si saltem communitas ampliorem hanc agendi utilitatem attentaverit. Facilius erit unum bonum consequi effectum.

Videos et labitur

Vide a perficiendi (~ 47 minuta);

Exhibitio relationis;

PS

Aliae relationes de Kubernetes in nostro diario:

Source: www.habr.com

Add a comment