Соутхбридге у ​​Чељабинску и Битрикс у Кубернетесу

Састанци систем администратора Сисадминка се одржавају у Чељабинску, а на последњем сам дао извештај о нашем решењу за покретање апликација на 1Ц-Битриксу у Кубернетесу.

Битрикс, Кубернетес, Цепх - одлична мешавина?

Рећи ћу вам како смо саставили радно решење из свега овога.

Идемо!

Соутхбридге у ​​Чељабинску и Битрикс у Кубернетесу

Састанак је одржан 18. априла у Чељабинску. О нашим сусретима можете прочитати на Тимепад и погледај ЈуТјуб.

Ако желите да нам дођете са извештајем или као слушалац - добродошли, пишите [емаил заштићен] и на Телеграму т.ме/вадимисаканов.

Мој извештај

Соутхбридге у ​​Чељабинску и Битрикс у Кубернетесу

Слајдови

Решење „Битрикс у Кубернетесу, верзија Соутхбридге 1.0“

Говорићу о нашем решењу у формату „за лутке у Кубернетес“, као што је урађено на састанку. Али претпостављам да знате речи Битрикс, Докер, Кубернетес, Цеф бар на нивоу чланака на Википедији.

Шта је спремно за Битрик у Кубернетесу?

На целом Интернету има врло мало информација о раду Битрикс апликација у Кубернетесу.
Нашао сам само ове материјале:

Извештај Александра Сербула, 1Ц-Битрик, и Антона Тузлукова из Ксофта:

Препоручујем да га послушате.

Развијање сопственог решења од корисника серкирон на Хабреу.
Пронађено више такву одлуку.

Ааа... заправо, то је све.

Упозоравам вас, нисмо проверили квалитет решења на линковима изнад :)
Иначе, када сам припремао наше решење, разговарао сам са Александром Сербулом, тада се његов извештај још није појавио, тако да у мојим слајдовима постоји ставка „Битрик не користи Кубернетес“.

Али већ постоји много готових Доцкер слика за покретање Битрикса у Доцкер-у: https://hub.docker.com/search?q=bitrix&type=image

Да ли је ово довољно за креирање комплетног решења за Битрикс у Кубернетесу?
Не. Постоји велики број проблема које треба решити.

Који су проблеми са Битрикс-ом у Кубернетесу?

Прво, готове слике из Доцкерхуб-а нису погодне за Кубернетес

Ако желимо да изградимо архитектуру микросервиса (а у Кубернетесу то обично радимо), морамо да одвојимо нашу Кубернетес апликацију у контејнере и да сваки контејнер обавља једну малу функцију (и то добро). Зашто само један? Укратко, што једноставније, то поузданије.
Да бисте били прецизнији, погледајте овај чланак и видео, молимо вас: https://habr.com/ru/company/southbridge/blog/426637/

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

Друго - код сајта се уређује са административног панела

Направили смо нови одељак на сајту - код је ажуриран (додан је директоријум са именом новог одељка).

Ако сте променили својства компоненте са административног панела, код се променио.

Кубернетес „подразумевано“ не може да ради са овим контејнерима;

Разлог: Сваки контејнер (под) у кластеру обрађује само део саобраћаја. Ако промените код само у једном контејнеру (под), онда ће код бити другачији у различитим подовима, сајт ће радити другачије, а различите верзије сајта ће бити приказане различитим корисницима. Не можеш тако живети.

Треће - потребно је да решите проблем са распоређивањем

Ако имамо монолит и један „класични“ сервер, све је прилично једноставно: постављамо нову базу кода, мигрирамо базу података, пребацимо саобраћај на нову верзију кода. Пребацивање се дешава тренутно.
Ако имамо сајт у Кубернетесу, исечен на микросервисе, има пуно контејнера са кодом - ох. Потребно је да сакупите контејнере са новом верзијом кода, да их избаците уместо старих, да исправно мигрирате базу података и идеално да то урадите непримећено од стране посетилаца. На срећу, Кубернетес нам помаже у томе, подржавајући читав низ различитих типова примене.

Четврто - потребно је да решите питање складиштења статике

Ако је ваша веб локација „само“ 10 гигабајта и у потпуности је примените у контејнерима, на крају ћете имати контејнере од 10 гигабајта којима је потребно вечно да се примене.
Морате да складиштите „најтеже“ делове сајта ван контејнера и поставља се питање како то исправно урадити

Шта недостаје нашем решењу?

