Уређај Хелм и његове замке

Уређај Хелм и његове замке
Концепт камиона Типхон, Антон Сванепоел

Моје име је Дмитриј Сугробов, ја сам програмер у Лерои Мерлин-у. У овом чланку ћу вам рећи зашто је Хелм потребан, како поједностављује рад са Кубернетес-ом, шта се променило у трећој верзији и како да га користите за ажурирање апликација у производњи без застоја.

Ово је резиме заснован на говору на конференцији @Кубернетес конференција by Маил.ру Цлоуд Солутионс — ако не желите да читате, погледајте видео.

Зашто користимо Кубернетес у производњи

Лерои Мерлин је лидер на малопродајном тржишту "уради сам" у Русији и Европи. Наша компанија има више од сто програмера, 33 интерних запослених и огроман број људи који посећују хипермаркете и веб страницу. Да бисмо их све учинили срећним, одлучили смо да следимо стандардне приступе у индустрији. Развити нове апликације користећи микросервисну архитектуру; користите контејнере да изолујете окружење и обезбедите правилну испоруку; и користите Кубернетес за оркестрацију. Цена коришћења оркестратора убрзано постаје јефтинија: број инжењера који познају ову технологију расте на тржишту, а појављују се провајдери који нуде Кубернетес као услугу.

Све што Кубернетес ради, наравно, може да се уради и на друге начине, на пример, прекривањем неких Џенкинса и доцкер-цомпосеа скриптама, али чему компликовати живот ако постоји готово и поуздано решење? Зато смо дошли у Кубернетес и већ годину дана га користимо у производњи. Тренутно имамо двадесет четири Кубернетес кластера, од којих је најстарији стар више од годину дана, са око две стотине махуна.

Проклетство великих ИАМЛ датотека у Кубернетесу

Да бисмо покренули микросервис у Кубернетес-у, креираћемо најмање пет ИАМЛ датотека: за Деплоимент, Сервице, Ингресс, ЦонфигМап, Сецретс - и послати их у кластер. За следећу апликацију ћемо написати исти пакет јамба, са трећом ћемо написати још један, и тако даље. Ако помножимо број докумената са бројем окружења, већ ћемо добити стотине датотека, а то још не узима у обзир динамичка окружења.

Уређај Хелм и његове замке
Адам Реесе, главни одржавалац Хелма, представио је концепт "Развојни циклус у Кубернетесу“, који изгледа овако:

  1. Копирај ИАМЛ - копирај ИАМЛ датотеку.
  2. Налепите ИАМЛ - залепите га.
  3. Поправи увлаке - поправи увлаке.
  4. Поновите - поновите поново.

Опција функционише, али морате више пута копирати ИАМЛ датотеке. Да би се променио овај циклус, измишљен је Хелм.

Шта је Хелм

Прво, Хелм - менаџер пакета, који вам помаже да пронађете и инсталирате програме који су вам потребни. Да бисте инсталирали, на пример, МонгоДБ, не морате да идете на званичну веб локацију и преузимате бинарне датотеке, само покрените команду helm install stable/mongodb.

Друго, Хелм - шаблон мотора, помаже да се параметризују датотеке. Вратимо се на ситуацију са ИАМЛ датотекама у Кубернетесу. Лакше је написати исту ИАМЛ датотеку, додати јој неке чуваре места, у које ће Хелм заменити вредности. Односно, уместо великог скупа скела, постојаће скуп шаблона у које ће тражене вредности бити замењене у право време.

Треће, Хелм - мајстор распоређивања. Помоћу њега можете инсталирати, вратити и ажурирати апликације. Хајде да схватимо како то да урадимо.

Уређај Хелм и његове замке

Како користити Хелм за постављање сопствених апликација

Хајде да инсталирамо Хелм клијент на ваш рачунар, пратећи званични инструкције. Затим ћемо креирати скуп ИАМЛ датотека. Уместо специфицирања специфичних вредности, оставићемо чуваре места, које ће Хелм у будућности попуњавати информацијама. Скуп таквих датотека назива се Хелм графикон. Може се послати клијенту Хелм конзоле на три начина:

  • означите фасциклу са шаблонима;
  • спакујте архиву у .тар и покажите на њу;
  • ставите шаблон у удаљено спремиште и додајте везу до спремишта у Хелм клијенту.

Такође вам је потребна датотека са вредностима - валуес.иамл. Подаци одатле ће бити уметнути у шаблон. Хајде да и то створимо.

Уређај Хелм и његове замке
Друга верзија Хелм-а има додатну серверску апликацију - Тиллер. Виси ван Кубернетес-а и чека на захтеве Хелм клијента, а када се позове, замењује потребне вредности у шаблон и шаље га Кубернетес-у.

Уређај Хелм и његове замке
Хелм 3 је једноставнији: уместо обраде шаблона на серверу, информације се сада у потпуности обрађују на страни Хелм клијента и шаљу директно у Кубернетес АПИ. Ово поједностављење побољшава безбедност кластера и олакшава шему увођења.

