Ang Helm device ug ang mga lit-ag niini

Ang Helm device ug ang mga lit-ag niini
Konsepto sa Typhon freight hauler, Anton Swanepoel

Ang akong ngalan mao si Dmitry Sugrobov, usa ako ka developer sa Leroy Merlin. Sa artikulo isulti ko kanimo kung ngano nga gikinahanglan ang Helm, kung giunsa kini gipasimple ang pagtrabaho kauban ang mga Kubernetes, kung unsa ang nabag-o sa ikatulo nga bersyon, ug kung giunsa kini gamiton aron ma-update ang mga aplikasyon sa produksiyon nga wala’y downtime.

Kini usa ka summary base sa usa ka pakigpulong sa usa ka komperensya @Kubernetes Conference by Mail.ru Cloud Solutions Kung dili ka ganahan mubasa, tan-awa ang video.

Ngano nga gigamit namon ang Kubernetes sa produksiyon

Si Leroy Merlin mao ang nanguna sa DIY retail market sa Russia ug Europe. Ang among kompanya adunay labaw sa usa ka gatos nga mga developer, 33 nga mga internal nga empleyado ug daghang mga tawo nga nagbisita sa mga hypermarket ug sa site. Aron malipay silang tanan, nakahukom kami nga magpabilin sa sumbanan sa industriya. Pagpalambo og bag-ong mga aplikasyon gamit ang microservice architecture; paggamit sa mga sudlanan aron ihimulag ang mga palibot ug ihatud sa husto; ug para sa orkestra gamit ang Kubernetes. Ang presyo sa paggamit sa mga orkestra paspas nga nahimong mas barato: ang gidaghanon sa mga inhenyero nga nanag-iya sa teknolohiya nagkadako sa merkado, ug ang mga tighatag nagpakita nga nagtanyag sa Kubernetes isip usa ka serbisyo.

Ang tanan nga gibuhat sa Kubernetes, siyempre, mahimo sa ubang mga paagi, pananglitan, pinaagi sa pagpahid sa pipila ka Jenkins ug docker-compose sa mga script, apan nganong komplikado ang kinabuhi kung adunay andam ug kasaligan nga solusyon? Busa, mianhi kami sa Kubernetes ug gigamit kini sa produksiyon sulod na sa usa ka tuig. Aduna na kitay kawhaag-upat ka Kubernetes clusters, ang labing karaan niini kapin sa usa ka tuig ang edad nga adunay mga duha ka gatos ka pod.

Ang tunglo sa daghang mga file sa YAML sa Kubernetes

Para magpadagan ug microservice sa Kubernetes, maghimo mi ug labing menos lima ka YAML files: para sa Deployment, Service, Ingress, ConfigMap, Secrets - ug ipadala kini sa cluster. Alang sa sunod nga aplikasyon, isulat namon ang parehas nga pakete sa yamliki, uban ang ikatulo - usa pa, ug uban pa. Ang pagpadaghan sa gidaghanon sa mga dokumento sa gidaghanon sa mga palibot, nakuha na nato ang gatusan ka mga file, ug kini wala gani mag-isip sa dinamikong mga palibot.

Ang Helm device ug ang mga lit-ag niini
Si Adam Reese, ang panguna nga tigdumala sa Helm, nagpaila sa konsepto sa "Siklo sa pag-uswag sa Kubernetes", nga ingon niini:

  1. Kopyaha ang YAML - kopyaha ang usa ka YAML file.
  2. Idikit ang YAML - idikit kini.
  3. Pag-ayo sa mga Indent - pag-ayo sa mga indent.
  4. Balik-balika pag-usab.

Ang kapilian nagtrabaho, apan kinahanglan nimo nga kopyahon ang mga file sa YAML sa daghang mga higayon. Aron mabag-o kini nga siklo, ilang gihimo ang Helm.

Unsa ang timon

Una, Helm tagdumala sa pakete, nga makatabang kanimo sa pagpangita ug pag-instalar sa mga programa nga imong gikinahanglan. Aron ma-install, pananglitan, MongoDB, dili nimo kinahanglan nga moadto sa opisyal nga website ug mag-download sa mga binary, pagdagan lang ang mando helm install stable/mongodb.