Цео Битрикс код није подељен на микрофункције/микросервисе (тако да је регистрација одвојена, модул онлајн продавнице је одвојен итд.). Чувамо целу базу кода у сваком контејнеру.

Такође не складиштимо базу података у Кубернетес-у (и даље сам имплементирао решења са базом података у Кубернетес-у за развојна окружења, али не и за производњу).

Администратори сајта ће и даље приметити да сајт ради на Кубернетес-у. Функција „провера система“ не ради исправно да бисте изменили код сајта са административног панела, прво морате да кликнете на дугме „Желим да уредим код“.

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

архитектура

Постоји много „радних“ подова са веб сервером (радници).
Један испод са црон задацима (потребан је само један).
Једна надоградња за уређивање кода сајта са административног панела (такође је потребна само једна).

Соутхбридге у ​​Чељабинску и Битрикс у Кубернетесу

Решавамо питања:

  • Где да складиштите сесије?
  • Где чувати кеш меморију?
  • Где чувати статику, а не стављати гигабајте статике у гомилу контејнера?
  • Како ће функционисати база података?

Доцкер слика

Почињемо са изградњом Доцкер слике.

Идеална опција је да имамо једну универзалну слику, на основу које добијамо воркер подове, подове са Цронтаскс-има, и упграде подове.

Направили смо управо такву слику.

Укључује нгинк, апацхе/пхп-фпм (може се изабрати током изградње), мсмтп за слање поште и црон.

Приликом састављања слике, цела база кода сајта се копира у /апп директоријум (са изузетком оних делова које ћемо преместити у засебно заједничко складиште).

Микроуслуге, услуге

радничке махуне:

  • Контејнер са нгинк + контејнер апацхе/пхп-фпм + мсмтп
  • Није успело преместити мсмтп у засебну микросервис, Битрикс почиње да се љути што не може директно да шаље пошту
  • Сваки контејнер има комплетну кодну базу.
  • Забрана промене кода у контејнерима.

црон испод:

  • контејнер са апацхе, пхп, црон
  • комплетна база кодова укључена
  • забрана промене кода у контејнерима

надоградите под:

  • нгинк контејнер + апацхе/пхп-фпм контејнер + мсмтп
  • Не постоји забрана промене кода у контејнерима

складиштење сесије

Битрик кеш складиште

Још једна важна ствар: лозинке за повезивање са свиме, од базе података до поште, чувамо у кубернетес тајнама. Добијамо бонус: лозинке су видљиве само онима којима дамо приступ тајнама, а не свима који имају приступ бази кодова пројекта.

Складиште за статику

Можете користити било шта: цепх, нфс (али не препоручујемо нфс за производњу), мрежно складиште од добављача у облаку итд.

Складиште ће морати да буде повезано у контејнерима са /уплоад/ директоријумом сајта и другим директоријумима са статичним садржајем.

База података

Ради једноставности, препоручујемо да преместите базу података ван Кубернетеса. База у Кубернетесу је посебан сложен задатак, он ће схему учинити за ред величине сложенијом.

Складиштење сесије

Користимо мемцацхед :)

Добро рукује складиштењем сесије, груписан је и подржан је „природно“ као сессион.саве_патх у пхп-у. Овакав систем је више пута тестиран у класичној монолитној архитектури, када смо градили кластере са великим бројем веб сервера. За распоређивање користимо кормило.

$ helm install stable/memcached --name session

пхп.ини - овде слика садржи подешавања за чување сесија у мемцацхед-у

Користили смо променљиве окружења да пренесемо податке о хостовима са мемцацхед-ом https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/.
Ово вам омогућава да користите исти код у дев, стаге, тест, прод окружењима (мемцацхед имена хостова у њима ће бити различита, тако да морамо да проследимо јединствено име хоста за сесије сваком окружењу).
Битрик кеш складиште

Потребно нам је складиште отпорно на грешке у које сви подови могу писати и читати из њих.

Такође користимо мемцацхед.
Ово решење препоручује сам Битрикс.

$ helm install stable/memcached --name cache

битрик/.сеттингс_ектра.пхп - овде у Битрик-у је наведено где се чува кеш меморија

Такође користимо варијабле окружења.

Кронтаски

