Southbridge дар Челябинск ва Bitrix дар Кубернетес

Дар Челябинск вохӯриҳои маъмурони системаҳои Sysadminka ҷараён доранд ва дар охир ман дар бораи ҳалли мо барои иҷрои барномаҳо дар 1C-Bitrix дар Кубернетес гузориш додам.

Bitrix, Kubernetes, Ceph - омехтаи олӣ?

Ман ба шумо мегӯям, ки чӣ гуна мо ҳалли кориро аз ин ҳама якҷоя мекунем.

Биёед биравем!

Southbridge дар Челябинск ва Bitrix дар Кубернетес

Мулокот 18 апрель дар Челябинск барпо гардид. Шумо метавонед дар бораи вохӯриҳои мо дар ин ҷо бихонед Вақтсанҷи ва назар YouTube.

Агар хоҳед, ки бо гузориш ё ҳамчун шунаванда ба мо биёед - хуш омадед, нависед [почтаи электронӣ ҳифз карда шудааст] ва дар Telegram t.me/vadimisakanov.

Ҳисоботи ман

Southbridge дар Челябинск ва Bitrix дар Кубернетес

Слайдҳо

Ҳалли "Bitrix дар Kubernetes, версияи Southbridge 1.0"

Ман дар бораи ҳалли мо дар формати "барои dummies дар Кубернетес", тавре ки дар вохӯрӣ анҷом дода шуд, сӯҳбат мекунам. Аммо ман фикр мекунам, ки шумо калимаҳои Bitrix, Docker, Kubernetes, Ceph-ро ҳадди аққал дар сатҳи мақолаҳои Википедия медонед.

Дар бораи Bitrix дар Кубернетес чӣ омода аст?

Дар тамоми Интернет дар бораи кори замимаҳои Bitrix дар Kubernetes маълумоти хеле кам мавҷуд аст.
Ман танҳо ин маводҳоро ёфтам:

Гузориш аз ҷониби Александр Сербул, 1C-Bitrix ва Антон Тузлуков аз Qsoft:

Ман тавсия медиҳам, ки онро гӯш кунед.

Таҳияи ҳалли худ аз корбар серкирон дар Хабре.
Бештар ёфт чунин карор.

Aaand... дар асл, ҳамааш ҳамин аст.

Ман шуморо огоҳ мекунам, ки мо сифати қарорҳоро дар истинодҳои боло тафтиш накардаем :)
Дар омади гап, ҳангоми омода кардани ҳалли мо, ман бо Александр Сербул сӯҳбат кардам, пас гузориши ӯ ҳанӯз пайдо нашуда буд, аз ин рӯ дар слайдҳои ман банди "Bitrix Kubernetes-ро истифода намебарад" мавҷуд аст.

Аммо аллакай бисёр тасвирҳои тайёри Docker барои иҷро кардани Bitrix дар Docker мавҷуданд: https://hub.docker.com/search?q=bitrix&type=image

Оё ин барои эҷоди як ҳалли мукаммал барои Bitrix дар Кубернетес кофӣ аст?
Не. Шумораи зиёди проблемахое хастанд, ки бояд хал карда шаванд.

Мушкилот бо Bitrix дар Kubernetes кадомҳоянд?

Аввалан, тасвирҳои тайёр аз Dockerhub барои Kubernetes мувофиқ нестанд

Агар мо мехоҳем, ки меъмории микросервисҳоро созем (ва дар Кубернетес мо одатан ин корро мекунем), мо бояд барномаи Kubernetes-и худро ба контейнерҳо ҷудо кунем ва ҳар як контейнер як вазифаи хурдро иҷро кунад (ва онро хуб иҷро кунад). Чаро танҳо як? Хулоса, чӣ қадар соддатар бошад, ҳамон қадар боэътимодтар аст.
Барои дақиқтар будан, ин мақола ва видеоро тамошо кунед, лутфан: https://habr.com/ru/company/southbridge/blog/426637/

Тасвирҳои Docker дар Dockerhub асосан аз рӯи принсипи ҳама дар як сохта шудаанд, аз ин рӯ ба мо лозим омад, ки велосипеди худро созем ва ҳатто аз сифр тасвирҳо созем.

