Den Helm Apparat a seng Falen

Den Helm Apparat a seng Falen
Typhon Freight Hauler Concept, Anton Swanepoel

Mäin Numm ass Dmitry Sugrobov, ech sinn en Entwéckler bei Leroy Merlin. An dësem Artikel wäert ech Iech soen firwat Helm gebraucht gëtt, wéi et d'Aarbecht mat Kubernetes vereinfacht, wat an der drëtter Versioun geännert huet, a wéi Dir se benotzt fir Uwendungen an der Produktioun ouni Ënnerbriechung ze aktualiséieren.

Dëst ass e Resumé baséiert op enger Ried op enger Konferenz @Kubernetes Konferenz by Mail.ru Cloud Léisunge - Wann Dir net wëllt liesen, kuckt de Video.

Firwat benotze mir Kubernetes an der Produktioun

Leroy Merlin ass e Leader am DIY Retail Maart a Russland an Europa. Eis Firma huet méi wéi honnert Entwéckler, 33 intern Mataarbechter an eng grouss Zuel vu Leit déi Hypermarchéen an d'Websäit besichen. Fir se all glécklech ze maachen, hu mir beschloss Industriestandard Approche ze verfollegen. Entwéckelt nei Uwendungen mat Mikroservicearchitektur; Behälter benotzen fir Ëmfeld ze isoléieren an eng korrekt Liwwerung ze garantéieren; a benotzt Kubernetes fir Orchestratioun. De Präis fir Orchestratoren ze benotzen gëtt séier méi bëlleg: d'Zuel vun den Ingenieuren, déi an der Technologie kompetent sinn, wiisst um Maart, an d'Provider erschéngen Kubernetes als Service ze bidden.

Alles wat Kubernetes mécht, kann natierlech op aner Manéier gemaach ginn, zum Beispill andeems Dir e puer Jenkins ofdeckt an docker-compose mat Scripten, awer firwat d'Liewen komplizéiere wann et eng fäerdeg an zouverlässeg Léisung gëtt? Dofir si mir op Kubernetes komm an hunn et elo e Joer an der Produktioun benotzt. Mir hunn de Moment véieranzwanzeg Kubernetes Stärekéip, déi eelst vun deenen ass méi wéi ee Joer al, mat ongeféier zweehonnert pods.

De Fluch vu grousse YAML Dateien an Kubernetes

Fir e Mikroservice a Kubernetes ze lancéieren, kreéiere mir op d'mannst fënnef YAML Dateien: fir Deployment, Service, Ingress, ConfigMap, Secrets - a schécken se an de Cluster. Fir déi nächst Applikatioun wäerte mir deeselwechte Package vu Jambs schreiwen, mam drëtten schreiwen mir en aneren, a sou weider. Wa mir d'Zuel vun den Dokumenter mat der Unzuel vun den Ëmfeld multiplizéieren, kréie mer schonn Honnerte vu Fichieren, an dëst ass nach net berücksichtegt dynamesch Ëmfeld.

Den Helm Apparat a seng Falen
Den Adam Reese, Kernhalter vun Helm, huet d'Konzept vun "Entwécklungszyklus zu Kubernetes", wat esou ausgesäit:

  1. Kopie YAML - kopéiert eng YAML Datei.
  2. Paste YAML - Paste et.
  3. Fix Indents - Fix Indents.
  4. Widderhuelen - erëm widderhuelen.

D'Optioun funktionnéiert, awer Dir musst d'YAML Dateien vill Mol kopéieren. Fir dësen Zyklus z'änneren, gouf Helm erfonnt.

Wat ass Helm

Als éischt, Helm - Package Manager, wat Iech hëlleft déi Programmer ze fannen an z'installéieren déi Dir braucht. Fir zB MongoDB z'installéieren, musst Dir net op déi offiziell Websäit goen an Binären eroflueden, just de Kommando ausféieren helm install stable/mongodb.

