Helm ierīce un tās nepilnības

Helm ierīce un tās nepilnības
Typhon kravas pārvadātāja koncepcija, Antons Swanepoel

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.

Å is ir kopsavilkums, kas balstÄ«ts uz runu konferencē @Kubernetes konference by Mail.ru mākoņa risinājumi ā€” ja nevēlies lasÄ«t, noskaties video.

Kāpēc mēs izmantojam Kubernetes ražoÅ”anā

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.

Helm ierīce un tās nepilnības
Ādams RÄ«ss, Helm galvenais uzturētājs, iepazÄ«stināja ar jēdzienu "AttÄ«stÄ«bas cikls Kubernetes", kas izskatās Ŕādi:

  1. Kopēt YAML ā€” kopēt YAML failu.
  2. IelÄ«mēt YAML ā€” ielÄ«mējiet to.
  3. Fix Indents ā€” labojiet atkāpes.
  4. 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.

Helm ierīce un tās nepilnības

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.

Helm ierīce un tās nepilnības
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 ierīce un tās nepilnības
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ā€.

helm install --name bestapp --values values.yaml lmru/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.

helm upgrade --install bestapp --values values.yaml lmru/bestchart

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.

1. metode. Nemainiet informāciju kopÅ” pēdējās palaiÅ”anas

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

Helm ierīce un tās nepilnības
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.

4. metode. Mainiet etiķetes tieŔi programmā Kubernetes

Helm ierīce un tās nepilnības
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.

Helm ierīce un tās nepilnības
Ir arī detalizēta informācija par nosūtītajām veidnēm un vērtībām. Mēs to varam pieprasīt:

Helm ierīce un tās nepilnības
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ā€:

Helm ierīce un tās nepilnības
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.

Helm ierīce un tās nepilnības

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.

Helm ierīce un tās nepilnības
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.

Helm ierīce un tās nepilnības
Å Ä« 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:

  1. 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.
  2. 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.
  3. 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.

Citas saistītās saites:

  1. Iepazans ar Stūre 3
  2. Helm oficiālā vietne
  3. Helm repozitorijs vietnē GitHub
  4. 25 Noderīgi Kubernetes rīki: izvietoŔana un pārvaldība

Šis ziņojums pirmo reizi tika prezentēts plkst @Kubernetes konference Mail.ru Cloud Solutions. Skaties Video citas izrādes un abonējiet notikumu paziņojumus Telegram Ap Kubernetes Mail.ru grupā.

Avots: www.habr.com

Pievieno komentāru