Ikaduha, Helm- template nga makina, makatabang sa pag-parameter sa mga file. Balikan nato ang sitwasyon sa YAML files sa Kubernetes. Mas sayon ​​ang pagsulat sa samang YAML file, idugang ang pipila ka mga placeholder niini, diin ang Helm mopuli sa mga bili. Kana mao, imbis nga usa ka dako nga hugpong sa mga yamliks, adunay usa ka hugpong sa mga templates (templates) diin ang gikinahanglan nga mga kantidad ilisan sa husto nga oras.

Ikatulo, Helm- deployment wizard. Uban niini, mahimo nimong i-install, i-rollback ug i-update ang mga aplikasyon. Atong tan-awon kon unsaon kini pagbuhat.

Ang Helm device ug ang mga lit-ag niini

Giunsa paggamit ang Helm aron i-deploy ang imong kaugalingon nga mga aplikasyon

I-install ang kliyente sa Helm sa kompyuter, pagsunod sa opisyal mga instruksyon. Unya maghimo kami usa ka hugpong sa mga file sa YAML. Imbis nga ipiho ang piho nga mga kantidad, ibilin ang mga placeholder nga pun-an ni Helm sa kasayuran sa umaabot. Ang usa ka set sa maong mga file gitawag og Helm chart. Mahimo kining ipadala sa kliyente sa Helm console sa tulo ka paagi:

  • ipiho ang usa ka folder nga adunay mga template;
  • iputos sa .tar archive ug itudlo kini;
  • ibutang ang template sa hilit nga repository ug idugang ang link sa repository sa Helm client.

Kinahanglan usab nimo ang usa ka file nga adunay mga kantidad - values.yaml. Ang datos gikan didto ilisan sa template. Himoon usab nato kini.

Ang Helm device ug ang mga lit-ag niini
Ang ikaduha nga bersyon sa Helm adunay dugang nga aplikasyon sa server nga gitawag Tiller. Nagbitay kini sa gawas sa Kubernetes ug naghulat alang sa mga hangyo gikan sa kliyente sa Helm, ug kung gitawag, gipuli niini ang kinahanglan nga mga kantidad sa template ug ipadala kini sa Kubernetes.

Ang Helm device ug ang mga lit-ag niini
Ang Helm 3 mas simple: imbes nga iproseso ang mga templates sa server, ang impormasyon karon giproseso na sa hingpit sa kilid sa Helm client ug direkta nga gipadala ngadto sa Kubernetes API. Kini nga pagpayano makapauswag sa seguridad sa cluster ug mapadali ang rollout scheme.

Giunsa kini tanan molihok

Pagdalagan ang sugo helm install. Ipiho ang ngalan sa pagpagawas sa aplikasyon, ihatag ang dalan sa values.yaml. Sa katapusan, atong itakda ang repository nga adunay sulod nga tsart ug ang ngalan sa tsart. Sa pananglitan, kini mao ang "lmru" ug "bestchart" matag usa.

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

Ang pagpatuman sa sugo posible lamang sa makausa, kung ipatuman pag-usab imbes nga install kinahanglan gamiton upgrade. Alang sa kayano, imbes nga duha ka mga sugo, mahimo nimong ipadagan ang sugo upgrade nga adunay dugang nga yawe --install. Sa una nga pagpatuman, ang Helm magpadala usa ka mando nga i-install ang pagpagawas, ug sa umaabot kini i-update kini.

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

Mga lit-ag sa pag-deploy sa mga bag-ong bersyon sa aplikasyon gamit ang Helm

Niini nga punto sa istorya, nagdula ko sa Who Wants to Be a Millionaire uban sa mga mamiminaw ug among gisusi kung giunsa pagkuha ang Helm aron ma-update ang bersyon sa app. Tan-awa ang video.

Sa dihang gitun-an nako ang trabaho ni Helm, natingala ko sa katingad-an nga kinaiya sa dihang misulay sa pag-update sa mga bersyon sa nagdagan nga mga aplikasyon. Gi-update nako ang code sa aplikasyon, nag-upload og bag-ong imahe sa rehistro sa docker, gipadala ang mando nga i-deploy - ug wala’y nahitabo. Sa ubos mao ang pipila ka dili kaayo maayo nga mga paagi sa pag-update sa mga app. Pinaagi sa pagtuon sa matag usa kanila sa mas detalyado, nagsugod ka sa pagsabut sa internal nga istruktura sa instrumento ug sa mga rason alang niining dili klaro nga kinaiya.

