Padayon nga Mga Pagpraktis sa Paghatud sa Docker (pagsusi ug video)

Magsugod kami sa among blog sa mga publikasyon base sa pinakabag-o nga mga pakigpulong sa among teknikal nga direktor distol (Dmitry Stolyarov). Ang tanan niini nahitabo sa 2016 sa lainlaing propesyonal nga mga panghitabo ug gipahinungod sa hilisgutan sa DevOps ug Docker. Usa ka video gikan sa Docker Moscow meeting sa Badoo office, naa na mi gipatik Online. Ang mga bag-o pagaubanan sa mga artikulo nga nagpahayag sa diwa sa mga taho. Kaya nga…

Mayo 31 sa komperensya RootConf 2016, nga gipahigayon isip kabahin sa festival nga "Russian Internet Technologies" (RIT ++ 2016), ang seksyon nga "Continuous Deployment and Deployment" giablihan sa report nga "Best Practices of Continuous Delivery with Docker". Gi-summarize ug gi-systematize niini ang labing kaayo nga mga gawi alang sa paghimo sa usa ka proseso sa Padayon nga Paghatud (CD) gamit ang Docker ug uban pang mga produkto sa Open Source. Nagtrabaho kami uban niini nga mga solusyon sa produksyon, nga nagtugot kanamo sa pagsalig sa praktikal nga kasinatian.

Padayon nga Mga Pagpraktis sa Paghatud sa Docker (pagsusi ug video)

Kung naa kay higayon nga mugahin ug usa ka oras video sa report, among girekomendar nga tan-awon kini sa bug-os. Kung dili, sa ubos mao ang panguna nga summary sa porma sa teksto.

Padayon nga Paghatud sa Docker

Ubos Padayon nga Paghatud nasabtan nato ang kadena sa mga panghitabo isip resulta diin ang aplikasyon code gikan sa Git repository una nga moabut sa produksyon, ug dayon matapos sa archive. Murag mao ni: Git β†’ Pagtukod β†’ Pagsulay β†’ Pagpagawas β†’ Pag-opera.

Padayon nga Mga Pagpraktis sa Paghatud sa Docker (pagsusi ug video)
Kadaghanan sa mga taho gigahin sa yugto sa pagtukod (application assembly), ug ang mga hilisgutan nga gipagawas ug naglihok natandog sa makadiyot. Maghisgot kami bahin sa mga problema ug mga sumbanan nga nagtugot kanimo sa pagsulbad niini, ug ang piho nga pagpatuman niini nga mga sumbanan mahimong lahi.

Ngano nga gikinahanglan dinhi ang Docker? Dili alang sa bisan unsa nga nakahukom kami nga maghisgot bahin sa Padayon nga Paghatud nga mga gawi sa konteksto sa kini nga tool sa Open Source. Bisan kung ang tibuuk nga taho gipahinungod sa paggamit niini, daghang mga hinungdan ang gipadayag kung gikonsiderar ang panguna nga sumbanan sa paglansad sa code sa aplikasyon.

Panguna nga rollout pattern

Mao nga, kung magpagawas kami mga bag-ong bersyon sa aplikasyon, siguradong nag-atubang kami problema sa downtime, namugna atol sa pagbalhin sa production server. Ang trapiko gikan sa daan nga bersyon sa aplikasyon ngadto sa bag-o dili makabalhin dayon: una kinahanglan naton sigurohon nga ang bag-ong bersyon dili lamang malampuson nga na-download, apan usab "nagpainit" (ie, hingpit nga andam sa pag-alagad sa mga hangyo).

Padayon nga Mga Pagpraktis sa Paghatud sa Docker (pagsusi ug video)
Busa, sa pipila ka mga panahon ang duha nga mga bersyon sa aplikasyon (daan ug bag-o) molihok nga dungan. Nga awtomatikong motultol sa gipaambit nga panagbangi sa kapanguhaan: network, file system, IPC, ug uban pa. Uban sa Docker, kini nga problema dali nga masulbad pinaagi sa pagpadagan sa lainlaing mga bersyon sa aplikasyon sa lainlaing mga sudlanan, diin ang pagkahimulag sa kapanguhaan gigarantiyahan sa sulod sa parehas nga host (server / virtual machine). Siyempre, mahimo nimong maagian ang pipila ka mga limbong nga wala’y pagbulag, apan kung adunay usa ka andam ug dali nga himan, nan adunay kaatbang nga hinungdan - dili kini pasagdan.