Zweetens, Helm - Schabloun Motor, hëlleft fir Dateien ze parameteriséieren. Loosst eis zréck op d'Situatioun mat YAML Dateien a Kubernetes. Et ass méi einfach déiselwecht YAML Datei ze schreiwen, e puer Plazhalter derbäi ze addéieren, an déi Helm d'Wäerter ersetzt. Dat ass, anstatt e grousse Set vu Steieren, gëtt et e Set vu Templates, an deenen déi erfuerderlech Wäerter zur richteger Zäit ersat ginn.

Drëttens, Helm - Détachement Master. Mat et kënnt Dir Uwendungen installéieren, zréckrollen an aktualiséieren. Loosst eis erausfannen wéi dëst ze maachen.

Den Helm Apparat a seng Falen

Wéi benotzt Dir Helm fir Är eegen Uwendungen z'installéieren

Loosst eis den Helm Client op Ärem Computer installéieren, no der offizieller Instruktiounen. Als nächst wäerte mir eng Rei vu YAML Dateien erstellen. Amplaz spezifesch Wäerter ze spezifizéieren, wäerte mir Plazhalter verloossen, déi Helm an Zukunft mat Informatioun fëllt. E Set vun esou Dateien gëtt Helm Chart genannt. Et kann op dräi Weeër un den Helm Konsol Client geschéckt ginn:

  • uginn en Dossier mat Schablounen;
  • packt den Archiv an eng .tar a weist drop;
  • setzt d'Schabloun an engem Remote Repository a füügt e Link op de Repository am Helm Client.

Dir braucht och e Fichier mat Wäerter - values.yaml. D'Donnéeë vun do ginn an d'Schabloun agebaut. Loosst eis et och erstellen.

Den Helm Apparat a seng Falen
Déi zweet Versioun vum Helm huet eng zousätzlech Serverapplikatioun - Tiller. Et hänkt ausserhalb Kubernetes a waart op Ufroe vum Helm Client, a wann se opgeruff ginn, ersetzt déi erfuerderlech Wäerter an d'Schabloun a schéckt se un Kubernetes.

Den Helm Apparat a seng Falen
Helm 3 ass méi einfach: amplaz Templates um Server ze veraarbechten, gëtt d'Informatioun elo ganz op der Helm Client Säit veraarbecht an direkt un d'Kubernetes API geschéckt. Dës Vereinfachung verbessert Cluster Sécherheet a erliichtert de Rollout Schema.

Wéi funktionéiert dat alles

Run de Kommando helm install. Loosst eis den Numm vun der Applikatioun Verëffentlechung uginn a gitt de Wee op values.yaml. Um Enn wäerte mir de Repository uginn an deem d'Diagramm läit an den Numm vum Diagramm. Am Beispill sinn dës "lmru" an "bestchart", respektiv.

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

De Kommando kann nëmmen eemol ausgefouert ginn, wann et amplaz nach eng Kéier ausgefouert gëtt install brauchen ze benotzen upgrade. Fir Einfachheet, amplaz vun zwee Kommandoen, kënnt Dir de Kommando ausféieren upgrade mat zousätzleche Schlëssel --install. Wann et fir d'éischte Kéier ausgefouert gëtt, schéckt Helm e Kommando fir d'Verëffentlechung z'installéieren, a wäert se an Zukunft aktualiséieren.

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

Falen fir nei Versioune vun enger Applikatioun mat Helm z'installéieren

Zu dësem Zäitpunkt an der Geschicht spillen ech Who Wants to Be a Millionaire mam Publikum, a mir erausfannen, wéi mir den Helm kréien fir d'Versioun vun der App ze aktualiséieren. Kuckt de Video.

