Dyfais Helm a'i pheryglon

Dyfais Helm a'i pheryglon
Cysyniad cludwr nwyddau typhon, Anton Swanepoel

Fy enw i yw Dmitry Sugrobov, rwy'n ddatblygwr yn Leroy Merlin. Yn yr erthygl hon byddaf yn dweud wrthych pam mae angen Helm, sut mae'n symleiddio gweithio gyda Kubernetes, beth sydd wedi newid yn y trydydd fersiwn, a sut i'w ddefnyddio i ddiweddaru cymwysiadau cynhyrchu heb amser segur.

Dyma grynodeb yn seiliedig ar araith mewn cynhadledd Cynhadledd @Kubernetes by Atebion Cwmwl Mail.ru - os nad ydych chi eisiau darllen, gwyliwch y fideo.

Pam rydyn ni'n defnyddio Kubernetes wrth gynhyrchu

Mae Leroy Merlin yn arweinydd yn y farchnad manwerthu DIY yn Rwsia ac Ewrop. Mae gan ein cwmni fwy na chant o ddatblygwyr, 33 o weithwyr mewnol a nifer enfawr o bobl yn ymweld ag archfarchnadoedd a'r wefan. Er mwyn eu gwneud i gyd yn hapus, fe benderfynon ni ddilyn dulliau safonol y diwydiant. Datblygu cymwysiadau newydd gan ddefnyddio pensaernïaeth microwasanaeth; defnyddio cynwysyddion i ynysu amgylcheddau a sicrhau cyflenwad priodol; a defnyddio Kubernetes ar gyfer offeryniaeth. Mae pris defnyddio cerddorfeydd yn dod yn rhatach yn gyflym: mae nifer y peirianwyr sy'n hyfedr yn y dechnoleg yn tyfu ar y farchnad, ac mae darparwyr yn ymddangos yn cynnig Kubernetes fel gwasanaeth.

Gellir gwneud popeth y mae Kubernetes yn ei wneud, wrth gwrs, mewn ffyrdd eraill, er enghraifft, trwy orchuddio rhai Jenkins a docwr-gyfansoddi â sgriptiau, ond pam cymhlethu bywyd os oes ateb parod a dibynadwy? Dyna pam y daethom i Kubernetes ac rydym wedi bod yn ei ddefnyddio wrth gynhyrchu ers blwyddyn bellach. Ar hyn o bryd mae gennym bedwar ar hugain o glystyrau Kubernetes, a'r hynaf ohonynt yn fwy na blwydd oed, gyda thua dau gant o godennau.

Melltith ffeiliau YAML mawr yn Kubernetes

I lansio microwasanaeth yn Kubernetes, byddwn yn creu o leiaf bum ffeil YAML: ar gyfer Defnyddio, Gwasanaeth, Ingress, ConfigMap, Secrets - a'u hanfon i'r clwstwr. Ar gyfer y cais nesaf byddwn yn ysgrifennu'r un pecyn o jambs, gyda'r trydydd un byddwn yn ysgrifennu un arall, ac yn y blaen. Os byddwn yn lluosi nifer y dogfennau â nifer yr amgylcheddau, byddwn eisoes yn cael cannoedd o ffeiliau, ac nid yw hyn eto'n ystyried amgylcheddau deinamig.

Dyfais Helm a'i pheryglon
Cyflwynodd Adam Reese, cynhaliwr craidd Helm, y cysyniad o "Cylch Datblygu yn Kubernetes", sy'n edrych fel hyn:

  1. Copïwch YAML - copïwch ffeil YAML.
  2. Gludwch YAML - gludwch ef.
  3. Trwsio Indents - trwsio mewnoliadau.
  4. Ailadrodd - ailadrodd eto.

Mae'r opsiwn yn gweithio, ond mae'n rhaid i chi gopïo'r ffeiliau YAML sawl gwaith. I newid y cylch hwn, dyfeisiwyd Helm.

Beth yw Helm

Yn gyntaf, Helm - rheolwr pecyn, sy'n eich helpu i ddod o hyd i'r rhaglenni sydd eu hangen arnoch a'u gosod. I osod, er enghraifft, MongoDB, nid oes angen i chi fynd i'r wefan swyddogol a lawrlwytho binaries, dim ond rhedeg y gorchymyn helm install stable/mongodb.