Naghatag ang Containerization og daghang uban pang mga benepisyo kung i-deploy. Ang bisan unsang aplikasyon nagdepende sa piho nga bersyon (o sakup sa bersyon) tighubad, pagkaanaa sa mga module/extension, ug uban pa, ingon man sa ilang mga bersyon. Ug kini magamit dili lamang sa diha-diha nga executable palibot, apan usab sa tibuok palibot, lakip na sistema nga software ug ang bersyon niini (hangtod sa gigamit nga distribusyon sa Linux). Tungod sa kamatuoran nga ang mga sudlanan naglangkob dili lamang sa code sa aplikasyon, apan usab sa pre-install nga sistema ug software sa aplikasyon sa gikinahanglan nga mga bersyon, mahimo nimong kalimtan ang mga problema sa mga dependency.

Atong i-summarize pangunang rollout pattern bag-ong mga bersyon nga gikonsiderar ang mosunod nga mga hinungdan:

  1. Sa sinugdan, ang daan nga bersyon sa aplikasyon nagdagan sa unang sudlanan.
  2. Ang bag-ong bersyon gilukot ug "gipainit" sa ikaduhang sudlanan. Mamatikdan nga kining bag-ong bersyon mismo mahimong magdala dili lamang sa na-update nga code sa aplikasyon, apan bisan sa bisan unsang mga dependency niini, ingon man mga sangkap sa sistema (pananglitan, usa ka bag-ong bersyon sa OpenSSL o ang tibuuk nga pag-apod-apod).
  3. Kung ang bag-ong bersyon andam na sa pag-alagad sa mga hangyo, ang trapiko mobalhin gikan sa unang sudlanan ngadto sa ikaduha.
  4. Ang daan nga bersyon mahimo nang hunongon.

Kini nga pamaagi sa pagdeploy sa lain-laing mga bersyon sa aplikasyon sa lain-laing mga sudlanan naghatag og laing kasayon ​​- dali nga rollback sa daan nga bersyon (human sa tanan, igo na nga ibalhin ang trapiko sa gusto nga sudlanan).

Padayon nga Mga Pagpraktis sa Paghatud sa Docker (pagsusi ug video)
Ang katapusang una nga rekomendasyon ingon usa ka butang nga bisan ang Kapitan dili makit-an nga sayup: "[sa pag-organisar sa Padayon nga Paghatud sa Docker] Gamita ang Docker [ug sabta kung unsa ang gihatag niini]" Hinumdomi, dili kini usa ka pilak nga bala nga makasulbad sa matag problema, apan usa ka himan nga naghatag usa ka matahum nga pundasyon.

Reproducibility

Sa "reproducibility" nagpasabut kami sa usa ka kinatibuk-an nga hugpong sa mga problema nga nasugatan kung nag-operate sa mga aplikasyon. Naghisgot kami bahin sa ingon nga mga kaso:

  • Ang mga script nga gisusi sa kalidad nga departamento alang sa dula kinahanglan nga tukma nga kopyahon sa produksiyon.
  • Ang mga aplikasyon gipatik sa mga server nga makadawat og mga pakete gikan sa lainlaing mga salamin sa repository (sa paglabay sa panahon kini gi-update, ug uban kanila ang mga bersyon sa na-install nga mga aplikasyon).
  • "Ang tanan nagtrabaho alang kanako sa lokal!" (...ug ang mga developers dili tugutan sa produksyon.)
  • Kinahanglan nimong susihon ang usa ka butang sa daan (naka-archive) nga bersyon.
  • ...