Pamaagi 1. Ayaw usba ang impormasyon sukad sa kataposang dagan

Ingon sa giingon opisyal nga website Helm, "Ang mga tsart sa Kubernetes mahimong dako ug komplikado, mao nga ang Helm naningkamot sa paghimo sa mga butang nga yano kutob sa mahimo." Busa, kung imong i-update ang pinakabag-o nga bersyon sa imahe sa aplikasyon sa rehistro sa docker ug ipadagan ang mando helm upgrade, unya walay mahitabo. Ang Helm maghunahuna nga walay nausab ug wala na kinahanglana nga magpadala ug sugo sa Kubernetes aron ma-update ang aplikasyon.

Pagkahuman niini, ang pinakabag-o nga tag gipakita lamang isip usa ka pananglitan. Kung kini nga tag gitakda, ang Kubernetes mag-download sa imahe gikan sa docker registry matag higayon, bisan unsa pa ang parameter sa imagePullPolicy. Ang paggamit sa pinakabag-o sa produksiyon dili gusto ug hinungdan sa mga epekto.

Pamaagi 2. I-update ang LABEL sa hulagway

Ingon sa nahisulat sa parehas dokumentasyon, "Ang Helm mag-update lang sa usa ka app kung kini nausab sukad sa katapusang pagpagawas." Ang lohikal nga kapilian alang niini mao ang pag-update sa LABEL sa imahe sa docker mismo. Bisan pa, ang Helm wala magtan-aw sa mga imahe sa aplikasyon ug wala nahibal-an ang bisan unsang mga pagbag-o sa kanila. Tungod niini, kung gi-update ang mga label sa imahe, dili mahibal-an ni Helm ang bahin niini, ug ang mando sa pag-update sa aplikasyon dili madawat sa Kubernetes.

Pamaagi 3. Gamita ang yawe --force

Ang Helm device ug ang mga lit-ag niini
Atong ablihan ang mga manwal ug pangitaon ang husto nga yawe. Ang yawe nga labing hinungdanon --force. Bisan pa sa gisulti nga ngalan, ang pamatasan lahi sa gipaabut. Imbis nga usa ka pinugos nga pag-update sa aplikasyon, ang tinuud nga katuyoan niini mao ang pagpasig-uli sa usa ka pagpagawas nga naa sa FAILED status. Kung dili nimo gamiton kini nga yawe, nan kinahanglan nimo nga sunud-sunod nga ipatuman ang mga mando helm delete && helm install --replace. Hinuon, gisugyot nga gamiton ang yawe --force, nga nag-automate sa sunodsunod nga pagpatuman niini nga mga sugo. Dugang impormasyon niini hangyo sa pagbitad. Aron masultihan si Helm nga i-update ang bersyon sa aplikasyon, sa kasubo, kini nga yawe dili molihok.

Pamaagi 4. Usba ang mga label direkta sa Kubernetes

Ang Helm device ug ang mga lit-ag niini
Direkta nga pag-update sa label sa cluster gamit ang command kubectl edit - dili maayo nga ideya. Kini nga aksyon modala ngadto sa pagkasumpaki sa impormasyon tali sa nagdagan nga aplikasyon ug sa usa nga orihinal nga gipadala alang sa pag-deploy. Ang pamatasan sa Helm sa panahon sa pag-deploy niini nga kaso lahi sa bersyon niini: Ang Helm 2 wala’y mahimo, ug ang Helm 3 mag-deploy og bag-ong bersyon sa aplikasyon. Aron masabtan ang hinungdan, kinahanglan nimong masabtan kung giunsa paglihok ang Helm.

Giunsa pagtrabaho ang Helm

Aron mahibal-an kung ang usa ka aplikasyon nausab sukad sa katapusan nga pagpagawas, ang Helm mahimong mogamit:

  • usa ka nagdagan nga aplikasyon sa Kubernetes;
  • bag-ong mga mithi.yaml ug kasamtangang tsart;
  • Ang internal nga pagpagawas sa impormasyon sa Helm.