Wéi ech geléiert hunn wéi Helm funktionnéiert, war ech iwwerrascht iwwer komescht Verhalen wann ech probéiert Versioune vu lafenden Uwendungen ze aktualiséieren. Ech hunn den Applikatiounscode aktualiséiert, en neit Bild an d'Docker Registry eropgelueden, den Deployment Kommando geschéckt - an näischt ass geschitt. Drënner sinn e puer net ganz erfollegräich Weeër fir Uwendungen ze aktualiséieren. Wann Dir jiddereng vun hinnen méi detailléiert studéiert, fänkt Dir un d'intern Struktur vum Instrument an d'Grënn fir dëst net offensichtlech Verhalen ze verstoen.

Method 1. Verännert keng Informatioun zënter dem leschte Start

Wéi et seet offizieller Websäit Helm, "Kubernetes Charts kënne grouss a komplex sinn, sou datt den Helm probéiert näischt ze vill ze beréieren." Dofir, wann Dir déi lescht Versioun vum Applikatiounsbild am Docker-Registry aktualiséiert an de Kommando ausféiert helm upgrade, da geschitt näischt. Helm wäert denken datt näischt geännert huet an et ass net néideg fir e Kommando un Kubernetes ze schécken fir d'Applikatioun ze aktualiséieren.

Hei an ënnen gëtt de leschten Tag nëmmen als Beispill gewisen. Wann Dir dësen Tag spezifizéiert, luet Kubernetes d'Bild aus dem Docker Registry all Kéier erof, onofhängeg vum imagePullPolicy Parameter. D'Benotzung vun der leschter Produktioun ass ongewollt a verursaacht Nebenwirkungen.

Method 2. Update LABEL am Bild

Wéi an der selwechter geschriwwen Dokumentatioun, "Helm wäert nëmmen eng Applikatioun aktualiséieren wann se zënter der leschter Verëffentlechung geännert huet." Eng logesch Optioun fir dëst géif schéngen den LABEL am Docker-Bild selwer ze aktualiséieren. Wéi och ëmmer, Helm kuckt net an d'Applikatiounsbiller an huet keng Ahnung vun Ännerungen un hinnen. Deementspriechend, wann Dir Etiketten am Bild aktualiséieren, wäert den Helm net iwwer si wëssen, an d'Applikatioun Update Kommando gëtt net op Kubernetes geschéckt.

Method 3: Benotzt e Schlëssel --force

Den Helm Apparat a seng Falen
Loosst eis op d'Handbicher dréien a kucken no den erfuerderleche Schlëssel. De Schlëssel mécht am meeschte Sënn --force. Trotz dem offensichtlechen Numm ass d'Verhalen anescht wéi erwaart. Amplaz en Applikatiounsupdate ze forcéieren, ass säin eigentleche Zweck eng Verëffentlechung ze restauréieren déi am FAILED Status ass. Wann Dir dëse Schlëssel net benotzt, musst Dir d'Befehle sequenziell ausféieren helm delete && helm install --replace. Et gëtt proposéiert de Schlëssel amplaz ze benotzen --force, déi d'sequenziell Ausféierung vun dëse Kommandoen automatiséiert. Méi Informatiounen an dësem zéien Ufro. Fir dem Helm ze soen d'Applikatioun Versioun ze aktualiséieren, funktionnéiert leider dëse Schlëssel net.

Method 4. Änneren Etiketten direkt an Kubernetes

Den Helm Apparat a seng Falen
Aktualiséierung vum Label direkt am Cluster mam Kommando kubectl edit - schlecht Iddi. Dës Aktioun féiert zu Inkonsistenz vun der Informatioun tëscht der lafender Applikatioun an der déi ursprénglech fir Deployment geschéckt gouf. D'Behuele vum Helm wärend der Deployment an dësem Fall ënnerscheet sech vu senger Versioun: Helm 2 wäert näischt maachen, an Helm 3 wäert déi nei Versioun vun der Applikatioun ofsetzen. Fir ze verstoen firwat, musst Dir verstoen wéi Helm funktionnéiert.

Wéi funktionnéiert Helm?

