Southbridge f'Chelyabinsk u Bitrix f'Kubernetes

Il-laqgħat tal-amministratur tas-sistema Sysadminka qed isiru f'Chelyabinsk, u fl-aħħar waħda tajt rapport dwar is-soluzzjoni tagħna għat-tmexxija tal-applikazzjonijiet fuq 1C-Bitrix f'Kubernetes.

Bitrix, Kubernetes, Ceph - taħlita kbira?

Jien ngħidlek kif aħna ngħaqqdu soluzzjoni ta’ ħidma minn dan kollu.

Ejja ħa mmorru!

Southbridge f'Chelyabinsk u Bitrix f'Kubernetes

Il-laqgħa saret fit-18 ta’ April f’Chelyabinsk. Tista' taqra dwar il-laqgħat tagħna fuq Timepad u tħares lejn YouTube.

Jekk trid tiġi għandna b'rapport jew bħala semmiegħa - merħba, ikteb lil [protett bl-email] u fuq Telegram t.me/vadimisakanov.

Ir-rapport tiegħi

Southbridge f'Chelyabinsk u Bitrix f'Kubernetes

Slajds

Soluzzjoni "Bitrix f'Kubernetes, verżjoni Southbridge 1.0"

Se nitkellem dwar is-soluzzjoni tagħna fil-format "għall-manikini f'Kubernetes", kif sar fil-laqgħa. Imma nassumi li taf il-kliem Bitrix, Docker, Kubernetes, Ceph mill-inqas fil-livell ta’ artikli fuq il-Wikipedija.

X'inhu lest dwar Bitrix f'Kubernetes?

Hemm ftit li xejn informazzjoni fuq l-Internet kollu dwar l-operat tal-applikazzjonijiet Bitrix f'Kubernetes.
Sibt dawn il-materjali biss:

Rapport minn Alexander Serbul, 1C-Bitrix, u Anton Tuzlukov minn Qsoft:

Nirrakkomanda li nisimgħuha.

L-iżvilupp tas-soluzzjoni tiegħek mill-utent serkyron fuq Habré.
Sibt aktar deċiżjoni bħal din.

Aaand... fil-fatt, dak kollu.

Inwissik, aħna ma ċċekkjajniex il-kwalità tas-soluzzjonijiet fil-links ta 'hawn fuq :)
Mill-mod, meta ppreparat is-soluzzjoni tagħna, tkellimt ma 'Alexander Serbul, allura r-rapport tiegħu kien għadu ma deherx, għalhekk fil-pjastri tiegħi hemm oġġett "Bitrix ma jużax Kubernetes."

Iżda diġà hemm ħafna immaġini Docker lesti għat-tħaddim ta' Bitrix f'Docker: https://hub.docker.com/search?q=bitrix&type=image

Dan huwa biżżejjed biex tinħoloq soluzzjoni sħiħa għal Bitrix f'Kubernetes?
Nru. Hemm numru kbir ta 'problemi li jeħtieġ li jiġu solvuti.

X'inhuma l-problemi b'Bitrix f'Kubernetes?

L-ewwel, immaġini lesti minn Dockerhub mhumiex adattati għal Kubernetes