Дуюм - рамзи сайт аз панели администратор таҳрир карда мешавад

Мо дар сайт як бахши нав таъсис додем - код нав карда шуд (феҳрист бо номи бахши нав илова карда шуд).

Агар шумо хосиятҳои ҷузъро аз панели администратор иваз карда бошед, код тағйир ёфт.

Kubernetes "бо нобаёнӣ" бо ин кор карда наметавонад; контейнерҳо бояд бидуни шаҳрвандӣ бошанд.

Сабаб: Ҳар як контейнер (под) дар кластер танҳо як қисми трафикро коркард мекунад. Агар шумо кодро танҳо дар як контейнер (под) иваз кунед, он гоҳ код дар подкӯҳҳои гуногун фарқ мекунад, сайт ба таври дигар кор мекунад ва версияҳои гуногуни сайт ба корбарони гуногун нишон дода мешаванд. Шумо ин тавр зиндагӣ карда наметавонед.

Сеюм - шумо бояд масъаларо бо ҷойгиркунӣ ҳал кунед

Агар мо як сервери монолитӣ ва як сервери "классикӣ" дошта бошем, ҳама чиз хеле оддӣ аст: мо пойгоҳи нави кодро ҷойгир мекунем, пойгоҳи додаҳоро интиқол медиҳем, трафикро ба версияи нави код иваз мекунем. Гузариш фавран ба амал меояд.
Агар мо дар Кубернетес сайте дошта бошем, ки ба микросервисҳо бурида шудаем, контейнерҳои зиёде бо код мавҷуданд - oh. Ба шумо лозим аст, ки контейнерҳоро бо версияи нави код ҷамъ кунед, онҳоро ба ҷои зарфҳои кӯҳна паҳн кунед, пойгоҳи додаҳоро дуруст интиқол диҳед ва идеалӣ ин корро аз ҷониби меҳмонон нодида анҷом диҳед. Хушбахтона, Кубернетес ба мо дар ин кор кӯмак мекунад ва як қатор намудҳои гуногуни ҷойгиркуниро дастгирӣ мекунад.

Чорум - шумо бояд масъалаи нигоҳдории статикаро ҳал кунед

Агар сайти шумо "танҳо" 10 гигабайт бошад ва шумо онро комилан дар контейнерҳо ҷойгир кунед, шумо бо контейнерҳои 10 гигабайтӣ хоҳед ёфт, ки барои ҷойгиркунии онҳо абадан лозим аст.
Ба шумо лозим аст, ки қисмҳои "вазнинтарин" -и сайтро берун аз контейнерҳо нигоҳ доред ва саволе ба миён меояд, ки чӣ гуна ин корро дуруст кардан лозим аст.

Дар ҳалли мо чӣ намерасад?

Тамоми рамзи Bitrix ба микрофунксияҳо/микросервисҳо тақсим карда нашудааст (то бақайдгирӣ алоҳида, модули мағозаи онлайн ҷудо аст ва ғайра). Мо тамоми пойгоҳи кодро дар ҳар як контейнер нигоҳ медорем.

Мо инчунин пойгоҳи додаҳоро дар Kubernetes нигоҳ намедорем (ман то ҳол ҳалли худро бо пойгоҳи додаҳо дар Kubernetes барои муҳити рушд татбиқ мекардам, аммо на барои истеҳсол).

Ба маъмурони сайт ҳанӯз маълум хоҳад шуд, ки сайт дар Kubernetes кор мекунад. Функсияи "тафтиши система" дуруст кор намекунад; барои таҳрир кардани коди сайт аз панели администратор, шумо бояд аввал тугмаи "Ман мехоҳам кодро таҳрир кунам" -ро пахш кунед.

Мушкилот муайян карда шуданд, зарурати татбиқи микросервисҳо муайян карда шуд, ҳадаф равшан аст - ба даст овардани системаи корӣ барои иҷро кардани замимаҳо дар Bitrix дар Kubernetes, ки ҳам қобилиятҳои Bitrix ва ҳам бартариҳои Кубернетесро нигоҳ медорад. Биёед татбиқро оғоз кунем.