Fir ze bestëmmen ob eng Applikatioun zënter senger leschter Verëffentlechung geännert huet, kann Helm benotzen:

  • Lafen Applikatioun an Kubernetes;
  • nei Wäerter.yaml an aktuell Grafik;
  • Helms intern Verëffentlechungsinformatioun.

Fir déi méi virwëtzeg: wou späichert Helm intern Informatioun iwwer Verëffentlechungen?Andeems Dir de Kommando ausféiert helm history, mir kréien all d'Informatiounen iwwer d'Versioune mat Helm installéiert.

Den Helm Apparat a seng Falen
Et gëtt och detailléiert Informatioun iwwer déi geschéckt Templates a Wäerter. Mir kënnen et ufroen:

Den Helm Apparat a seng Falen
An der zweeter Versioun vum Helm ass dës Informatioun am selwechte Nummraum wou Tiller leeft (kube-System par défaut), an der ConfigMap, markéiert mam Label "OWNER=TILLER":

Den Helm Apparat a seng Falen
Wann déi drëtt Versioun vum Helm erschéngt, ass d'Informatioun op Geheimnisser geplënnert, an an deeselwechten Nummraum wou d'Applikatioun leeft. Dank dësem gouf et méiglech verschidde Applikatiounen gläichzäiteg a verschiddene Nummraim mat dem selwechte Verëffentlechungsnumm ze lafen. An der zweeter Versioun war et e seriöse Kappwéi wann Nummraim isoléiert sinn, awer géigesäiteg beaflosse kënnen.

Den Helm Apparat a seng Falen

Den zweeten Helm, wann Dir probéiert ze verstoen ob en Update néideg ass, benotzt nëmmen zwou Informatiounsquellen: wat et elo gëtt, an intern Informatioun iwwer Verëffentlechungen, déi an der ConfigMap läit.

Den Helm Apparat a seng Falen
Den drëtten Helm benotzt eng Dräi-Wee Fusiounsstrategie: Zousätzlech zu dëser Informatioun berücksichtegt se och d'Applikatioun déi elo am Kubernetes leeft.

Den Helm Apparat a seng Falen
Aus dësem Grond wäert déi al Versioun vum Helm näischt maachen, well se d'Applikatiounsinformatioun am Cluster net berücksichtegt, awer den Helm 3 kritt d'Ännerungen an schéckt déi nei Applikatioun fir den Deployment.

Method 5. Benotzt den --recreate-pods Schalter

Mat engem Schlëssel --recreate-pods Dir kënnt erreechen wat Dir ursprénglech geplangt hutt mam Schlëssel z'erreechen --force. D'Container wäerten nei starten an, laut der imagePullPolicy: Ëmmer Politik fir dee leschten Tag (méi iwwer dëst an der Foussnot uewen), wäert Kubernetes eng nei Versioun vum Bild eroflueden an starten. Dëst gëtt net op déi bescht Manéier gemaach: ouni d'StrategyType vun der Deployment ze berücksichtegen, wäert et abrupt all al Applikatioun Instanzen ausschalten an nei starten. Wärend dem Restart funktionnéiert de System net, d'Benotzer leiden.

Zu Kubernetes selwer gouf et och scho laang en ähnleche Problem. An elo, 4 Joer no der Ouverture Resultat, de Problem gouf fixéiert, a mat der Versioun 1.15 vu Kubernetes unzefänken, erschéngt d'Kapazitéit fir Pods nei ze starten.

Helm schalt einfach all Uwendungen aus a lancéiert nei Container an der Géigend. Dir kënnt dëst net an der Produktioun maachen, fir net d'Uwendungszäit ze verursaachen. Dëst ass nëmme fir Entwécklungsbedürfnisser gebraucht a kann nëmmen a Bühnëmfeld gemaach ginn.

Wéi update d'Applikatioun Versioun mat Helm?