Jekk irridu nibnu arkitettura tal-mikroservizzi (u f'Kubernetes normalment nagħmlu), irridu nisseparaw l-applikazzjoni Kubernetes tagħna f'kontenituri u kull kontenitur iwettaq funzjoni żgħira waħda (u nagħmluha tajjeb). Għaliex wieħed biss? Fil-qosor, l-aktar sempliċi l-aktar affidabbli.
Biex tkun aktar speċifiku, ara dan l-artikolu u l-vidjo, jekk jogħġbok: https://habr.com/ru/company/southbridge/blog/426637/

Immaġini Docker f'Dockerhub huma prinċipalment mibnija fuq il-prinċipju all-in-one, għalhekk xorta kellna nagħmlu r-rota tagħna stess u anke noħolqu immaġini mill-bidu.

It-tieni - il-kodiċi tas-sit huwa editjat mill-pannell tal-amministrazzjoni

Ħloqna taqsima ġdida fuq is-sit - il-kodiċi ġie aġġornat (direttorju bl-isem tat-taqsima l-ġdida ġie miżjud).

Jekk biddel il-proprjetajiet ta 'komponent mill-pannell tal-amministrazzjoni, il-kodiċi nbidel.

Kubernetes "b'mod awtomatiku" ma jistax jaħdem ma' dan; il-kontenituri għandhom ikunu mingħajr stat.

Raġuni: Kull kontenitur (pod) fil-cluster jipproċessa biss porzjon tat-traffiku. Jekk tibdel il-kodiċi f'kontenitur wieħed biss (pod), allura l-kodiċi se jkun differenti f'imżiewed differenti, is-sit jaħdem b'mod differenti, u verżjonijiet differenti tas-sit jintwerew lil utenti differenti. Ma tistax tgħix hekk.

It-tielet - għandek bżonn issolvi l-kwistjoni bl-iskjerament

Jekk ikollna monolith u server "klassiku" wieħed, kollox huwa pjuttost sempliċi: niskjeraw bażi ta 'kodiċi ġdida, jemigraw id-database, naqilbu t-traffiku għall-verżjoni l-ġdida tal-kodiċi. Qlib iseħħ istantanjament.
Jekk ikollna sit f'Kubernetes, maqtugħ f'mikroservizzi, hemm ħafna kontenituri b'kodiċi - oh. Ikollok bżonn tiġbor kontenituri b'verżjoni ġdida tal-kodiċi, irromblahom minflok dawk qodma, temigra b'mod korrett id-database, u idealment tagħmel dan inosservat mill-viżitaturi. Fortunatament, Kubernetes jgħinna f'dan, billi jappoġġja mazz sħiħ ta 'tipi differenti ta' skjeramenti.

Ir-raba ' - għandek bżonn issolvi l-kwistjoni tal-ħażna tal-istatika

Jekk is-sit tiegħek huwa "biss" 10 gigabytes u tiskjerah għal kollox f'kontenituri, tispiċċa b'kontenituri ta '10 gigabyte li jieħdu għal dejjem biex jiġu skjerati.
Għandek bżonn taħżen il-partijiet "itqal" tas-sit barra mill-kontenituri, u tqum il-mistoqsija dwar kif tagħmel dan b'mod korrett

X'inhu nieqes mis-soluzzjoni tagħna?

Il-kodiċi Bitrix kollu mhuwiex maqsum f'mikrofunzjonijiet/mikroservizzi (sabiex ir-reġistrazzjoni tkun separata, il-modulu tal-ħanut online huwa separat, eċċ.). Aħna naħżnu l-bażi tal-kodiċi kollha f'kull kontenitur.

Aħna wkoll ma naħżnux id-database f'Kubernetes (għadni implimentajt soluzzjonijiet b'database f'Kubernetes għal ambjenti ta 'żvilupp, iżda mhux għall-produzzjoni).

Xorta jkun notevoli għall-amministraturi tas-sit li s-sit jaħdem fuq Kubernetes. Il-funzjoni "kontroll tas-sistema" ma taħdimx b'mod korrett; biex teditja l-kodiċi tas-sit mill-pannell tal-amministrazzjoni, l-ewwel trid tikklikkja l-buttuna "Irrid teditja l-kodiċi".

Il-problemi ġew identifikati, il-ħtieġa li jiġu implimentati mikroservizzi ġiet iddeterminata, l-għan huwa ċar - li tinkiseb sistema ta 'ħidma għat-tħaddim tal-applikazzjonijiet fuq Bitrix f'Kubernetes, li tippreserva kemm il-kapaċitajiet ta' Bitrix kif ukoll il-vantaġġi ta 'Kubernetes. Ejja nibdew l-implimentazzjoni.

arkitettura

Hemm ħafna imżiewed "tax-xogħol" b'server tal-web (ħaddiema).
Wieħed taħt il-kompiti cron (wieħed biss huwa meħtieġ).
Aġġornament wieħed għall-editjar tal-kodiċi tas-sit mill-pannell tal-amministrazzjoni (ukoll huwa meħtieġ wieħed biss).

Southbridge f'Chelyabinsk u Bitrix f'Kubernetes

Aħna nsolvu mistoqsijiet:

  • Fejn taħżen is-sessjonijiet?
  • Fejn taħżen il-cache?
  • Fejn taħżen l-istatika, biex ma tpoġġix gigabytes ta 'statika f'mazz ta' kontenituri?
  • Kif se taħdem id-database?

Immaġini Docker

Nibdew billi nibnu immaġni Docker.

L-għażla ideali hija li għandna immaġini universali waħda, fuq il-bażi tagħha nġibu imżiewed tal-ħaddiema, imżiewed bi Crontasks, u imżiewed ta 'titjib.

Għamilna biss immaġni bħal din.

Jinkludi nginx, apache/php-fpm (jistgħu jintgħażlu waqt il-bini), msmtp biex tintbagħat posta, u cron.