Постоје различити приступи покретању Цронтаскс-а у Кубернетесу.

  • одвојена имплементација са модулом за покретање Цронтаскса
  • цроњоб за извршавање цронтаскс-а (ако је ово веб апликација - са вгет https://$host$cronjobname, или кубецтл екец унутар једног од радних модула, итд.)
  • итд

Можете се расправљати о најтачнијем, али у овом случају смо изабрали опцију „одвојено распоређивање са подовима за Цронтаскс“

Како се то ради:

  • додајте црон задатке преко ЦонфигМап-а или преко датотеке цонфиг/аддцрон
  • у једном случају покрећемо контејнер идентичан Воркер под + дозвољавамо извршавање крунских задатака у њему
  • користи се иста база кода, захваљујући унифицирању, монтажа контејнера је једноставна

Шта добро добијамо:

  • имамо Цронтаскс који ради у окружењу идентичном окружењу програмера (доцкер)
  • Цронтаскс не треба да се „преписује“ за Кубернетес, они раде у истом облику и у истој бази кода као и раније
  • црон задатке могу да додају сви чланови тима са правима урезивања у производну грану, а не само администратори

Соутхбридге К8СДеплои модул и уређивање кода са административног панела

Говорили смо о надоградњи испод?
Како тамо усмерити саобраћај?
Ура, написали смо модул за ово у ПХП-у :) Ово је мали класични модул за Битрикс. Још увек није јавно доступан, али планирамо да га отворимо.
Модул је инсталиран као обичан модул у Битриксу:

Соутхбридге у ​​Чељабинску и Битрикс у Кубернетесу

А то изгледа овако:

Соутхбридге у ​​Чељабинску и Битрикс у Кубернетесу

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

Када се промене заврше, потребно је да кликнете на гит пусх, промене кода ће бити послате у гит, а затим ће систем направити слику са новом верзијом кода и „развући“ је у кластер, замењујући старе подове .

Да, то је мало штака, али у исто време одржавамо архитектуру микросервиса и не одузимамо корисницима Битрикса њихову омиљену прилику да исправе код са административног панела. На крају, ово је опција коју можете решити проблем уређивања кода на другачији начин.

Хелм цхарт

Да бисмо направили апликације на Кубернетес-у, обично користимо менаџер пакета Хелм.
За наше Битрик решење у Кубернетесу, Сергеј Бондарев, наш водећи систем администратор, написао је посебан Хелм графикон.

Прави воркер, уграде, црон подове, конфигурише улазе, услуге и преноси варијабле из Кубернетес тајни у подове.

Ми чувамо код у Гитлабу, а такође покрећемо Хелм буилд из Гитлаба.

Укратко, то изгледа овако

$ helm upgrade --install project .helm --set image=registrygitlab.local/k8s/bitrix -f .helm/values.yaml --wait --timeout 300 --debug --tiller-namespace=production

Хелм вам такође омогућава да извршите „беспрекорно“ враћање ако изненада нешто пође наопако током примене. Лепо је када нисте у паници „поправите код преко фтп-а јер је уређај пао“, али Кубернетес то ради аутоматски и без застоја.

Развити

Да, ми смо фанови Гитлаба & Гитлаб ЦИ, користимо га :)
Када се у Гитлабу обавеже на репозиторијум пројекта, Гитлаб покреће цевовод који примењује нову верзију окружења.

Фазе:

  • буилд (изградња нове Доцкер слике)
  • тест (тестирање)
  • очистити (уклањање окружења за тестирање)
  • пусх (шаљемо га у Доцкер регистар)
  • деплои (ми примењујемо апликацију у Кубернетес преко Хелм-а).

Соутхбридге у ​​Чељабинску и Битрикс у Кубернетесу

Ура, спремно је, хајде да га применимо!
Па, или постављајте питања ако их има.

Па шта смо урадили

Са техничке тачке гледишта:

  • доцкеризед Битрик;
  • „исећи“ Битрикс на контејнере, од којих сваки обавља минимум функција;
  • постигнуто стање контејнера без држављанства;
  • решио проблем са ажурирањем Битрикса у Кубернетесу;
  • све функције Битрикса су наставиле да раде (скоро све);
  • Радили смо на имплементацији на Кубернетес и враћању између верзија.

Са пословне тачке гледишта:

  • толеранција грешака;
  • Кубернетес алати (једноставна интеграција са Гитлаб ЦИ, беспрекорна примена, итд.);
  • тајне лозинке (видљиве само онима којима је директно одобрен приступ лозинкама);
  • Погодно је креирати додатна окружења (за развој, тестове, итд.) у оквиру једне инфраструктуре.

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

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