Mir änneren d'Wäerter un Helm geschéckt. Typesch sinn dëst Wäerter déi amplaz vum Bildtag ersat ginn. Am Fall vun der leschter, déi dacks fir onproduktiv Ëmfeld benotzt gëtt, ass déi verännerbar Informatioun eng Annotatioun, déi nëtzlos ass fir Kubernetes selwer, a fir Helm wäert et als Signal handelen fir d'Notzung fir d'Applikatioun ze aktualiséieren. Optiounen fir den Annotatiounswäert auszefëllen:

  1. Zoufälleg Wäert mat der Standardfunktioun - {{ randAlphaNum 6 }}.
    Et gëtt e Caveat: no all Deployment mat engem Diagramm mat sou enger Variabel, gëtt den Annotatiounswäert eenzegaarteg, an den Helm wäert unhuelen datt et Ännerungen gëtt. Et stellt sech eraus datt mir d'Applikatioun ëmmer nei starten, och wa mir hir Versioun net geännert hunn. Dëst ass net kritesch, well et keng Ausdauer gëtt, awer et ass nach ëmmer désagréabel.
  2. Paste aktuell Datum an Zäit - {{ .Release.Date }}.
    Eng Variant ass ähnlech wéi en zoufälleg Wäert mat enger permanent eenzegaarteger Variabel.
  3. Eng méi korrekt Manéier ass ze benotzen Kontrollsummen. Dëst ass d'SHA vum Bild oder d'SHA vum leschte Verpflichtung am Git - {{ .Values.sha }}.
    Si mussen gezielt ginn an un den Helm Client op der Uruff Säit geschéckt ginn, zum Beispill zu Jenkins. Wann d'Applikatioun geännert huet, da ännert sech d'Kontrollsum. Dofir wäert Helm d'Applikatioun nëmmen aktualiséieren wann néideg.

Loosst eis eis Versuche resüméieren

  • Helm mécht Ännerungen op déi mannst invasiv Manéier, sou datt all Ännerung um Applikatiounsbildniveau am Docker Registry net zu engem Update resultéiert: näischt geschitt nodeems de Kommando ausgefouert gëtt.
  • Schlëssel --force benotzt fir problematesch Verëffentlechungen ze restauréieren an ass net mat forcéierten Updates assoziéiert.
  • Schlëssel --recreate-pods wäert Applikatiounen kräfteg aktualiséieren, awer wäert et op eng vandal Manéier maachen: et wäert all Container abrupt ausschalten. D'Benotzer leiden dovunner; Dir sollt dëst net an der Produktioun maachen.
  • Maacht direkt Ännerungen am Kubernetes Cluster mam Kommando kubectl edit net: mir Paus Konsequenz, an d'Behuele wäert op der Versioun vun Helm ënnerscheeden.
  • Mat der Verëffentlechung vun der neier Versioun vum Helm hu vill Nuancen opgetaucht. Themen am Helm Repository ginn a kloer Sprooch beschriwwen, si hëllefen Iech d'Detailer ze verstoen.
  • Eng editéierbar Annotatioun un eng Diagramm bäizefügen wäert et méi flexibel maachen. Dëst erlaabt Iech d'Applikatioun korrekt auszerollen, ouni Ënnerbriechung.

E "Weltfridden" Gedanken, deen an alle Beräicher vum Liewen funktionnéiert: Liest d'Instruktioune virum Gebrauch, net duerno. Nëmme mat kompletten Informatioun wäert et méiglech sinn zouverlässeg Systemer ze bauen an d'Benotzer glécklech ze maachen.

Aner verbonne Linken:

  1. Bekanntschaft mat Helm 3
  2. Helm offiziell Websäit
  3. Helm Repository op GitHub
  4. 25 Nëtzlech Kubernetes Tools: Deployment a Management

Dëse Rapport gouf éischt presentéiert um @Kubernetes Konferenz vun Mail.ru Cloud Léisungen. Kuckt видео aner Opféierungen an abonnéieren Event Ukënnegung op Telegram Um Kubernetes bei Mail.ru Group.

Source: will.com

Setzt e Commentaire