Meta tgħaqqad l-immaġini, il-bażi tal-kodiċi kollha tas-sit tiġi kkupjata fid-direttorju / app (bl-eċċezzjoni ta 'dawk il-partijiet li se ngħaddu għal ħażna maqsuma separata).

Mikroservizzi, servizzi

imżiewed tal-ħaddiema:

  • Kontenitur b'nginx + kontenitur apache/php-fpm + msmtp
  • Ma ħadmitx li tmexxi msmtp f'mikroservizz separat, Bitrix qed jibda jiddejjaq li ma jistax jibgħat posta direttament
  • Kull kontenitur għandu codebase komplut.
  • Projbizzjoni ta' tibdil ta' kodići f'kontenituri.

cron taħt:

  • kontenitur b'apache, php, cron
  • bażi tal-kodiċi kompluta inkluża
  • projbizzjoni li jinbidel il-kodiċi fil-kontenituri

upgrade taħt:

  • kontenitur nginx + kontenitur apache/php-fpm + msmtp
  • M'hemm l-ebda projbizzjoni fuq il-bidla tal-kodiċi fil-kontenituri

ħażna sessjoni

Ħażna bitrix cache

Ħaġa oħra importanti: aħna naħżnu passwords għall-konnessjoni ma 'kollox, mid-database għall-posta, fis-sigrieti kubernetes. Ikollna bonus: il-passwords huma viżibbli biss għal dawk li lilhom nagħtu aċċess għas-sigrieti, u mhux għal kull min għandu aċċess għall-bażi tal-kodiċi tal-proġett.

Ħażna għall-istatika

Tista 'tuża xi ħaġa: ceph, nfs (iżda aħna ma nirrakkomandawx nfs għall-produzzjoni), ħażna tan-netwerk minn fornituri tas-sħab, eċċ.

Il-ħażna trid tkun imqabbda f'kontenituri mad-direttorju /upload/ tas-sit u direttorji oħra b'kontenut statiku.

Database

Għal sempliċità, nirrakkomandaw li nċaqalqu d-database barra minn Kubernetes. Il-bażi f'Kubernetes hija kompitu kumpless separat; se tagħmel l-iskema ordni ta 'kobor aktar kumplessa.

Ħażna tas-sessjoni

Aħna nużaw memcached :)

Jiġġestixxi sew il-ħażna tas-sessjoni, huwa miġbur, u huwa appoġġjat "b'mod nattiv" bħala session.save_path f'php. Sistema bħal din ġiet ittestjata ħafna drabi fl-arkitettura monolitika klassika, meta bnejna clusters b'numru kbir ta 'servers tal-web. Għall-iskjerament nużaw it-tmun.

$ helm install stable/memcached --name session

php.ini - hawnhekk l-immaġini fiha settings għall-ħażna ta 'sessjonijiet fil memcached

Aħna użajna Varjabbli Ambjentali biex ngħaddu dejta dwar hosts b'memcached https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/.
Dan jippermettilek tuża l-istess kodiċi fl-ambjenti dev, stage, test, prod (l-ismijiet tal-host memcached fihom se jkunu differenti, għalhekk għandna bżonn ngħaddu isem ospitanti uniku għal sessjonijiet għal kull ambjent).
Ħażna bitrix cache

Għandna bżonn ħażna li tollera l-ħsarat li l-imżiewed kollha jistgħu jiktbu u jaqraw minnha.

Aħna nużaw ukoll memcached.
Din is-soluzzjoni hija rakkomandata minn Bitrix innifsu.

$ helm install stable/memcached --name cache

bitrix/.settings_extra.php - hawn f'Bitrix huwa speċifikat fejn tinħażen il-cache

Aħna nużaw ukoll Varjabbli Ambjentali.

Krontaski

Hemm approċċi differenti għat-tħaddim ta' Crontasks f'Kubernetes.

  • skjerament separat b'pod għat-tħaddim ta' Crontasks
  • cronjob għall-eżekuzzjoni ta' crontasks (jekk din hija app tal-web - b'wget https://$host$cronjobname, jew kubectl exec ġewwa wieħed mill-imżiewed tal-ħaddiema, eċċ.)
  • eċċ.

Tista' targumenta dwar l-iktar waħda korretta, iżda f'dan il-każ għażilna l-għażla "skjerament separat b'miżwed għal Crontasks"

Kif isir:

  • żid kompiti cron permezz tal-ConfigMap jew permezz tal-fajl config/addcron
  • f'każ wieħed inniedu kontenitur identiku għall-ħaddiem pod + jippermettu l-eżekuzzjoni tal-kompiti tal-kuruna fih
  • tintuża l-istess bażi tal-kodiċi, grazzi għall-unifikazzjoni, l-assemblaġġ tal-kontenitur huwa sempliċi

X'ġid niksbu:

  • għandna Crontasks li jaħdmu f'ambjent identiku għall-ambjent tal-iżviluppaturi (docker)
  • Il-crontasks m'għandhomx għalfejn jiġu "miktuba mill-ġdid" għal Kubernetes, jaħdmu fl-istess forma u fl-istess bażi ta 'kodiċi bħal qabel
  • kompiti cron jistgħu jiġu miżjuda mill-membri kollha tat-tim bi drittijiet ta 'kommit għall-fergħa tal-produzzjoni, mhux biss amministraturi