Yn ail, Helm - injan templed, yn helpu i baramedroli ffeiliau. Gadewch i ni ddychwelyd i'r sefyllfa gyda ffeiliau YAML yn Kubernetes. Mae'n haws ysgrifennu'r un ffeil YAML, ychwanegu rhai dalfannau ati, y bydd Helm yn amnewid y gwerthoedd ynddi. Hynny yw, yn lle set fawr o sgaffaldiau, bydd set o dempledi y bydd y gwerthoedd gofynnol yn cael eu disodli ynddynt ar yr amser iawn.

Yn drydydd, Helm - meistr lleoli. Ag ef gallwch osod, dychwelyd a diweddaru ceisiadau. Gadewch i ni ddarganfod sut i wneud hyn.

Dyfais Helm a'i pheryglon

Sut i ddefnyddio Helm i ddefnyddio'ch cymwysiadau eich hun

Gadewch i ni osod y cleient Helm ar eich cyfrifiadur, yn dilyn y swyddogol cyfarwyddiadau. Nesaf, byddwn yn creu set o ffeiliau YAML. Yn hytrach na nodi gwerthoedd penodol, byddwn yn gadael deiliaid lleoedd, y bydd Helm yn eu llenwi â gwybodaeth yn y dyfodol. Gelwir set o ffeiliau o'r fath yn siart Helm. Gellir ei anfon at gleient consol Helm mewn tair ffordd:

  • nodi ffolder gyda thempledi;
  • pacio'r archif yn .tar a phwyntio ato;
  • rhowch y templed mewn ystorfa bell ac ychwanegu dolen i'r ystorfa yn y cleient Helm.

Mae angen ffeil gyda gwerthoedd hefyd - gwerthoedd.yaml. Bydd y data oddi yno yn cael ei fewnosod yn y templed. Gadewch i ni ei greu hefyd.

Dyfais Helm a'i pheryglon
Mae gan ail fersiwn Helm raglen gweinydd ychwanegol - Tiller. Mae'n hongian y tu allan i Kubernetes ac yn aros am geisiadau gan y cleient Helm, a phan gaiff ei alw, mae'n amnewid y gwerthoedd gofynnol i'r templed a'i anfon at Kubernetes.

Dyfais Helm a'i pheryglon
Mae Helm 3 yn symlach: yn lle prosesu templedi ar y gweinydd, mae gwybodaeth bellach yn cael ei phrosesu'n gyfan gwbl ar ochr cleient Helm a'i hanfon yn uniongyrchol at API Kubernetes. Mae'r symleiddio hwn yn gwella diogelwch clystyrau ac yn hwyluso'r cynllun cyflwyno.

Sut mae'r cyfan yn gweithio

Rhedeg y gorchymyn helm install. Gadewch i ni nodi enw'r datganiad cais a rhoi'r llwybr i gwerthoedd.yaml. Ar y diwedd byddwn yn nodi'r ystorfa y mae'r siart wedi'i lleoli ynddi ac enw'r siart. Yn yr enghraifft, y rhain yw “lmru” a “chart gorau”, yn y drefn honno.

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

Dim ond unwaith y gellir gweithredu'r gorchymyn, pan gaiff ei weithredu eto yn lle hynny install angen defnyddio upgrade. Er mwyn symlrwydd, yn lle dau orchymyn, gallwch chi redeg y gorchymyn upgrade gydag allwedd ychwanegol --install. Pan gaiff ei weithredu am y tro cyntaf, bydd Helm yn anfon gorchymyn i osod y datganiad, a bydd yn ei ddiweddaru yn y dyfodol.

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

Peryglon defnyddio fersiynau newydd o raglen gyda Helm

Ar y pwynt hwn yn y stori, rydw i'n chwarae Who Wants to Be a Millionaire gyda'r gynulleidfa, ac rydyn ni'n darganfod sut i gael Helm i ddiweddaru'r fersiwn o'r app. Gwyliwch y fideo.

Pan oeddwn yn dysgu sut mae Helm yn gweithio, cefais fy synnu gan ymddygiad rhyfedd wrth geisio diweddaru fersiynau o raglenni rhedeg. Diweddarais god y cais, uwchlwythais ddelwedd newydd i gofrestrfa Docker, anfonais y gorchymyn lleoli - ac ni ddigwyddodd dim. Isod mae rhai ffyrdd nad ydynt yn gwbl lwyddiannus i ddiweddaru ceisiadau. Trwy astudio pob un ohonynt yn fanylach, rydych chi'n dechrau deall strwythur mewnol yr offeryn a'r rhesymau dros yr ymddygiad nad yw'n amlwg.