меъморӣ

Бисёр подкастҳои "кор" бо веб-сервер мавҷуданд (коргарон).
Яке аз зери вазифаҳои cron (танҳо як лозим аст).
Як навсозӣ барои таҳрир кардани коди сайт аз панели администратор (инчунин танҳо як навсозӣ лозим аст).

Southbridge дар Челябинск ва Bitrix дар Кубернетес

Мо саволҳоро ҳал мекунем:

  • Сеансҳоро дар куҷо нигоҳ доштан мумкин аст?
  • Дар куҷо нигоҳ доштани кэш?
  • Дар куҷо нигоҳ доштани статикӣ, на барои ҷойгир кардани гигабайтҳои статикӣ дар як хӯшаи контейнер?
  • Пойгоҳи додаҳо чӣ гуна кор хоҳад кард?

Тасвири Docker

Мо аз сохтани тасвири Docker оғоз мекунем.

Варианти идеалӣ ин аст, ки мо як тасвири универсалӣ дорем, ки дар асоси он мо қуттиҳои коргарӣ, подкастаҳо бо Crontasks ва навсозӣ ба даст меорем.

Мо маҳз ҳамин гуна тасвирро офаридаем.

Он nginx, apache/php-fpm (ҳангоми сохтан интихоб кардан мумкин аст), msmtp барои фиристодани почта ва cron иборат аст.

Ҳангоми васл кардани тасвир, тамоми пойгоҳи коди сайт ба директорияи /app нусхабардорӣ карда мешавад (ба истиснои он қисмҳое, ки мо ба анбори алоҳидаи муштарак мегузарем).

Микросервисҳо, хидматҳо

қуттиҳои коргар:

  • Контейнер бо nginx + контейнер apache/php-fpm + msmtp
  • Гузаронидани msmtp ба як хидматрасонии алоҳида кор наёфт, Bitrix ба хашм меояд, ки вай мустақиман почта фиристода наметавонад
  • Ҳар як контейнер дорои пойгоҳи пурраи код мебошад.
  • Манъи тағир додани код дар контейнерҳо.

cron зери:

  • контейнер бо apache, php, cron
  • базаи пурраи код дохил карда шудааст
  • манъ кардани тағир додани код дар контейнерҳо

навсозӣ дар зери:

  • контейнери nginx + контейнери apache/php-fpm + msmtp
  • Дар контейнерҳо тағир додани код манъ нест

нигаҳдории сессия

Нигоҳдории кэш Bitrix

Чизи дигари муҳим: мо паролҳоро барои пайвастшавӣ ба ҳама чиз, аз базаи маълумот то почта, дар сирри kubernetes нигоҳ медорем. Мо бонус мегирем: паролҳо танҳо ба онҳое намоёнанд, ки мо ба сирри онҳо дастрасӣ медиҳем, на ба ҳама онҳое, ки ба пойгоҳи коди лоиҳа дастрасӣ доранд.

Захира барои статика

Шумо метавонед ҳама чизро истифода баред: ceph, nfs (аммо мо nfs-ро барои истеҳсол тавсия намедиҳем), нигаҳдории шабака аз провайдерҳои абрӣ ва ғайра.

Нигоҳдорӣ бояд дар контейнерҳо ба феҳристи /upload/ сайт ва дигар директорияҳои дорои мундариҷаи статикӣ пайваст карда шавад.

Пойгоҳи додаҳо

Барои соддагӣ, мо тавсия медиҳем, ки пойгоҳи додаҳоро берун аз Кубернетес интиқол диҳед. Пойгоҳ дар Кубернетес як вазифаи мураккаби алоҳида аст; он схемаро фармоиши миқёси мураккабтар мекунад.

Нигоҳдории сессия

Мо memcached-ро истифода мебарем :)