Како то све функционише

Покрените команду helm install. Хајде да означимо име издања апликације и дамо путању до вредности.иамл. На крају ћемо навести спремиште у коме се налази графикон и назив графикона. У примеру, то су „лмру“ и „бестцхарт“, респективно.

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

Команда се може извршити само једном, када се поново изврши install треба користити upgrade. Ради једноставности, уместо две команде, можете покренути команду upgrade са додатним кључем --install. Када се изврши први пут, Хелм ће послати команду за инсталирање издања и ажурираће га у будућности.

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

Замке примене нових верзија апликације са Хелм-ом

У овом тренутку приче, играм се са публиком Ко жели да буде милионер, а ми смишљамо како да натерамо Хелма да ажурира верзију апликације. Погледајте видео.

Када сам учио како Хелм функционише, изненадило ме је чудно понашање када сам покушавао да ажурирам верзије покренутих апликација. Ажурирао сам код апликације, поставио нову слику у Доцкер регистар, послао команду за примену - и ништа се није догодило. Испод су неки не сасвим успешни начини за ажурирање апликација. Детаљније проучавајући сваки од њих, почињете да разумете унутрашњу структуру инструмента и разлоге за ово неочигледно понашање.

Метод 1. Не мењајте информације од последњег покретања

Како пише званични сајт Хелм, „Кубернетес графикони могу бити велики и сложени, тако да Хелм покушава да ништа не додирује превише. Стога, ако ажурирате најновију верзију слике апликације у доцкер регистру и покренете команду helm upgrade, онда се ништа неће догодити. Хелм ће мислити да се ништа није променило и да нема потребе да шаље наредбу Кубернетесу да ажурира апликацију.

Овде и испод, најновија ознака је приказана искључиво као пример. Када наведете ову ознаку, Кубернетес ће преузети слику из доцкер регистра сваки пут, без обзира на параметар имагеПуллПолици. Коришћење најновије у производњи је непожељно и изазива нежељене ефекте.

Метод 2. Ажурирајте ЛАБЕЛ на слици

Како је написано у истом документација, „Хелм ће ажурирати апликацију само ако се променила од последњег издања.“ Чини се да је логична опција за ово ажурирање ЛАБЕЛ-а у самој доцкер слици. Међутим, Хелм не гледа у слике апликације и нема појма о било каквим променама на њима. Сходно томе, приликом ажурирања ознака на слици, Хелм неће знати за њих, а команда за ажурирање апликације неће бити послата Кубернетесу.

Метод 3: Користите кључ --force

Уређај Хелм и његове замке
Хајде да се окренемо приручницима и потражимо потребан кључ. Кључ има највише смисла --force. Упркос очигледном имену, понашање је другачије од очекиваног. Уместо присилног ажурирања апликације, његова права сврха је да врати издање које је у статусу ФАИЛЕД. Ако не користите овај тастер, потребно је да извршите команде узастопно helm delete && helm install --replace. Предлаже се да се уместо тога користи кључ --force, који аутоматизује секвенцијално извршавање ових команди. Више информација у овоме захтев за повлачењем. Да бисте рекли Хелму да ажурира верзију апликације, нажалост, овај кључ неће радити.

Метод 4. Промените ознаке директно у Кубернетесу

Уређај Хелм и његове замке
Ажурирање ознаке директно у кластеру помоћу команде kubectl edit - Лоша идеја. Ова радња ће довести до недоследности информација између покренуте апликације и оне која је првобитно послата на примену. Понашање Хелм-а током примене у овом случају се разликује од његове верзије: Хелм 2 неће урадити ништа, а Хелм 3 ће применити нову верзију апликације. Да бисте разумели зашто, морате разумети како Хелм функционише.

Како Хелм функционише?

Да би утврдио да ли се апликација променила од последњег издања, Хелм може да користи:

  • покретање апликације у Кубернетесу;
  • нове вредности.иамл и тренутни графикон;
  • Хелмове интерне информације о издању.

За оне знатижељније: где Хелм чува интерне информације о издањима?Извршавањем команде helm history, добићемо све информације о верзијама инсталираним помоћу Хелм-а.

Уређај Хелм и његове замке
Ту су и детаљне информације о послатим шаблонима и вредностима. Можемо затражити:

Уређај Хелм и његове замке
У другој верзији Хелм-а, ове информације се налазе у истом именском простору где је покренут Тиллер (подразумевано кубе-систем), у ЦонфигМап-у, означеном ознаком „ОВНЕР=ТИЛЛЕР“:

Уређај Хелм и његове замке
Када се појавила трећа верзија Хелм-а, информације су се преселиле у тајне, иу исти простор имена где је апликација била покренута. Захваљујући томе, постало је могуће покренути неколико апликација истовремено у различитим именским просторима са истим именом издања. У другој верзији то је била озбиљна главобоља када су простори имена изоловани, али могу утицати једни на друге.