Dull 1. Peidiwch â newid gwybodaeth ers y lansiad diwethaf

Ystyr geiriau: Cac gwydraid Gwefan swyddogol Helm, “Gall siartiau Kubernetes fod yn fawr ac yn gymhleth, felly mae Helm yn ceisio peidio â chyffwrdd â dim byd yn ormodol.” Felly, os ydych chi'n diweddaru'r fersiwn ddiweddaraf o ddelwedd y cais yn y gofrestr docwr a rhedeg y gorchymyn helm upgrade, yna ni fydd dim yn digwydd. Bydd Helm yn meddwl nad oes dim wedi newid ac nid oes angen anfon gorchymyn i Kubernetes i ddiweddaru'r cais.

Yma ac isod, dangosir y tag diweddaraf fel enghraifft yn unig. Pan fyddwch chi'n nodi'r tag hwn, bydd Kubernetes yn lawrlwytho'r ddelwedd o gofrestrfa'r docwyr bob tro, waeth beth fo'r paramedr imagePullPolicy. Mae defnyddio'r diweddaraf mewn cynhyrchu yn annymunol ac yn achosi sgîl-effeithiau.

Dull 2. Diweddaru LABEL yn y ddelwedd

Fel yr ysgrifenwyd yn yr un dogfennaeth, “Dim ond os yw wedi newid ers y datganiad diwethaf y bydd Helm yn diweddaru cais.” Ymddengys mai opsiwn rhesymegol ar gyfer hyn fyddai diweddaru'r LABEL yn nelwedd y docwr ei hun. Fodd bynnag, nid yw Helm yn edrych i mewn i ddelweddau'r cais ac nid oes ganddo unrhyw syniad am unrhyw newidiadau iddynt. Yn unol â hynny, wrth ddiweddaru labeli yn y ddelwedd, ni fydd Helm yn gwybod amdanynt, ac ni fydd y gorchymyn diweddaru cais yn cael ei anfon at Kubernetes.

Dull 3: Defnyddiwch allwedd --force

Dyfais Helm a'i pheryglon
Gadewch i ni droi at y llawlyfrau a chwilio am yr allwedd ofynnol. Mae'r allwedd yn gwneud y mwyaf o synnwyr --force. Er gwaethaf yr enw amlwg, mae'r ymddygiad yn wahanol i'r disgwyl. Yn hytrach na gorfodi diweddariad cais, ei wir ddiben yw adfer datganiad sydd mewn statws METHU. Os na ddefnyddiwch yr allwedd hon, mae angen i chi weithredu'r gorchmynion yn olynol helm delete && helm install --replace. Awgrymir defnyddio'r allwedd yn lle hynny --force, sy'n awtomeiddio gweithrediad dilyniannol y gorchmynion hyn. Mwy o wybodaeth yn hyn cais tynnu. Er mwyn dweud wrth Helm am ddiweddaru fersiwn y cais, yn anffodus, ni fydd yr allwedd hon yn gweithio.

Dull 4. Newid labeli yn uniongyrchol yn Kubernetes

Dyfais Helm a'i pheryglon
Diweddaru label yn uniongyrchol yn y clwstwr gan ddefnyddio'r gorchymyn kubectl edit - syniad drwg. Bydd y cam gweithredu hwn yn arwain at anghysondeb o ran gwybodaeth rhwng y rhaglen redeg a'r un a anfonwyd yn wreiddiol i'w ddefnyddio. Mae ymddygiad Helm yn ystod y defnydd yn yr achos hwn yn wahanol i'w fersiwn: ni fydd Helm 2 yn gwneud unrhyw beth, a bydd Helm 3 yn defnyddio'r fersiwn newydd o'r cais. I ddeall pam, mae angen i chi ddeall sut mae Helm yn gweithio.

Sut mae Helm yn gweithio?

I benderfynu a yw cais wedi newid ers ei ryddhau diwethaf, gall Helm ddefnyddio:

  • rhedeg cais yn Kubernetes;
  • gwerthoedd newydd.yaml a siart cyfredol;
  • Gwybodaeth rhyddhau mewnol Helm.