Он нигаҳдории сессияро хуб идора мекунад, кластер шудааст ва ҳамчун session.save_path дар php "ба таври маҳаллӣ" дастгирӣ мешавад. Чунин система борҳо дар меъмории классикии монолитӣ санҷида шудааст, вақте ки мо кластерҳоро бо шумораи зиёди веб-серверҳо сохтаем. Барои ҷойгиркунӣ мо чархро истифода мебарем.

$ helm install stable/memcached --name session

php.ini - дар ин ҷо тасвир дорои танзимот барои нигоҳ доштани сессияҳо дар memcached

Мо тағирёбандаҳои муҳити зистро барои интиқоли маълумот дар бораи ҳостҳо бо memcached истифода бурдем https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/.
Ин ба шумо имкон медиҳад, ки ҳамон кодро дар муҳити таҳия, саҳна, озмоиш, истеҳсолот истифода баред (номҳои мизбони хотиравӣ дар онҳо гуногун хоҳанд буд, аз ин рӯ мо бояд номи хоси ҳост барои сессияҳо ба ҳар як муҳит гузарем).
Нигоҳдории кэш Bitrix

Мо ба анборе, ки ба хатогиҳо тобовар лозим аст, ки ҳама поддонҳо метавонанд ба он нависед ва аз он хонанд.

Мо инчунин memcached-ро истифода мебарем.
Ин ҳалли худро худи Bitrix тавсия медиҳад.

$ helm install stable/memcached --name cache

bitrix/.settings_extra.php - дар ин ҷо дар Bitrix муайян карда мешавад, ки кэш дар куҷо нигоҳ дошта мешавад

Мо инчунин тағирёбандаҳои муҳити атрофро истифода мебарем.

Кронтаски

Барои иҷро кардани Crontasks дар Kubernetes равишҳои гуногун мавҷуданд.

  • љойгиркунии алоњида бо pod барои иҷро Crontasks
  • cronjob барои иҷрои crontasks (агар ин веб-барнома бошад - бо wget https://$host$cronjobname, ё kubectl exec дар дохили яке аз қуттиҳои коргар ва ғ.)
  • ва ѓайра

Шумо метавонед дар бораи дурусттаринаш баҳс кунед, аммо дар ин ҳолат мо варианти "ҷойгиркунии алоҳида бо подкҳо барои Crontasks" -ро интихоб кардем.

Инро чӣ тавр бояд кард:

  • тавассути ConfigMap ё тавассути файли config/addcron вазифаҳои cron илова кунед
  • дар як маврид мо контейнереро ба кор меандозем, ки ба қуттии коргар монанд аст + барои иҷрои вазифаҳои тоҷ дар он имкон медиҳад
  • ҳамон як пойгоҳи код истифода мешавад, ба шарофати муттаҳидшавӣ, васлкунии контейнер оддӣ аст

Мо чӣ хуб мегирем:

  • мо Crontasks дар муҳити шабеҳ ба муҳити таҳиягарон (докер) кор мекунем
  • Crontaskҳоро барои Kubernetes "аз нав навиштан" лозим нест, онҳо дар ҳамон шакл ва дар ҳамон пойгоҳи коди қаблӣ кор мекунанд
  • Вазифаҳои cron метавонанд аз ҷониби ҳамаи аъзоёни даста бо ҳуқуқ ба соҳаи истеҳсолот илова карда шаванд, на танҳо маъмурон

Модули Southbridge K8SDeploy ва таҳрири код аз панели администратор

Мо дар бораи навсозӣ дар назди?
Чӣ тавр ҳаракатро ба он ҷо равона кардан мумкин аст?
Хуррей, мо барои ин дар PHP модул навиштем :) Ин як модули классикии хурд барои Bitrix аст. Он ҳанӯз дастрас нест, аммо мо нақша дорем, ки онро боз кунем.
Модул ҳамчун модули муқаррарӣ дар Bitrix насб карда шудааст:

Southbridge дар Челябинск ва Bitrix дар Кубернетес

Ва чунин ба назар мерасад:

Southbridge дар Челябинск ва Bitrix дар Кубернетес

Он ба шумо имкон медиҳад, ки кукиеро насб кунед, ки маъмури сайтро муайян мекунад ва ба Kubernetes имкон медиҳад, ки трафикро ба поди навсозӣ фиристад.