Уређај Хелм и његове замке

Други Хелм, када покушава да схвати да ли је потребно ажурирање, користи само два извора информација: оно што му се сада пружа и интерне информације о издањима, које се налазе у ЦонфигМап-у.

Уређај Хелм и његове замке
Трећи Хелм користи тросмерну стратегију спајања: поред тих информација, узима у обзир и апликацију која је тренутно покренута у Кубернетесу.

Уређај Хелм и његове замке
Из тог разлога, стара верзија Хелм-а неће учинити ништа, јер не узима у обзир информације о апликацији у кластеру, али ће Хелм 3 примити измене и послати нову апликацију на примену.

Метод 5. Користите прекидач --рецреате-подс

Са кључем --recreate-pods можете постићи оно што сте првобитно планирали да постигнете помоћу кључа --force. Контејнери ће се поново покренути и, у складу са политиком имагеПуллПолици: Увек за најновију ознаку (више о томе у горњој фусноти), Кубернетес ће преузети и покренути нову верзију слике. Ово неће бити урађено на најбољи начин: без узимања у обзир СтратегиТипе имплементације, нагло ће искључити све старе инстанце апликације и почети да покреће нове. Током поновног покретања, систем неће радити, корисници ће патити.

У самом Кубернетесу, сличан проблем је такође постојао дуго времена. И сада, 4 године након отварања Питање, проблем је решен, а почевши од верзије 1.15 Кубернетеса, појављује се могућност поновног покретања подова.

Хелм једноставно искључује све апликације и покреће нове контејнере у близини. Не можете то да урадите у продукцији, како не бисте изазвали прекид рада апликације. Ово је потребно само за развојне потребе и може се изводити само у сценским окружењима.

Како ажурирати верзију апликације користећи Хелм?

Променићемо вредности које су послате Хелму. Обично су то вредности које се замењују уместо ознаке слике. У случају најновијег, који се често користи за непродуктивна окружења, променљива информација је напомена, која је бескорисна за сам Кубернетес, а за Хелм ће деловати као сигнал за потребу ажурирања апликације. Опције за попуњавање вредности напомене:

  1. Случајна вредност користећи стандардну функцију - {{ randAlphaNum 6 }}.
    Постоји упозорење: након сваке примене помоћу графикона са таквом променљивом, вредност напомене ће бити јединствена, а Хелм ће претпоставити да постоје промене. Испоставило се да ћемо увек поново покренути апликацију, чак и ако нисмо променили њену верзију. Ово није критично, јер неће бити застоја, али је и даље непријатно.
  2. Залепите струју Датум и време - {{ .Release.Date }}.
    Варијанта је слична случајној вредности са трајно јединственом променљивом.
  3. Исправнији начин је употреба контролне суме. Ово је СХА слике или СХА последњег урезивања у гит-у - {{ .Values.sha }}.
    Требаће их пребројати и послати Хелм клијенту на страни која позива, на пример у Џенкинсу. Ако се апликација променила, онда ће се променити контролни збир. Стога ће Хелм ажурирати апликацију само када је то потребно.

Хајде да сумирамо наше покушаје

  • Хелм прави промене на најмање инвазиван начин, тако да било каква промена на нивоу слике апликације у Доцкер регистру неће резултирати ажурирањем: ништа се неће догодити након што се наредба изврши.
  • Кључ --force користи се за враћање проблематичних издања и није повезан са принудним ажурирањима.
  • Кључ --recreate-pods ће насилно ажурирати апликације, али ће то учинити на вандалски начин: нагло ће искључити све контејнере. Корисници ће патити од овога; то не би требало да радите у производњи.
  • Директно извршите измене у Кубернетес кластеру користећи команду kubectl edit немојте: нарушићемо доследност, а понашање ће се разликовати у зависности од верзије Хелма.
  • Са издавањем нове верзије Хелм-а, појавиле су се многе нијансе. Проблеми у Хелм репозиторијуму су описани јасним језиком, они ће вам помоћи да разумете детаље.
  • Додавање напомене за уређивање графикону учиниће га флексибилнијим. Ово ће вам омогућити да правилно покренете апликацију, без застоја.

Мисао „светског мира“ која функционише у свим областима живота: прочитајте упутства пре употребе, а не после. Само уз потпуне информације биће могуће изградити поуздане системе и усрећити кориснике.

Друге повезане везе:

  1. Упознавање са кормило 3
  2. Званичан веб-сајт Хелм-а
  3. Хелм спремиште на ГитХуб-у
  4. 25 Корисни Кубернетес алати: примена и управљање

Овај извештај је први пут представљен на @Кубернетес конференција би Маил.ру Цлоуд Солутионс. Погледај видео остале представе и претплатите се на најаве догађаја на Телеграму Око Кубернетеса на Маил.ру Гроуп.

Извор: ввв.хабр.цом

Додај коментар