Дастгоҳи Helm ва домҳои он

Дастгоҳи Helm ва домҳои он
Консепсияи интиқолдиҳандаи Typhon, Антон Свейнпол

Номи ман Дмитрий Сугробов, ман таҳиягари Лерой Мерлин ҳастам. Дар ин мақола ман ба шумо мегӯям, ки чаро Helm лозим аст, он чӣ гуна кор бо Kubernetes-ро осон мекунад, дар версияи сеюм чӣ тағир ёфтааст ва чӣ гуна онро барои навсозии замимаҳо дар истеҳсолот бидуни бекоркунӣ истифода бурдан мумкин аст.

Ин мухтасарест, ки дар асоси нутки дар конференция эродшуда Конфронси @Kubernetes by Mail.ru ҳалли абрӣ — агар шумо хондан нахоҳед, видеоро тамошо кунед.

Чаро мо Kubernetes дар истеҳсолот истифода мебарем

Лерой Мерлин пешвои бозори чаканаи DIY дар Русия ва Аврупо мебошад. Ширкати мо дорои беш аз сад таҳиягар, 33 кормандони дохилӣ ва шумораи зиёди одамон аз гипермаркетҳо ва вебсайтҳо ташриф меоранд. Барои он ки ҳама онҳоро шод гардонем, мо тасмим гирифтем, ки равишҳои стандартии соҳаро риоя кунем. Таҳияи барномаҳои нав бо истифода аз меъмории микросервис; контейнерҳоро барои ҷудо кардани муҳити зист ва таъмини интиқоли дуруст истифода баред; ва Kubernetes -ро барои оркестр истифода баред. Нархи истифодаи оркестрҳо босуръат арзонтар мешавад: дар бозор шумораи муҳандисони донандаи технология меафзояд ва провайдерҳо пайдо мешаванд, ки Kubernetes-ро ҳамчун хидмат пешниҳод мекунанд.

Ҳар он чизе, ки Кубернетес мекунад, албатта метавонад бо роҳҳои дигар анҷом дода шавад, масалан, бо фарогирии баъзе Ҷенкинс ва docker-compose бо скриптҳо, аммо чаро ҳаётро душвор мегардонад, агар ҳалли омода ва боэътимод мавҷуд бошад? Барои хамин хам мо ба Кубернетес омадем ва як сол боз онро дар истехсолот истифода мебарем. Дар айни замон мо бисту чор кластерҳои Kubernetes дорем, ки кӯҳнатарини онҳо зиёда аз як сол аст, ки тақрибан дусад поя дорад.

Лаънати файлҳои калони YAML дар Кубернетес

Барои оғоз кардани хидмати хурд дар Кубернетес, мо ҳадди аққал панҷ файли YAML эҷод мекунем: барои ҷойгиркунӣ, хидматрасонӣ, воридшавӣ, ConfigMap, Secrets - ва онҳоро ба кластер мефиристем. Барои аризаи навбатӣ мо ҳамон бастаи ҷамбҳоро менависем, бо сеюм дигарашро менависем ва ғайра. Агар шумораи ҳуҷҷатҳоро ба шумораи муҳитҳо зарб кунем, мо аллакай садҳо файл мегирем ва ин ҳанӯз муҳити динамикӣ ба назар гирифта намешавад.

Дастгоҳи Helm ва домҳои он
Адам Риз, нигоҳдории асосии Helm, мафҳуми "Сикли рушд дар Кубернетес", ки чунин менамояд:

  1. Нусхабардории YAML - нусхабардории файли YAML.
  2. Часбонед YAML - часбонед.
  3. Ислоҳи абзорҳо - ислоҳ кардани абзорҳо.
  4. Такрор - боз такрор кунед.

Опсия кор мекунад, аммо шумо бояд файлҳои YAML-ро борҳо нусхабардорӣ кунед. Барои тағир додани ин давра, Ҳелм ихтироъ карда шуд.

Ҳелм чист

Аввалан, Ҳелм - мудири баста, ки ба шумо дар ёфтан ва насб кардани барномаҳои лозима кӯмак мерасонад. Барои насб кардан, масалан, MongoDB, ба шумо лозим нест, ки ба вебсайти расмӣ равед ва бинарҳоро зеркашӣ кунед, танҳо фармонро иҷро кунед. helm install stable/mongodb.

