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!
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.
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:
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."
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).
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.
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).
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:
U jidher bħal dan:
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.
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).
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.