Mani sauc Dmitrijs Sugrobovs, es esmu Leroy Merlin izstrÄdÄtÄjs. Å ajÄ rakstÄ es jums pastÄstÄ«Å”u, kÄpÄc Helm ir nepiecieÅ”ams, kÄ tas vienkÄrÅ”o darbu ar Kubernetes, kas ir mainÄ«jies treÅ”ajÄ versijÄ un kÄ to izmantot, lai atjauninÄtu lietojumprogrammas ražoÅ”anÄ bez dÄ«kstÄves.
Leroy Merlin ir lÄ«deris DIY mazumtirdzniecÄ«bas tirgÅ« KrievijÄ un EiropÄ. MÅ«su uzÅÄmumÄ ir vairÄk nekÄ simts izstrÄdÄtÄju, 33 000 iekÅ”Äjo darbinieku un milzÄ«gs cilvÄku skaits, kas apmeklÄ hipermÄrketus un vietni. Lai viÅi visi bÅ«tu laimÄ«gi, mÄs nolÄmÄm ievÄrot nozares standarta pieejas. IzstrÄdÄt jaunas lietojumprogrammas, izmantojot mikropakalpojumu arhitektÅ«ru; izmantot konteinerus, lai izolÄtu vidi un nodroÅ”inÄtu pareizu piegÄdi; un orÄ·estrÄÅ”anai izmantojiet Kubernetes. OrÄ·estru izmantoÅ”anas cena strauji kļūst lÄtÄka: tirgÅ« pieaug tehnoloÄ£ijÄs pieredzÄjuÅ”u inženieru skaits, un parÄdÄs pakalpojumu sniedzÄji, kas piedÄvÄ Kubernetes kÄ pakalpojumu.
Visu, ko dara Kubernetes, protams, var darÄ«t arÄ« citÄdi, piemÄram, piesedzot kaut kÄdus Dženkinus un docker-compose ar skriptiem, bet kÄpÄc sarežģīt dzÄ«vi, ja ir gatavs un uzticams risinÄjums? TÄpÄc nonÄcÄm pie Kubernetes un jau gadu to izmantojam ražoÅ”anÄ. Å obrÄ«d mums ir divdesmit Äetri Kubernetes klasteri, no kuriem vecÄkais ir vairÄk nekÄ gadu vecs, ar apmÄram divsimt pÄkstÄ«m.
Lielo YAML failu lÄsts pakalpojumÄ Kubernetes
Lai palaistu mikropakalpojumu Kubernetes, mÄs izveidosim vismaz piecus YAML failus: Deployment, Service, Ingress, ConfigMap, Secrets un nosÅ«tÄ«sim tos klasterim. NÄkamajai aplikÄcijai rakstÄ«sim to paÅ”u jambu paku, ar treÅ”o rakstÄ«sim vÄl vienu utt. Ja mÄs reizinÄm dokumentu skaitu ar vidi, mÄs jau iegÅ«sim simtiem failu, un tas vÄl neÅem vÄrÄ dinamiskÄs vides.
Ädams RÄ«ss, Helm galvenais uzturÄtÄjs, iepazÄ«stinÄja ar jÄdzienu "AttÄ«stÄ«bas cikls Kubernetes", kas izskatÄs Å”Ädi:
KopÄt YAML ā kopÄt YAML failu.
IelÄ«mÄt YAML ā ielÄ«mÄjiet to.
Fix Indents ā labojiet atkÄpes.
AtkÄrtot - atkÄrtojiet vÄlreiz.
Opcija darbojas, taÄu jums ir vairÄkas reizes jÄkopÄ YAML faili. Lai mainÄ«tu Å”o ciklu, tika izgudrots Helms.
Kas ir Helms
PirmkÄrt, Helma - pakotÅu pÄrvaldnieks, kas palÄ«dz atrast un instalÄt vajadzÄ«gÄs programmas. Lai instalÄtu, piemÄram, MongoDB, jums nav jÄdodas uz oficiÄlo vietni un jÄlejupielÄdÄ binÄrie faili, vienkÄrÅ”i palaidiet komandu helm install stable/mongodb.
OtrkÄrt, Helma - veidÅu dzinÄjs, palÄ«dz parametrizÄt failus. AtgriezÄ«simies pie situÄcijas ar YAML failiem Kubernetes. VienkÄrÅ”Äk ir uzrakstÄ«t to paÅ”u YAML failu, pievienot tam dažus vietturus, kuros Helm aizstÄs vÄrtÄ«bas. Tas ir, liela sastatÅu komplekta vietÄ bÅ«s veidÅu komplekts, kurÄ vajadzÄ«gÄs vÄrtÄ«bas tiks aizstÄtas Ä«stajÄ laikÄ.
TreÅ”kÄrt, Helma - izvietoÅ”anas meistars. Ar to jÅ«s varat instalÄt, atsaukt un atjauninÄt lietojumprogrammas. IzdomÄsim, kÄ to izdarÄ«t.
KÄ izmantot Helm, lai izvietotu savas lietojumprogrammas
InstalÄsim Helm klientu jÅ«su datorÄ, ievÄrojot amatpersonas norÄdÄ«jumus instrukcijas. TÄlÄk mÄs izveidosim YAML failu kopu. TÄ vietÄ, lai norÄdÄ«tu konkrÄtas vÄrtÄ«bas, mÄs atstÄsim vietturus, kurus Helms turpmÄk aizpildÄ«s ar informÄciju. Å Ädu failu kopu sauc par Helm diagrammu. To var nosÅ«tÄ«t uz Helm konsoles klientu trÄ«s veidos:
norÄdiet mapi ar veidnÄm;
iesaiÅojiet arhÄ«vu .tar failÄ un norÄdiet uz to;
ievietojiet veidni attÄlÄ repozitorijÄ un pievienojiet saiti uz repozitoriju Helm klientÄ.
Jums ir nepiecieÅ”ams arÄ« fails ar vÄrtÄ«bÄm - value.yaml. Dati no turienes tiks ievietoti veidnÄ. Izveidosim arÄ« to.
OtrajÄ Helm versijÄ ir papildu servera lietojumprogramma - Tiller. Tas karÄjas Ärpus Kubernetes un gaida pieprasÄ«jumus no Helm klienta, un, kad tas tiek izsaukts, veidnÄ aizstÄj nepiecieÅ”amÄs vÄrtÄ«bas un nosÅ«ta to Kubernetes.
Helm 3 ir vienkÄrÅ”Äks: tÄ vietÄ, lai apstrÄdÄtu veidnes serverÄ«, informÄcija tagad tiek pilnÄ«bÄ apstrÄdÄta Helm klienta pusÄ un tiek nosÅ«tÄ«ta tieÅ”i uz Kubernetes API. Å Ä« vienkÄrÅ”oÅ”ana uzlabo klasteru droŔību un atvieglo izlaiÅ”anas shÄmu.
KÄ tas viss darbojas
Palaidiet komandu helm install. NorÄdÄ«sim lietojumprogrammas laidiena nosaukumu un norÄdÄ«sim ceļu uz value.yaml. BeigÄs norÄdÄ«sim repozitoriju, kurÄ atrodas diagramma, un diagrammas nosaukumu. PiemÄrÄ tie ir attiecÄ«gi ālmruā un ābestchartā.
Komandu var izpildÄ«t tikai vienu reizi, kad tÄ tiek izpildÄ«ta vÄlreiz install nepiecieÅ”ams lietot upgrade. VienkÄrŔības labad divu komandu vietÄ varat palaist komandu upgrade ar papildu atslÄgu --install. Pirmo reizi izpildot, Helm nosÅ«tÄ«s komandu, lai instalÄtu laidienu, un turpmÄk to atjauninÄs.
Kļūdas, izvietojot jaunas lietojumprogrammas versijas ar Helm
Å ajÄ stÄsta brÄ«dÄ« es spÄlÄju ar skatÄ«tÄjiem spÄli Who Wants to Be a Millionaire, un mÄs izdomÄjam, kÄ panÄkt, lai Helma atjauninÄtu lietotnes versiju. SkatÄ«ties video.
Kad es uzzinÄju, kÄ Helm darbojas, mani pÄrsteidza dÄ«vaina uzvedÄ«ba, mÄÄ£inot atjauninÄt darbojoÅ”os lietojumprogrammu versijas. Es atjauninÄju lietojumprogrammas kodu, augÅ”upielÄdÄju jaunu attÄlu Docker reÄ£istrÄ, nosÅ«tÄ«ju izvietoÅ”anas komandu - un nekas nenotika. TÄlÄk ir norÄdÄ«ti daži ne visai veiksmÄ«gi veidi, kÄ atjauninÄt lietojumprogrammas. SÄ«kÄk izpÄtot katru no tiem, jÅ«s sÄkat izprast instrumenta iekÅ”Äjo struktÅ«ru un Ŕīs neskaidrÄs uzvedÄ«bas iemeslus.
KÄ teikts oficiÄlÄ vietne Helms: "Kubernetes diagrammas var bÅ«t lielas un sarežģītas, tÄpÄc Helms cenÅ”as neko pÄrÄk neaiztikt." TÄpÄc, ja docker reÄ£istrÄ atjauninÄsit jaunÄko lietojumprogrammas attÄla versiju un palaidiet komandu helm upgrade, tad nekas nenotiks. Helms domÄs, ka nekas nav mainÄ«jies un nav jÄsÅ«ta komanda Kubernetes, lai atjauninÄtu aplikÄciju.
Å eit un tÄlÄk jaunÄkais tags ir parÄdÄ«ts tikai kÄ piemÄrs. Kad norÄdÄt Å”o tagu, Kubernetes katru reizi lejupielÄdÄs attÄlu no docker reÄ£istra neatkarÄ«gi no parametra imagePullPolicy. JaunÄko produktu izmantoÅ”ana ir nevÄlama un izraisa blakusparÄdÄ«bas.
2. metode. Atjauniniet LABEL attÄlÄ
KÄ rakstÄ«ts tajÄ paÅ”Ä dokumentÄcija, "Helm atjauninÄs lietojumprogrammu tikai tad, ja tÄ ir mainÄ«jusies kopÅ” pÄdÄjÄs izlaiÅ”anas." Å Ä·iet, ka loÄ£iska iespÄja ir atjauninÄt LABEL paÅ”Ä Docker attÄlÄ. TomÄr Helms nepÄta lietojumprogrammas attÄlus un viÅam nav ne jausmas par izmaiÅÄm tajos. AttiecÄ«gi, atjauninot etiÄ·etes attÄlÄ, Helm par tÄm nezinÄs, un lietojumprogrammas atjauninÄÅ”anas komanda netiks nosÅ«tÄ«ta uz Kubernetes.
3. metode: izmantojiet atslÄgu --force
PievÄrsÄ«simies rokasgrÄmatÄm un meklÄsim vajadzÄ«go atslÄgu. AtslÄgai ir vissaprÄtÄ«gÄkÄ nozÄ«me --force. Neskatoties uz acÄ«mredzamo nosaukumu, uzvedÄ«ba atŔķiras no gaidÄ«tÄ. TÄ vietÄ, lai piespiestu atjauninÄt lietojumprogrammu, tÄ patiesais mÄrÄ·is ir atjaunot laidienu, kura statuss ir FAILED. Ja neizmantojat Å”o taustiÅu, komandas jÄizpilda secÄ«gi helm delete && helm install --replace. TÄ vietÄ ieteicams izmantot atslÄgu --force, kas automatizÄ Å”o komandu secÄ«gu izpildi. VairÄk informÄcijas Å”ajÄ izvilkt pieprasÄ«jumu. Lai liktu Helmam atjauninÄt lietojumprogrammas versiju, diemžÄl Ŕī atslÄga nedarbosies.
IezÄ«mes atjauninÄÅ”ana tieÅ”i klasterÄ«, izmantojot komandu kubectl edit - slikta ideja. Å Ä« darbÄ«ba radÄ«s informÄcijas neatbilstÄ«bu starp darbojoÅ”os lietojumprogrammu un to, kas sÄkotnÄji tika nosÅ«tÄ«ta izvietoÅ”anai. Helm uzvedÄ«ba izvietoÅ”anas laikÄ Å”ajÄ gadÄ«jumÄ atŔķiras no tÄs versijas: Helm 2 neko nedarÄ«s, un Helm 3 izvietos jauno lietojumprogrammas versiju. Lai saprastu, kÄpÄc, jums ir jÄsaprot, kÄ Helm darbojas.
KÄ Helm darbojas?
Lai noteiktu, vai lietojumprogramma ir mainÄ«jusies kopÅ” tÄs pÄdÄjÄs izlaiÅ”anas, Helm var izmantot:
darbojas programma Kubernetes;
jaunas vÄrtÄ«bas.yaml un paÅ”reizÄjÄ diagramma;
Helmas iekÅ”ÄjÄs izlaiÅ”anas informÄcija.
ZinÄtkÄrÄ«gÄkiem: kur Helm glabÄ iekÅ”Äjo informÄciju par izlaidumiem?Izpildot komandu helm history, mÄs iegÅ«sim visu informÄciju par versijÄm, kas instalÄtas, izmantojot Helm.
Ir arÄ« detalizÄta informÄcija par nosÅ«tÄ«tajÄm veidnÄm un vÄrtÄ«bÄm. MÄs to varam pieprasÄ«t:
OtrajÄ Helm versijÄ Å”Ä« informÄcija atrodas tajÄ paÅ”Ä nosaukumvietÄ, kurÄ darbojas Tiller (pÄc noklusÄjuma kube sistÄma), konfigurÄcijas kartÄ, kas atzÄ«mÄta ar iezÄ«mi āOWNER=TILLERā:
Kad parÄdÄ«jÄs treÅ”Ä Helm versija, informÄcija tika pÄrvietota uz noslÄpumiem un to paÅ”u nosaukumvietu, kurÄ darbojÄs lietojumprogramma. Pateicoties tam, kļuva iespÄjams vienlaikus palaist vairÄkas lietojumprogrammas dažÄdÄs nosaukumvietÄs ar vienu un to paÅ”u laidiena nosaukumu. OtrajÄ versijÄ tas bija nopietnas galvassÄpes, kad nosaukumu telpas ir izolÄtas, bet var ietekmÄt viena otru.
Otrais Helm, mÄÄ£inot saprast, vai ir nepiecieÅ”ams atjauninÄjums, izmanto tikai divus informÄcijas avotus: to, kas tam tiek nodroÅ”inÄts, un iekÅ”Äjo informÄciju par izlaidumiem, kas atrodas ConfigMap.
TreÅ”ajÄ Helm tiek izmantota trÄ«svirzienu sapludinÄÅ”anas stratÄÄ£ija: papildus Å”ai informÄcijai tajÄ tiek Åemta vÄrÄ arÄ« lietojumprogramma, kas paÅ”laik darbojas Kubernetes.
Å Ä« iemesla dÄļ Helm vecÄ versija neko nedarÄ«s, jo tajÄ netiek Åemta vÄrÄ klastera lietojumprogrammas informÄcija, bet Helm 3 saÅems izmaiÅas un nosÅ«tÄ«s jauno lietojumprogrammu izvietoÅ”anai.
5. metode. Izmantojiet slÄdzi --recreate-pods
Ar atslÄgu --recreate-pods jÅ«s varat sasniegt to, ko sÄkotnÄji plÄnojÄt sasniegt ar atslÄgu --force. Konteineri tiks restartÄti, un saskaÅÄ ar imagePullPolicy: VienmÄr politiku attiecÄ«bÄ uz jaunÄko tagu (vairÄk par to iepriekÅ” minÄtajÄ zemsvÄ«tras piezÄ«mÄ), Kubernetes lejupielÄdÄs un palaidÄ«s jaunu attÄla versiju. Tas netiks izdarÄ«ts vislabÄkajÄ veidÄ: neÅemot vÄrÄ stratÄÄ£ijas izvietoÅ”anas veidu, tas pÄkÅ”Åi izslÄgs visas vecÄs lietojumprogrammu instances un sÄks palaist jaunas. RestartÄÅ”anas laikÄ sistÄma nedarbosies, cietÄ«s lietotÄji.
ArÄ« paÅ”Ä Kubernetes lÄ«dzÄ«ga problÄma pastÄvÄja ilgu laiku. Un tagad, 4 gadus pÄc atvÄrÅ”anas Izdot, problÄma ir novÄrsta, un, sÄkot ar Kubernetes versiju 1.15, parÄdÄs iespÄja atkÄrtoti palaist podziÅus.
Helm vienkÄrÅ”i izslÄdz visas lietojumprogrammas un palaiž jaunus konteinerus tuvumÄ. To nevar izdarÄ«t ražoÅ”anÄ, lai neradÄ«tu lietojumprogrammas dÄ«kstÄvi. Tas ir nepiecieÅ”ams tikai attÄ«stÄ«bas vajadzÄ«bÄm, un to var veikt tikai skatuves vidÄ.
KÄ atjauninÄt lietojumprogrammas versiju, izmantojot Helm?
MÄs mainÄ«sim Helm nosÅ«tÄ«tÄs vÄrtÄ«bas. Parasti tÄs ir vÄrtÄ«bas, kas tiek aizstÄtas attÄla taga vietÄ. JaunÄkajÄ gadÄ«jumÄ, ko bieži izmanto neproduktÄ«vÄm vidÄm, mainÄmÄ informÄcija ir anotÄcija, kas paÅ”ai Kubernetes ir bezjÄdzÄ«ga, un Helm tÄ darbosies kÄ signÄls par nepiecieÅ”amÄ«bu atjauninÄt aplikÄciju. AnotÄcijas vÄrtÄ«bas aizpildÄ«Å”anas iespÄjas:
Izlases vÄrtÄ«ba izmantojot standarta funkciju - {{ randAlphaNum 6 }}.
Ir brÄ«dinÄjums: pÄc katras izvietoÅ”anas, izmantojot diagrammu ar Å”Ädu mainÄ«go, anotÄcijas vÄrtÄ«ba bÅ«s unikÄla, un Helms pieÅems, ka ir izmaiÅas. IzrÄdÄs, ka aplikÄciju mÄs vienmÄr restartÄsim, pat ja neesam mainÄ«juÅ”i tÄs versiju. Tas nav kritiski, jo dÄ«kstÄves nebÅ«s, taÄu tas joprojÄm ir nepatÄ«kami.
IelÄ«mÄt strÄvu datums un laiks SÄkot no {{ .Release.Date }}.
Variants ir lÄ«dzÄ«gs nejauÅ”ai vÄrtÄ«bai ar pastÄvÄ«gi unikÄlu mainÄ«go.
PareizÄks veids ir izmantot kontrolsummas. Å is ir attÄla SHA vai pÄdÄjÄs git darbÄ«bas SHA ā {{ .Values.sha }}.
Tie bÅ«s jÄsaskaita un jÄnosÅ«ta Helm klientam zvanÄ«tÄjÄ pusÄ, piemÄram, DženkinsÄ. Ja pieteikums ir mainÄ«jies, mainÄ«sies arÄ« kontrolsumma. TÄdÄļ Helm atjauninÄs lietojumprogrammu tikai tad, kad tas bÅ«s nepiecieÅ”ams.
Apkoposim savus mÄÄ£inÄjumus
Helm veic izmaiÅas vismazÄk invazÄ«vÄ veidÄ, tÄpÄc jebkuras izmaiÅas lietojumprogrammas attÄla lÄ«menÄ« Docker reÄ£istrÄ neizraisÄ«s atjauninÄjumu: pÄc komandas izpildes nekas nenotiks.
TaustiÅÅ” --force izmanto, lai atjaunotu problemÄtiskus laidienus, un tas nav saistÄ«ts ar piespiedu atjauninÄjumiem.
TaustiÅÅ” --recreate-pods piespiedu kÄrtÄ atjauninÄs aplikÄcijas, taÄu darÄ«s to vandÄliski: pÄkÅ”Åi izslÄgs visus konteinerus. LietotÄji no tÄ cietÄ«s; jums nevajadzÄtu to darÄ«t ražoÅ”anÄ.
Veiciet izmaiÅas Kubernetes klasterÄ«, izmantojot komandu kubectl edit nedariet: mÄs pÄrtrauksim konsekvenci, un darbÄ«ba atŔķirsies atkarÄ«bÄ no Helm versijas.
LÄ«dz ar Helm jaunÄs versijas iznÄkÅ”anu ir parÄdÄ«juÅ”Äs daudzas nianses. Helm repozitorijÄ esoÅ”Äs problÄmas ir aprakstÄ«tas skaidrÄ valodÄ, tÄs palÄ«dzÄs izprast detaļas.
Pievienojot diagrammai rediÄ£Äjamu anotÄciju, tÄ kļūs elastÄ«gÄka. Tas ļaus jums pareizi izlaist lietojumprogrammu bez dÄ«kstÄves.
āPasaules mieraā doma, kas darbojas visÄs dzÄ«ves jomÄs: izlasiet instrukciju pirms lietoÅ”anas, nevis pÄc lietoÅ”anas. Tikai ar pilnÄ«gu informÄciju bÅ«s iespÄjams izveidot uzticamas sistÄmas un iepriecinÄt lietotÄjus.