Southbridge K8SDeploy modulu u editjar tal-kodiċi mill-pannell tal-amministrazzjoni

Konna nitkellmu dwar upgrade taħt?
Kif tidderieġi t-traffiku hemm?
Hurrah, ktibna modulu għal dan f'PHP :) Dan huwa modulu klassiku żgħir għal Bitrix. Għadu mhux disponibbli pubblikament, iżda qed nippjanaw li niftħu.
Il-modulu huwa installat bħala modulu regolari f'Bitrix:

Southbridge f'Chelyabinsk u Bitrix f'Kubernetes

U jidher bħal dan:

Southbridge f'Chelyabinsk u Bitrix f'Kubernetes

Jippermettilek tissettja cookie li tidentifika l-amministratur tas-sit u tippermetti lil Kubernetes jibgħat traffiku lejn il-pod tal-aġġornament.

Meta jitlestew il-bidliet, trid tikklikkja fuq git push, il-bidliet fil-kodiċi jintbagħtu lil git, allura s-sistema tibni immaġni b'verżjoni ġdida tal-kodiċi u "roll out" madwar il-cluster, tissostitwixxi l-imżiewed qodma. .

Iva, huwa daqsxejn ta 'crutch, iżda fl-istess ħin inżommu l-arkitettura tal-mikroservizz u ma neħdux lill-utenti Bitrix l-opportunità favorita tagħhom biex jikkoreġu l-kodiċi mill-pannell tal-amministrazzjoni. Fl-aħħar, din hija għażla; tista 'ssolvi l-problema tal-editjar tal-kodiċi b'mod differenti.

Tabella tat-Tmun

Biex nibnu applikazzjonijiet fuq Kubernetes, aħna tipikament nużaw il-maniġer tal-pakkett Helm.
Għas-soluzzjoni Bitrix tagħna f'Kubernetes, Sergey Bondarev, l-amministratur ewlieni tas-sistema tagħna, kiteb chart speċjali ta' Helm.

Jibni ħaddiem, ugrade, cron pods, jikkonfigura dħul, servizzi, u jittrasferixxi varjabbli minn sigrieti Kubernetes għal pods.

Aħna naħżnu l-kodiċi f'Gitlab, u nħaddmu wkoll il-Helm build minn Gitlab.

Fil-qosor, jidher bħal dan

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

Helm jippermettilek ukoll li tagħmel rollback "mingħajr" jekk f'daqqa waħda xi ħaġa tmur ħażin waqt l-iskjerament. Huwa sabiħ meta m'intix f'paniku "iffissa l-kodiċi permezz tal-ftp għax il-prod waqa'," iżda Kubernetes jagħmel dan awtomatikament, u mingħajr ħin ta 'waqfien.

Skjerament

Iva, aħna fannijiet ta' Gitlab & Gitlab CI, nużawha :)
Meta jimpenja f'Gitlab għar-repożitorju tal-proġett, Gitlab iniedi pipeline li juża verżjoni ġdida tal-ambjent.

Stadji:

  • tibni (bini ta' immaġni Docker ġdida)
  • test (ttestjar)
  • tnaddaf (tneħħi l-ambjent tat-test)
  • push (nibagħtuha lir-reġistru Docker)
  • skjerament (aħna niskjeraw l-applikazzjoni għal Kubernetes permezz ta' Helm).

Southbridge f'Chelyabinsk u Bitrix f'Kubernetes

Hurrah, lest, ejja nimplimentah!
Ukoll, jew staqsi mistoqsijiet jekk hemm.

Allura x'għamilna

Mil-lat tekniku:

  • Dockerized Bitrix;
  • "qatgħa" Bitrix f'kontenituri, li kull wieħed minnhom iwettaq minimu ta 'funzjonijiet;
  • miksub stat mingħajr stat tal-kontejners;
  • solvuta l-problema bl-aġġornament ta 'Bitrix f'Kubernetes;
  • il-funzjonijiet kollha Bitrix komplew jaħdmu (kważi kollha);
  • Ħdimna fuq skjerament għal Kubernetes u rollback bejn il-verżjonijiet.

Mil-lat tan-negozju:

  • tolleranza għall-ħsarat;
  • Għodod Kubernetes (integrazzjoni faċli ma 'Gitlab CI, skjerament bla xkiel, eċċ);
  • passwords sigrieti (viżibbli biss għal dawk li huma direttament mogħtija aċċess għall-passwords);
  • Huwa konvenjenti li jinħolqu ambjenti addizzjonali (għall-iżvilupp, testijiet, eċċ.) fi ħdan infrastruttura waħda.

Sors: www.habr.com

Żid kumment