Ang ilang kinatibuk-ang esensya nagsukad sa kamatuoran nga ang hingpit nga pagsunod sa mga palibot nga gigamit (ingon man ang pagkawala sa hinungdan sa tawo) gikinahanglan. Sa unsa nga paagi kita makagarantiya sa reproducibility? Paghimo mga imahe sa Docker base sa code gikan sa Git, ug dayon gamiton kini alang sa bisan unsang buluhaton: sa mga site sa pagsulay, sa produksyon, sa mga lokal nga makina sa mga programmer... Sa samang higayon, importante nga mamenosan ang mga aksyon nga gihimo human sa pag-assemble sa imahe: mas simple kini, mas gamay ang posibilidad nga adunay mga sayup.

Ang imprastraktura kay code

Kung ang mga kinahanglanon sa imprastraktura (pagkaanaa sa software sa server, bersyon niini, ug uban pa) dili pormal ug "giprograma," nan ang paglansad sa bisan unsang pag-update sa aplikasyon mahimong moresulta sa makadaot nga mga sangputanan. Sama pananglit, sa pag-staging nakabalhin ka na sa PHP 7.0 ug gisulat pag-usab ang code sumala niana - unya ang hitsura niini sa produksiyon nga adunay pipila ka karaan nga PHP (5.5) siguradong makapakurat sa usa ka tawo. Mahimong dili nimo makalimtan ang bahin sa usa ka dako nga pagbag-o sa bersyon sa tighubad, apan "ang yawa anaa sa mga detalye": ang katingala mahimong sa usa ka gamay nga pag-update sa bisan unsang dependency.

Usa ka pamaagi sa pagsulbad niini nga problema nailhan nga IaC (Infrastructure as Code, "infrastructure as code") ug naglakip sa pagtipig sa mga kinahanglanon sa imprastraktura uban sa code sa aplikasyon. Gigamit kini, ang mga developer ug mga espesyalista sa DevOps mahimong magtrabaho sa parehas nga Git application repository, apan sa lainlaing bahin niini. Gikan sa kini nga code, usa ka imahe sa Docker ang gihimo sa Git, diin ang aplikasyon gi-deploy nga gikonsiderar ang tanan nga mga detalye sa imprastraktura. Sa yano nga pagkasulti, ang mga script (mga lagda) alang sa pag-assemble sa mga imahe kinahanglan nga naa sa parehas nga repository sa source code ug gihiusa.

Padayon nga Mga Pagpraktis sa Paghatud sa Docker (pagsusi ug video)

Sa kaso sa usa ka multi-layer nga arkitektura sa aplikasyon - pananglitan, adunay nginx, nga nagbarug sa atubangan sa usa ka aplikasyon nga nagdagan na sa sulod sa usa ka sudlanan sa Docker - Ang mga imahe sa Docker kinahanglan himuon gikan sa code sa Git alang sa matag layer. Unya ang una nga imahe maglangkob sa usa ka aplikasyon nga adunay usa ka tighubad ug uban pang mga "suod" nga mga dependency, ug ang ikaduha nga imahe adunay sulud nga upstream nginx.

Mga imahe sa Docker, komunikasyon sa Git

Gibahin namon ang tanan nga mga imahe sa Docker nga nakolekta gikan sa Git sa duha nga mga kategorya: temporaryo ug pagpagawas. Temporaryo nga mga hulagway Gi-tag pinaagi sa ngalan sa sanga sa Git, mahimong ma-overwrite sa sunod nga commit ug i-roll out para lang sa preview (dili para sa produksiyon). Kini ang ilang hinungdanon nga kalainan gikan sa mga gipagawas: wala ka mahibal-an kung unsang piho nga pasalig ang naa kanila.

Makatarunganon ang pagkolekta sa temporaryo nga mga imahe: ang master branch (mahimo nimo nga awtomatiko nga i-roll kini sa usa ka bulag nga site aron kanunay nga makita ang karon nga bersyon sa master), mga sanga nga adunay mga pagpagawas, mga sanga sa piho nga mga inobasyon.

Padayon nga Mga Pagpraktis sa Paghatud sa Docker (pagsusi ug video)
Pagkahuman sa preview sa temporaryo nga mga imahe moabut sa panginahanglan alang sa paghubad sa produksiyon, ang mga developer nagbutang usa ka piho nga tag. Awtomatikong gikolekta pinaagi sa tag buhian ang hulagway (ang tag niini katumbas sa tag gikan sa Git) ug gilukot ngadto sa dula. Kung kini malampuson nga gipamatud-an sa kalidad nga departamento, kini moadto sa produksiyon.