Alang sa labing mausisaon: asa gitipigan sa Helm ang internal nga pagpagawas sa impormasyon?Pinaagi sa pagpatuman sa sugo helm history, makuha namo ang tanang impormasyon bahin sa mga bersyon nga na-install sa Helm.

Ang Helm device ug ang mga lit-ag niini
Adunay usab detalyado nga kasayuran bahin sa gipadala nga mga sumbanan ug mga kantidad. Makahangyo kami niini:

Ang Helm device ug ang mga lit-ag niini
Sa ikaduhang bersyon sa Helm, kini nga impormasyon anaa sa samang namespace diin ang Tiller nagdagan (sa default, kube-system), sa ConfigMap, gimarkahan sa label nga "OWNER=TILLER":

Ang Helm device ug ang mga lit-ag niini
Sa panahon sa pagpakita sa ikatulo nga bersyon sa Helm, ang impormasyon mibalhin ngadto sa mga sekreto, dugang pa, ngadto sa sama nga namespace diin ang aplikasyon nagdagan. Salamat niini, nahimong posible ang pagpadagan sa daghang mga aplikasyon sa parehas nga oras sa lainlaing mga namespace nga adunay parehas nga ngalan sa pagpagawas. Sa ikaduha nga bersyon, grabe ang sakit sa ulo kung ang mga namespace gilain, apan mahimong makaimpluwensya sa usag usa.

Ang Helm device ug ang mga lit-ag niini

Ang ikaduha nga Helm, kung gisulayan nga mahibal-an kung gikinahanglan ang usa ka update, naggamit lamang sa duha ka gigikanan sa kasayuran: kung unsa ang gihatag kaniya karon, ug internal nga kasayuran bahin sa mga pagpagawas, nga naa sa ConfigMap.

Ang Helm device ug ang mga lit-ag niini
Ang ikatulo nga Helm naggamit ug three-way merge nga estratehiya: dugang sa maong impormasyon, gikonsiderar usab niini ang aplikasyon nga nagdagan karon sa Kubernetes.

Ang Helm device ug ang mga lit-ag niini
Tungod niini, ang daan nga bersyon sa Helm wala’y mahimo, tungod kay wala kini gikonsiderar ang kasayuran sa aplikasyon sa cluster, apan ang Helm 3 makadawat sa mga pagbag-o ug ipadala ang bag-ong aplikasyon alang sa pag-deploy.

Pamaagi 5: Paggamit --recreate-pods key

Uban sa usa ka yawe --recreate-pods makab-ot nimo ang orihinal nga giplano nga makuha gamit ang yawe --force. Ang mga sudlanan magsugod pag-usab ug, sumala sa imagePullPolicy: Kanunay nga palisiya alang sa pinakabag-o nga tag (dugang pa niana sa footnote sa ibabaw), ang Kubernetes mag-download ug magpadagan sa bag-ong bersyon sa hulagway. Dili kini buhaton sa labing kaayo nga paagi: kung wala gikonsiderar ang StrategyType sa pag-deploy, kini kalit nga mapalong ang tanan nga daan nga mga higayon sa aplikasyon ug moadto sa paglansad sa mga bag-o. Atol sa pagsugod, ang sistema dili molihok, ang mga tiggamit mag-antos.

Sa Kubernetes mismo, ang susamang problema naglungtad usab sa dugay nga panahon. Ug karon, 4 ka tuig human sa pagbukas Isyu, ang problema naayo na, ug sugod sa bersyon 1.15 sa Kubernetes, ang posibilidad sa rolling-restart pods makita.

Gipalong ra sa Helm ang tanan nga aplikasyon ug gilunsad ang mga bag-ong sudlanan sa duol. Sa produksiyon, dili nimo mahimo kini, aron dili hinungdan sa usa ka yano nga aplikasyon. Gikinahanglan lamang kini alang sa mga panginahanglan sa pag-uswag, mahimo lamang kini sa mga palibot sa entablado.

Giunsa pag-update ang bersyon sa app gamit ang Helm?