I'r rhai mwy chwilfrydig: ble mae Helm yn storio gwybodaeth fewnol am ddatganiadau?Trwy weithredu'r gorchymyn helm history, byddwn yn cael yr holl wybodaeth am y fersiynau gosod gan ddefnyddio Helm.

Dyfais Helm a'i pheryglon
Mae yna hefyd wybodaeth fanwl am y templedi a'r gwerthoedd a anfonwyd. Gallwn ofyn amdano:

Dyfais Helm a'i pheryglon
Yn yr ail fersiwn o Helm, mae'r wybodaeth hon wedi'i lleoli yn yr un gofod enw lle mae Tiller yn rhedeg (kube-system yn ddiofyn), yn y ConfigMap, wedi'i farcio â'r label “OWNER=TILLER”:

Dyfais Helm a'i pheryglon
Pan ymddangosodd y trydydd fersiwn o Helm, symudodd y wybodaeth i gyfrinachau, ac i'r un gofod enw lle'r oedd y rhaglen yn rhedeg. Diolch i hyn, daeth yn bosibl rhedeg sawl rhaglen ar yr un pryd mewn gwahanol ofodau enwau gyda'r un enw rhyddhau. Yn yr ail fersiwn roedd yn gur pen difrifol pan fo gofodau enwau yn ynysig ond yn gallu dylanwadu ar ei gilydd.

Dyfais Helm a'i pheryglon

Mae'r ail Helm, wrth geisio deall a oes angen diweddariad, yn defnyddio dwy ffynhonnell wybodaeth yn unig: yr hyn a ddarperir iddo nawr, a gwybodaeth fewnol am ddatganiadau, sydd yn y ConfigMap.

Dyfais Helm a'i pheryglon
Mae'r trydydd Helm yn defnyddio strategaeth uno tair ffordd: yn ogystal â'r wybodaeth honno, mae hefyd yn ystyried y cymhwysiad sy'n rhedeg ar hyn o bryd yn Kubernetes.

Dyfais Helm a'i pheryglon
Am y rheswm hwn, ni fydd yr hen fersiwn o Helm yn gwneud unrhyw beth, gan nad yw'n ystyried y wybodaeth ymgeisio yn y clwstwr, ond bydd Helm 3 yn derbyn y newidiadau ac yn anfon y cais newydd i'w ddefnyddio.

Dull 5. Defnyddiwch y switsh --recreate-pods

Gydag allwedd --recreate-pods gallwch gyflawni'r hyn yr oeddech yn bwriadu ei gyflawni'n wreiddiol gyda'r allwedd --force. Bydd y cynwysyddion yn ailgychwyn ac, yn ôl y polisi imagePull: Polisi bob amser ar gyfer y tag diweddaraf (mwy am hyn yn y troednodyn uchod), bydd Kubernetes yn lawrlwytho ac yn lansio fersiwn newydd o'r ddelwedd. Ni fydd hyn yn cael ei wneud yn y ffordd orau: heb ystyried y Math o ddefnydd o Strategaeth, bydd yn diffodd pob hen gais yn sydyn ac yn dechrau lansio rhai newydd. Yn ystod yr ailgychwyn, ni fydd y system yn gweithio, bydd defnyddwyr yn dioddef.

Yn Kubernetes ei hun, roedd problem debyg hefyd yn bodoli ers amser maith. Ac yn awr, 4 blynedd ar ôl yr agoriad Rhifyn, mae'r broblem wedi'i gosod, ac gan ddechrau gyda fersiwn 1.15 o Kubernetes, mae'r gallu i rolio-ailgychwyn codennau yn ymddangos.

Yn syml, mae Helm yn diffodd pob cais ac yn lansio cynwysyddion newydd gerllaw. Ni allwch wneud hyn wrth gynhyrchu, er mwyn peidio ag achosi amser segur ymgeisio. Dim ond ar gyfer anghenion datblygu y mae angen hyn a dim ond mewn amgylcheddau llwyfan y gellir ei berfformio.

Sut i ddiweddaru fersiwn y cais gan ddefnyddio Helm?