dapp

Ang tanan nga gihulagway (rollout, image assembly, sunod nga pagmentinar) mahimong ipatuman nga independente gamit ang Bash scripts ug uban pang "improvised" nga mga himan. Apan kung buhaton nimo kini, unya sa usa ka punto ang pagpatuman magdala sa daghang pagkakomplikado ug dili maayo nga pagkontrol. Sa pagsabut niini, mianhi kami sa paghimo sa among kaugalingong espesyal nga Workflow utility alang sa pagtukod sa CI/CD - dapp.

Ang source code niini gisulat sa Ruby, open source ug gimantala sa GitHub. Ikasubo, ang dokumentasyon sa pagkakaron mao ang pinakahuyang nga punto sa himan, apan kami nagtrabaho niini. Ug kami magsulat ug maghisgot bahin sa dapp labaw sa kausa, tungod kay... Kami sinsero nga dili makahulat nga ipaambit ang mga kapabilidad niini sa tibuuk nga interesado nga komunidad, apan sa kasamtangan, ipadala ang imong mga isyu ug pagbitad sa mga hangyo ug / o sunda ang pag-uswag sa proyekto sa GitHub.

Gi-update Agosto 13, 2019: karon usa ka proyekto dapp giusab ang ngalan sa werf, ang kodigo niini bug-os nga gisulat pag-usab sa Go, ug ang dokumentasyon niini napauswag pag-ayo.

Kubernetes

Ang laing andam nga gihimo nga Open Source nga himan nga nakadawat na og mahinungdanong pag-ila sa propesyonal nga palibot mao ang Kubernetes,usa ka cluster sa pagdumala sa Docker. Ang hilisgutan sa paggamit niini sa operasyon sa mga proyekto nga gitukod sa Docker lapas sa kasangkaran sa taho, mao nga ang presentasyon limitado sa usa ka kinatibuk-ang pagtan-aw sa pipila ka makapaikag nga mga bahin.

Para sa rollout, ang Kubernetes nagtanyag:

  • Readiness probe β€” pagsusi sa kaandam sa bag-ong bersyon sa aplikasyon (aron ibalhin ang trapiko niini);
  • rolling update - sunod-sunod nga pag-update sa imahe sa usa ka pungpong sa mga sudlanan (pagsira, pag-update, pagpangandam alang sa paglansad, pagbalhin sa trapiko);
  • dungan nga pag-update - pag-update sa usa ka imahe sa usa ka cluster nga adunay lahi nga pamaagi: una sa katunga sa mga sudlanan, dayon sa uban;
  • canary releases - paglunsad og bag-ong hulagway sa limitado (gamay) nga gidaghanon sa mga sudlanan aron mamonitor ang mga anomaliya.

Tungod kay ang Padayon nga Paghatud dili lamang ang pagpagawas sa usa ka bag-ong bersyon, ang Kubernetes adunay daghang mga kapabilidad alang sa sunod nga pagmentinar sa imprastraktura: built-in nga pag-monitor ug pag-log alang sa tanan nga mga sudlanan, awtomatik nga pag-scaling, ug uban pa. Tanan kini nagtrabaho na ug naghulat lang sa husto pagpatuman sa imong mga proseso.

Katapusan nga mga rekomendasyon

  1. Gamita ang Docker.
  2. Paghimo mga imahe sa Docker sa mga aplikasyon alang sa tanan nimong mga panginahanglan.
  3. Sunda ang prinsipyo nga β€œInfrastructure is code.”
  4. I-link ang Git sa Docker.
  5. I-regulate ang han-ay sa paglusad.
  6. Paggamit ug andam nga plataporma (Kubernetes o uban pa).

Mga video ug mga slide

Video gikan sa pasundayag (mga usa ka oras) gimantala sa YouTube (ang report mismo magsugod gikan sa ika-5 nga minuto - sunda ang link aron magdula gikan niining higayona).

Presentasyon sa report:

PS

Ang ubang mga taho bahin sa hilisgutan sa among blog:

Source: www.habr.com

Idugang sa usa ka comment