Дуюм, Ҳелм - муҳаррики шаблон, барои параметрсозии файлҳо кӯмак мекунад. Биёед ба вазъият бо файлҳои YAML дар Кубернетес баргардем. Навиштани як файли YAML осонтар аст, ба он якчанд ҷойнишинҳо илова кунед, ки дар он Helm арзишҳоро иваз мекунад. Ин аст, ки ба ҷои маҷмӯи зиёди скафлдҳо, маҷмӯи қолибҳо мавҷуданд, ки дар онҳо арзишҳои зарурӣ дар вақти лозима иваз карда мешаванд.

Сеюм, Ҳелм - устоди ҷойгиркунӣ. Бо он шумо метавонед барномаҳоро насб, баргардонед ва навсозӣ кунед. Биёед бифаҳмем, ки чӣ тавр ин корро кардан лозим аст.

Дастгоҳи Helm ва домҳои он

Чӣ тавр истифода бурдани Helm барои ҷойгиркунии замимаҳои шахсии худ

Биёед муштарии Helm-ро дар компютери шумо насб кунем, пас аз расмӣ дастурҳо. Баъдан, мо маҷмӯи файлҳои YAML эҷод мекунем. Ба ҷои муайян кардани арзишҳои мушаххас, мо ҷойгузинҳоро мегузорем, ки Ҳелм дар оянда онҳоро бо маълумот пур мекунад. Маҷмӯи чунин файлҳоро диаграммаи Ҳелм меноманд. Онро бо се роҳ ба муштарии консолии Helm фиристодан мумкин аст:

  • ҷузвдонеро бо қолабҳо нишон диҳед;
  • архивро ба .tar баста кунед ва ба он ишора кунед;
  • Шаблонро дар як анбори дурдаст ҷойгир кунед ва ба анбори муштарии Helm пайванд илова кунед.

Ба шумо инчунин файл бо арзишҳо лозим аст - values.yaml. Маълумот аз он ҷо ба қолаб ворид карда мешавад. Биёед онро низ созем.

Дастгоҳи Helm ва домҳои он
Версияи дуюми Helm дорои барномаи иловагии сервер - Tiller мебошад. Он берун аз Кубернетес овезон мешавад ва дархостҳои муштарии Helmро интизор аст ва ҳангоми занг задан арзишҳои лозимиро ба қолаб иваз мекунад ва онро ба Kubernetes мефиристад.

Дастгоҳи Helm ва домҳои он
Helm 3 соддатар аст: ба ҷои коркарди қолибҳо дар сервер, иттилоот ҳоло пурра дар тарафи муштарии Helm коркард карда мешавад ва мустақиман ба API Kubernetes фиристода мешавад. Ин соддагардонӣ амнияти кластерро беҳтар мекунад ва нақшаи паҳнкуниро осон мекунад.

Ҳамааш чӣ гуна кор мекунад

Фармонро иҷро кунед helm install. Биёед номи нашри барномаро нишон диҳем ва роҳро ба values.yaml диҳем. Дар охир мо анбореро, ки дар он диаграмма ҷойгир аст ва номи диаграммаро нишон медиҳем. Дар мисол инҳо мутаносибан "лмру" ва "бесчарт" мебошанд.

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

Фармонро танҳо як маротиба иҷро кардан мумкин аст, вақте ки ба ҷои он дубора иҷро мешавад install истифода бурдан лозим аст upgrade. Барои содда, ба ҷои ду фармон, шумо метавонед фармонро иҷро кунед upgrade бо калиди иловагӣ --install. Вақте ки бори аввал иҷро мешавад, Helm фармонро барои насб кардани релиз мефиристад ва дар оянда онро навсозӣ мекунад.

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

Мушкилоти ҷобаҷогузории версияҳои нави барнома бо Helm

Дар ин лаҳзаи ҳикоя, ман бо тамошобинон "Кӣ миллионер шудан мехоҳад" -ро бозӣ карда истодаам ва мо мефаҳмем, ки чӣ тавр Ҳелмро барои навсозии версияи барнома дастрас кунем. Видеоро тамошо кунед.

Вақте ки ман фаҳмидам, ки чӣ тавр Helm кор мекунад, ҳангоми кӯшиши нав кардани версияҳои барномаҳои иҷрошаванда аз рафтори аҷибе маро ба ҳайрат овард. Ман рамзи барномаро нав кардам, тасвири навро ба феҳристи Docker бор кардам, фармони густаришро фиристодам - ​​ва ҳеҷ чиз рӯй надодааст. Дар зер баъзе роҳҳои на он қадар муваффақи навсозии барномаҳо ҳастанд. Бо омӯхтани ҳар яки онҳо, шумо ба фаҳмидани сохтори дохилии асбоб ва сабабҳои ин рафтори норавшан шурӯъ мекунед.