Atong usbon ang mga kantidad nga gipadala sa Helm. Kasagaran, kini ang mga kantidad nga gipuli sa tag sa imahe. Sa kaso sa pinakabag-o, nga sagad gigamit alang sa dili produktibo nga mga palibot, ang anotasyon naglihok isip mutable nga impormasyon, nga walay kapuslanan alang sa Kubernetes mismo, ug alang sa Helm kini molihok isip usa ka signal sa pag-update sa aplikasyon. Mga kapilian sa pagpuno sa kantidad sa anotasyon:

  1. random nga bili gamit ang standard function {{ randAlphaNum 6 }}.
    Adunay usa ka caveat: pagkahuman sa matag pag-deploy gamit ang usa ka tsart nga adunay ingon nga variable, ang kantidad sa annotation mahimong talagsaon, ug ang Helm maghunahuna nga adunay mga pagbag-o. Kini nahimo nga kanunay namon nga i-restart ang aplikasyon, bisan kung wala namon gibag-o ang bersyon niini. Dili kini kritikal, tungod kay wala’y downtime, apan dili maayo.
  2. Isulod ang kasamtangan petsa ug oras - {{ .Release.Date }}.
    Ang usa ka variant sama sa usa ka random nga kantidad nga adunay permanente nga talagsaon nga variable.
  3. Ang usa ka mas maayo nga paagi mao ang paggamit mga checksum. Kini ang SHA sa imahe o ang SHA sa katapusang commit sa git - {{ .Values.sha }}.
    Kinahanglan sila nga maihap ug ipadala sa kliyente sa Helm sa bahin sa pagtawag, pananglitan sa Jenkins. Kung ang aplikasyon nausab, nan ang checksum mausab usab. Busa, i-update lang ni Helm ang aplikasyon kung gikinahanglan.

Atong i-summarize ang atong mga paningkamot

  • Ang Helm naghimo og mga pagbag-o sa labing gamay nga invasive nga paagi, busa ang bisan unsang pagbag-o sa lebel sa imahe sa aplikasyon sa Docker Registry dili moresulta sa usa ka update: wala’y mahitabo pagkahuman ipatuman ang mando.
  • Key --force gigamit sa pag-ayo sa mga problema nga pagpagawas ug wala nalangkit sa pinugos nga pag-upgrade.
  • Key --recreate-pods pugson nga i-update ang mga aplikasyon, apan buhaton kini sa usa ka vandal nga paagi: kini kalit nga mapalong ang tanan nga mga sudlanan. Ang mga tiggamit mag-antos niini, dili kini angay nga buhaton kini sa pagbaligya.
  • Direkta nga paghimo og mga pagbag-o sa Kubernetes cluster gamit ang command kubectl edit ayaw: atong bungkagon ang pagkamakanunayon, ug ang kinaiya magkalahi depende sa bersyon sa Helm.
  • Sa pagpagawas sa bag-ong bersyon sa Helm, daghang mga nuances ang nagpakita. Ang mga isyu sa Helm repository gihulagway sa tin-aw nga pinulongan, kini makatabang kanimo nga masabtan ang mga detalye.
  • Ang pagdugang ug mutable annotation sa usa ka tsart maghimo niini nga mas flexible. Kini magtugot sa aplikasyon sa pag-roll out sa husto, nga walay downtime.

Gihunahuna gikan sa kategorya nga "kalinaw sa kalibutan", nagtrabaho sa tanan nga mga bahin sa kinabuhi: basaha ang mga panudlo sa wala pa gamiton, dili pagkahuman. Ang pagbaton lamang sa kompletong impormasyon posible nga makatukod ug kasaligang mga sistema ug makapalipay sa mga tiggamit.

Uban pang may kalabutan nga mga link:

  1. Kaila sa Helm 3
  2. Helm opisyal nga website
  3. Helm repository sa GitHub
  4. 25 Mapuslanon nga Kubernetes Tools: Deployment and Management

Kini nga taho unang gipresentar sa @Kubernetes Conference pinaagi sa Mail.ru Cloud Solutions. Tan-awa video uban pang mga pasundayag ug pag-subscribe sa mga pahibalo sa mga panghitabo sa Telegram Sa palibot sa Kubernetes sa Mail.ru Group.

Source: www.habr.com

Idugang sa usa ka comment