Byddwn yn newid y gwerthoedd a anfonwyd i Helm. Yn nodweddiadol, mae'r rhain yn werthoedd sy'n cael eu disodli yn lle'r tag delwedd. Yn achos diweddaraf, a ddefnyddir yn aml ar gyfer amgylcheddau anghynhyrchiol, mae'r wybodaeth gyfnewidiol yn anodiad, sy'n ddiwerth i Kubernetes ei hun, ac i Helm bydd yn gweithredu fel arwydd o'r angen i ddiweddaru'r cais. Opsiynau ar gyfer llenwi'r gwerth anodiad:

  1. Gwerth ar hap defnyddio'r swyddogaeth safonol - {{ randAlphaNum 6 }}.
    Mae yna gafeat: ar ôl pob gosodiad gan ddefnyddio siart gyda newidyn o'r fath, bydd y gwerth anodi yn unigryw, a bydd Helm yn tybio bod newidiadau. Mae'n ymddangos y byddwn bob amser yn ailgychwyn y cais, hyd yn oed os nad ydym wedi newid ei fersiwn. Nid yw hyn yn hollbwysig, gan na fydd unrhyw amser segur, ond mae'n dal yn annymunol.
  2. Gludo'r cerrynt dyddiad ac amser - {{ .Release.Date }}.
    Mae amrywiad yn debyg i werth ar hap gyda newidyn parhaol unigryw.
  3. Ffordd fwy cywir yw defnyddio sieciau. Dyma SHA y ddelwedd neu SHA yr ymrwymiad olaf yn y git - {{ .Values.sha }}.
    Bydd angen eu cyfrif a'u hanfon at y cleient Helm ar yr ochr alw, er enghraifft yn Jenkins. Os yw'r cais wedi newid, yna bydd y siec yn newid. Felly, dim ond pan fydd angen y bydd Helm yn diweddaru'r cais.

Gadewch i ni grynhoi ein hymdrechion

  • Mae Helm yn gwneud newidiadau yn y ffordd leiaf ymledol, felly ni fydd unrhyw newid ar lefel delwedd y cais yn y Gofrestrfa Dociwr yn arwain at ddiweddariad: ni fydd dim yn digwydd ar ôl i'r gorchymyn gael ei weithredu.
  • Allwedd --force a ddefnyddir i adfer datganiadau problemus ac nid yw'n gysylltiedig â diweddariadau gorfodol.
  • Allwedd --recreate-pods Bydd yn diweddaru ceisiadau yn rymus, ond yn gwneud hynny mewn ffordd fandalaidd: bydd yn diffodd yr holl gynwysyddion yn sydyn. Bydd defnyddwyr yn dioddef o hyn; ni ddylech wneud hyn wrth gynhyrchu.
  • Gwnewch newidiadau yn uniongyrchol i glwstwr Kubernetes gan ddefnyddio'r gorchymyn kubectl edit peidiwch â: byddwn yn torri cysondeb, a bydd yr ymddygiad yn amrywio yn dibynnu ar y fersiwn o Helm.
  • Gyda rhyddhau'r fersiwn newydd o Helm, mae llawer o arlliwiau wedi ymddangos. Disgrifir materion yn ystorfa Helm mewn iaith glir, byddant yn eich helpu i ddeall y manylion.
  • Bydd ychwanegu anodiad y gellir ei olygu at siart yn ei wneud yn fwy hyblyg. Bydd hyn yn caniatáu ichi gyflwyno'r cais yn gywir, heb amser segur.

Meddwl “heddwch byd” sy’n gweithio ym mhob maes o fywyd: darllenwch y cyfarwyddiadau cyn eu defnyddio, nid ar ôl. Dim ond gyda gwybodaeth gyflawn y bydd yn bosibl adeiladu systemau dibynadwy a gwneud defnyddwyr yn hapus.

Dolenni cysylltiedig eraill:

  1. Adnabod â Helm 3
  2. Gwefan swyddogol Helm
  3. Ystorfa Helm ar GitHub
  4. 25 Offer Kubernetes Defnyddiol: Defnyddio a Rheoli

Cyflwynwyd yr adroddiad hwn gyntaf yn Cynhadledd @Kubernetes gan Mail.ru Cloud Solutions. Edrych fideo perfformiadau eraill a thanysgrifio i gyhoeddiadau digwyddiadau ar Telegram O gwmpas Kubernetes yn Mail.ru Group.

Ffynhonnell: hab.com

Ychwanegu sylw