Усули 1. Маълумотро пас аз оғози охирин тағир надиҳед

Чунон ки гуфта мешавад сомонаи расмӣ Ҳелм, "Диаграммаҳои Кубернетес метавонанд калон ва мураккаб бошанд, бинобар ин Ҳелм мекӯшад, ки ба чизе аз ҳад зиёд даст нарасонад." Аз ин рӯ, агар шумо версияи охирини тасвири барномаро дар феҳристи docker навсозӣ кунед ва фармонро иҷро кунед helm upgrade, он гоҳ ҳеҷ чиз рӯй нахоҳад дод. Ҳелм фикр мекунад, ки ҳеҷ чиз тағир наёфтааст ва барои навсозии барнома ба Кубернетес фармон фиристодан лозим нест.

Дар ин ҷо ва дар поён, барчаспҳои охирин танҳо ҳамчун намуна нишон дода шудаанд. Вақте ки шумо ин тегро муайян мекунед, Кубернетес ҳар дафъа новобаста аз параметри imagePullPolicy тасвирро аз феҳристи докер зеркашӣ мекунад. Истифодаи навтарин дар истеҳсолот номатлуб аст ва боиси оқибатҳои номатлуб аст.

Усули 2. Навсозии LABEL дар тасвир

Тавре ки дар ҳамон навишта шудааст хуччатхо, "Helm танҳо барномаро навсозӣ мекунад, агар он пас аз барориши охирин тағир ёбад." Варианти мантиқии ин ба назар чунин мерасад, ки LABEL дар худи тасвири докер навсозӣ мешавад. Аммо, Helm ба тасвирҳои барнома нигоҳ намекунад ва дар бораи тағирот дар онҳо тасаввурот надорад. Ҳамин тариқ, ҳангоми навсозии тамғакоғазҳо дар тасвир, Helm дар бораи онҳо намедонад ва фармони навсозии барнома ба Kubernetes фиристода намешавад.

Усули 3: Калидро истифода баред --force

Дастгоҳи Helm ва домҳои он
Биёед ба дастурҳо муроҷиат кунем ва калиди заруриро ҷустуҷӯ кунем. Калид бештар маъно дорад --force. Сарфи назар аз номи возеҳ, рафтор аз интизорӣ фарқ мекунад. Ба ҷои маҷбур кардани навсозии барнома, ҳадафи аслии он барқарор кардани релизест, ки дар ҳолати ноком аст. Агар шумо ин калидро истифода набаред, шумо бояд фармонҳоро пайдарпай иҷро кунед helm delete && helm install --replace. Тавсия дода мешавад, ки ба ҷои он калидро истифода баред --force, ки иҷрои пайдарпайи ин фармонҳоро автоматӣ мекунад. Маълумоти бештар дар ин дархост кашед. Барои он ки ба Ҳелм бигӯед, ки версияи барномаро навсозӣ кунад, мутаассифона, ин калид кор намекунад.

Усули 4. Тағйир додани тамғакоғазҳо бевосита дар Kubernetes

Дастгоҳи Helm ва домҳои он
Навсозии нишона бевосита дар кластер бо истифода аз фармон kubectl edit - фикри бад. Ин амал боиси номувофиқии маълумот байни замимаи иҷрошаванда ва барномае, ки дар ибтидо барои ҷойгиркунӣ фиристода шудааст, оварда мерасонад. Рафтори Helm ҳангоми ҷойгиркунӣ дар ин ҳолат аз версияи он фарқ мекунад: Helm 2 ҳеҷ кор намекунад ва Helm 3 версияи нави барномаро ҷойгир мекунад. Барои фаҳмидани сабаб, шумо бояд фаҳмед, ки Ҳелм чӣ гуна кор мекунад.

Ҳелм чӣ гуна кор мекунад?

Барои муайян кардани он, ки оё барнома пас аз барориши охиринаш тағир ёфтааст, Helm метавонад истифода барад:

  • татбиқи барнома дар Kubernetes;
  • арзишҳои нав.yaml ва диаграммаи ҷорӣ;
  • Маълумот дар бораи нашри дохилии Helm.