Вақте ки тағиротҳо ба итмом мерасанд, шумо бояд тугмаи git push -ро клик кунед, тағиротҳои код ба git фиристода мешаванд, пас система бо версияи нави код тасвир эҷод мекунад ва онро дар саросари кластер иваз карда, қуттиҳои кӯҳнаро иваз мекунад. .

Бале, ин як каме мушкил аст, аммо дар айни замон мо меъмории микросервисро нигоҳ медорем ва аз корбарони Bitrix имконияти дӯстдоштаи онҳоро барои ислоҳи код аз панели маъмурӣ маҳрум намекунем. Дар ниҳоят, ин вариант аст; шумо метавонед мушкилоти таҳрири кодро бо роҳи дигар ҳал кунед.

Диаграммаи руль

Барои сохтани барномаҳо дар Kubernetes, мо маъмулан мудири бастаи Helm -ро истифода мебарем.
Барои ҳалли Bitrix мо дар Кубернетес, Сергей Бондарев, мудири пешбари система, диаграммаи махсуси Helm навишт.

Он қуттиҳои коргарӣ, ugrade, cron месозад, воридшавӣ, хидматҳоро танзим мекунад ва тағирёбандаҳоро аз сирри Kubernetes ба pods интиқол медиҳад.

Мо кодро дар Gitlab нигоҳ медорем ва инчунин сохтани Helm-ро аз Gitlab иҷро мекунем.

Хулоса, чунин ба назар мерасад

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

Helm инчунин ба шумо имкон медиҳад, ки ҳангоми ҷойгиркунӣ ногаҳон чизе хато кунад. Вақте ки шумо дар воҳима набошед, "рамзро тавассути ftp ислоҳ кунед, зеро маҳсулот афтод," хуб аст, аммо Кубернетес ин корро ба таври худкор ва бидуни таъхир анҷом медиҳад.

Ҷойгир кардан

Бале, мо мухлисони Gitlab & Gitlab CI ҳастем, мо онро истифода мебарем :)
Ҳангоми ворид шудан дар Gitlab ба анбори лоиҳа, Gitlab лӯлаеро оғоз мекунад, ки версияи нави муҳити атрофро ҷойгир мекунад.

Марҳилаҳо:

  • сохтан (сохтани тасвири нави Docker)
  • озмоиш (озмоиш)
  • тоза кардан (нест кардани муҳити санҷиш)
  • push (мо онро ба феҳристи Docker мефиристем)
  • ҷойгир кунед (мо барномаро тавассути Helm ба Kubernetes ҷойгир мекунем).

Southbridge дар Челябинск ва Bitrix дар Кубернетес

Оре, тайёр аст, амалй мекунем!
Хуб, ё саволҳо пурсед, агар ягон чиз вуҷуд дошта бошад.

Пас, мо чӣ кор кардем

Аз нуқтаи назари техникӣ:

  • Bitrix докеронидашуда;
  • Bitrix -ро ба контейнерҳо "буред", ки ҳар яки онҳо ҳадди аққал вазифаҳоро иҷро мекунанд;
  • ба даст овардани ҳолати бидуни шаҳрвандӣ контейнерҳо;
  • мушкилотро бо навсозии Bitrix дар Kubernetes ҳал кард;
  • тамоми функсияҳои Bitrix корашро идома доданд (қариб ҳама);
  • Мо дар бораи ҷойгиркунӣ ба Kubernetes ва бозгашт байни версияҳо кор кардем.

Аз нуқтаи назари тиҷорат:

  • таҳаммулпазирии хатогиҳо;
  • Асбобҳои Kubernetes (ҳамгироии осон бо Gitlab CI, ҷойгиркунии бефосила ва ғайра);
  • паролҳои махфӣ (танҳо ба онҳое, ки бевосита ба паролҳо дастрасӣ доранд, намоён аст);
  • Эҷоди муҳити иловагӣ (барои таҳия, озмоишҳо ва ғайра) дар як инфрасохтори ягона қулай аст.

Манбаъ: will.com

Илова Эзоҳ