Барои кунҷкобу бештар: Ҳелм маълумоти дохилиро дар бораи релизҳо дар куҷо нигоҳ медорад?Бо иҷрои фармон helm history, мо ҳама маълумотро дар бораи версияҳое, ки бо истифода аз Helm насб карда шудаанд, мегирем.

Дастгоҳи Helm ва домҳои он
Инчунин дар бораи қолабҳо ва арзишҳои фиристодашуда маълумоти муфассал мавҷуд аст. Мо метавонем онро дархост кунем:

Дастгоҳи Helm ва домҳои он
Дар версияи дуюми Helm, ин маълумот дар ҳамон фазои ном, ки дар он Tiller кор мекунад (кубе-система ба таври нобаёнӣ), дар ConfigMap ҷойгир аст, ки бо нишони "OWNER=TILLER" ишора шудааст:

Дастгоҳи Helm ва домҳои он
Вақте ки версияи сеюми Helm пайдо шуд, маълумот ба махфӣ ва ба ҳамон фазои ном, ки барнома кор мекард, гузашт. Ба шарофати ин имкон пайдо шуд, ки якчанд замимаро дар як вақт дар фазои номҳои гуногун бо як номи релиз иҷро кунед. Дар версияи дуюм, вақте ки фазоҳои номҳо ҷудо мешаванд, аммо метавонанд ба ҳамдигар таъсир расонанд, дарди сари ҷиддӣ буд.

Дастгоҳи Helm ва домҳои он

Ҳелми дуюм, ҳангоми кӯшиши фаҳмидани он, ки оё навсозӣ лозим аст, танҳо ду манбаи иттилоотро истифода мебарад: он чизе, ки ҳоло ба он дода мешавад ва маълумоти дохилӣ дар бораи релизҳо, ки дар ConfigMap ҷойгир аст.

Дастгоҳи Helm ва домҳои он
Helm сеюм стратегияи сеҷонибаи якҷоякуниро истифода мебарад: илова бар ин маълумот, он инчунин барномаеро, ки ҳоло дар Кубернетес кор мекунад, ба назар мегирад.

Дастгоҳи Helm ва домҳои он
Аз ин сабаб, версияи кӯҳнаи Helm ҳеҷ кор намекунад, зеро он маълумоти барномаро дар кластер ба назар намегирад, аммо Helm 3 тағиротҳоро қабул мекунад ва барномаи навро барои ҷойгиркунӣ мефиристад.

Усули 5. Калиди --recreate-pods -ро истифода баред

Бо калид --recreate-pods шумо метавонед он чизеро, ки дар аввал ба нақша гирифта будед, бо калид ба даст оред --force. Контейнерҳо бозоғоз мешаванд ва мувофиқи imagePullPolicy: Ҳамеша сиёсати барчаспҳои охирин (бештар дар ин бора дар эзоҳ дар боло), Кубернетес версияи нави тасвирро зеркашӣ ва оғоз мекунад. Ин ба таври беҳтарин анҷом дода намешавад: бе назардошти намуди Стратегияи ҷойгиркунӣ, он ногаҳон ҳама намунаҳои кӯҳнаи барномаро хомӯш мекунад ва ба оғози нав оғоз мекунад. Ҳангоми бозоғозӣ, система кор намекунад, корбарон зарар мебинанд.

Дар худи Кубернетес низ чунин мушкилот муддати тӯлонӣ вуҷуд дошт. Ва ҳоло, 4 сол пас аз кушодашавӣ натиҷаи, мушкилот ҳал карда шуд ва аз версияи 1.15-и Kubernetes сар карда, қобилияти печонидан-бозоғоз кардан пайдо мешавад.

Helm танҳо ҳама барномаҳоро хомӯш мекунад ва контейнерҳои навро дар наздикӣ оғоз мекунад. Шумо инро дар истеҳсолот карда наметавонед, то боиси бекористии барнома нашавед. Ин танҳо барои эҳтиёҷоти рушд лозим аст ва онро танҳо дар муҳитҳои марҳилавӣ иҷро кардан мумкин аст.

Бо истифода аз Helm версияи барномаро чӣ гуна бояд навсозӣ кард?

Мо арзишҳои ба Helm фиристодашударо тағир медиҳем. Одатан, ин арзишҳое мебошанд, ки ба ҷои теги тасвир иваз карда мешаванд. Дар мавриди охирин, ки аксар вақт барои муҳити бесамар истифода мешавад, иттилооти тағирёбанда шарҳест, ки барои худи Кубернетес бефоида аст ва барои Ҳелм он ҳамчун сигнал барои зарурати навсозии барнома амал мекунад. Имкониятҳо барои пур кардани арзиши эзоҳ:

  1. Арзиши тасодуфӣ бо истифода аз функсияи стандартӣ - {{ randAlphaNum 6 }}.
    Огоҳӣ вуҷуд дорад: пас аз ҳар як ҷойгиркунӣ бо истифода аз диаграмма бо чунин тағирёбанда, арзиши эзоҳ беназир хоҳад буд ва Ҳелм тахмин мекунад, ки тағирот вуҷуд дорад. Маълум мешавад, ки мо ҳамеша барномаро бозоғоз мекунем, ҳатто агар мо версияи онро тағир надода бошем. Ин муҳим нест, зеро вақти бекорӣ вуҷуд нахоҳад дошт, аммо он ҳанӯз ҳам ногувор аст.
  2. Ҷориро часбонед сана ва вақт - {{ .Release.Date }}.
    Вариант ба арзиши тасодуфӣ бо тағирёбандаи доимии беназир монанд аст.
  3. Роҳи дурусттар истифода бурдани он аст маблағҳои назоратӣ. Ин SHA-и тасвир ё SHA-и охирин дар git аст - {{ .Values.sha }}.
    Онҳо бояд ҳисоб карда шаванд ва ба муштарии Ҳелм дар тарафи занг фиристода шаванд, масалан дар Ҷенкинс. Агар ариза тағир дода шуда бошад, пас маблағи назорат тағир меёбад. Аз ин рӯ, Helm барномаро танҳо ҳангоми зарурат навсозӣ мекунад.

Биёед кӯшишҳои худро ҷамъбаст кунем

  • Helm бо роҳи камтарин инвазивӣ тағирот ворид мекунад, аз ин рӯ ҳама гуна тағирот дар сатҳи тасвири барнома дар Реестри Docker боиси навсозӣ намешавад: пас аз иҷрои фармон ҳеҷ чиз рӯй нахоҳад дод.
  • Калидвожа --force барои барқарор кардани релизҳои мушкилот истифода мешавад ва бо навсозиҳои маҷбурӣ алоқаманд нест.
  • Калидвожа --recreate-pods барномаҳоро маҷбуран навсозӣ мекунад, аммо ин корро бо роҳи харобкор анҷом медиҳад: он ҳама контейнерҳоро ногаҳон хомӯш мекунад. Истифодабарандагон аз ин азоб мекашанд; шумо набояд дар истеҳсолот ин корро кунед.
  • Бо истифода аз фармон мустақиман ба кластери Kubernetes тағирот ворид кунед kubectl edit накунед: мо мувофиқатро вайрон мекунем ва рафтор вобаста ба версияи Helm фарқ мекунад.
  • Бо баровардани версияи нави Helm, бисёр нозукиҳо пайдо шуданд. Масъалаҳо дар анбори Helm бо забони возеҳ тасвир шудаанд, онҳо ба шумо дар фаҳмидани ҷузъиёт кӯмак мекунанд.
  • Илова кардани шарҳи таҳриршаванда ба диаграмма онро чандиртар мекунад. Ин ба шумо имкон медиҳад, ки барномаро бе вақти бекорӣ дуруст иҷро кунед.

Фикри «сулҳи ҷаҳон», ки дар ҳама соҳаҳои ҳаёт кор мекунад: дастурҳоро пеш аз истифода хонед, на баъд. Танҳо бо маълумоти мукаммал сохтани системаҳои боэътимод ва шод кардани корбарон имконпазир мегардад.

Дигар истинодҳои марбут:

  1. Шиносой бо Helm 3
  2. Вебсайти расмии Helm
  3. Анбори Helm дар GitHub
  4. 25 Асбобҳои муфиди Kubernetes: Ҷойгиркунӣ ва идоракунӣ

Ин гузориш бори аввал дар Конфронси @Kubernetes аз ҷониби Mail.ru Cloud Solutions. Нигоҳ кунед видео намоишҳои дигар ва ба эълонҳои чорабиниҳо дар Telegram обуна шавед Дар атрофи Kubernetes дар Mail.ru Group.

Манбаъ: will.com

Илова Эзоҳ