Southbridge Čeljabinskis ja Bitrix Kuberneteses

Chelyabinskis toimuvad Sysadminka sĂŒsteemiadministraatorite kohtumised ning viimasel neist esitlesin meie lahendust 1C-Bitrix'i rakenduste kĂ€itamiseks Kuberneteses.

Bitrix, Kubernetes, Ceph — suurepĂ€rane segu?

RÀÀgin, kuidas me sellest kokku panime töötava lahenduse.

LĂ€hme!

Southbridge Čeljabinskis ja Bitrix Kuberneteses

Kohtumine toimus 18. aprillil Chelyabinskis. Meie kohtumiste kohta saab lugeda Timepad ja vaadata YouTube'is.

Kui soovite meiega esitlusele tulla vĂ”i kuulajana osaleda — olete teretulnud, kirjutage aadressile vadim.isakanov@gmail.com ja Telegramis t.me/vadimisakanov.

Minu ettekande pealkiri

Southbridge Čeljabinskis ja Bitrix Kuberneteses

Esitlused

Lahendus „Bitrix Kuberneteses, versioon Southbridge 1.0“

RÀÀgin meie lahendusest formaadis „Kubernetesi for dummies“, kuidas see kohtumisel teoks sai. Kuid ma eeldan, et sĂ”nad Bitrix, Docker, Kubernetes, Ceph on teile tuttavad vĂ€hemalt Wikipedias artiklite tasemel.

Mis valmis lahendust Bitrix Kuberneteses on?

Internetis on vÀga vÀhe teavet Bitrix'i rakenduste töö kohta Kuberneteses.
Leidsin vaid sellised materjalid:

Ettekanne Aleksandr Serbuli ja Anton Tuzlukovi poolt Qsoft'ist:

Vaata videot

Soovitan seda kuulata.

Kasutajalt enda lahenduse arendamine serkyron HabrĂĄs.
Leidsin veel sellise lahenduse.

Ja... tÔepoolest, see on kÔik.

Maadan, mehaanika lahenduste töö kvaliteeti, mis on antud ĂŒlalpool, me pole kontrollinud 🙂
Muide, meie lahenduse ettevalmistamise kĂ€igus suhtlesin Aleksandr Serbuliiga. Tema ettekannet ei olnud veel, seega mu slaididel on punkt „Bitrix ei kasuta Kuberneteset“.

Aga Bitrixi jaoks on juba palju valmis Docker-imaid: https://hub.docker.com/search?q=bitrix&type=image

Kas see on piisav, et luua tÀielik lahendus Bitrixi jaoks Kuberneteses?
Ei. On palju probleeme, mida tuleb lahendada.

Millised on probleemid Bitrixiga Kuberneteses?

Esimene probleem on see, et Dockerhubist leitud valmis pildid ei sobi Kubernetesesse.

Kui me tahame ehitada mikroteenuste arhitektuuri (ja Kuberneteses me tavaliselt tahame), tuleb rakendus Kuberneteses jagada konteineriteks ja pĂŒĂŒdma tagada, et iga konteiner tĂ€idab ĂŒksikut vĂ€ikest funktsiooni (ja teeb seda hĂ€sti). Miks ainult ĂŒks? Lihtsalt öeldes — mida lihtsam, seda kindlam.
Pikemalt vaadake palun seda artiklit ja videot: https://habr.com/ru/company/southbridge/blog/426637/

Dockerhubi Docker-imaid ehitatakse peamiselt pĂ”himĂ”ttel „kĂ”ik ĂŒhes“, seega pidime ikkagi oma rattaga asja kĂ€ivitama ja isegi pilte nullist tegema.

Teine probleem on see, et saidi koodi muudetakse admin-paneeli kaudu.

Loodud on uus jaotis veebisaidil — kood on uuendatud (ilmunud on uue jaotise nimeline kaust).

Muudeti komponendi omadusi admin-paneelist — kood on muutunud.

Kubernetes ei oska sellise konfiguratsiooniga töötada, konteinerid peaksid olema muutumatud (Stateless).

PĂ”hjus: iga konteiner (pod) klastri sees töötleb ainult osa liiklusest. Kui muuta koodi ainult ĂŒhes konteineris (podis), siis erinevates podides on kood erinev, veebisait töötab erinevalt ja erinevatele kasutajatele kuvatakse veebisaidi erinevaid versioone. Nii ei saa eksisteerida.

Kolmas — tuleb lahendada juurutamise kĂŒsimus.

Kui meil on monoliitne rakendus ja ĂŒks «klassikaline» server, on kĂ”ik vĂ€ga lihtne: kĂ€ivitame uue koodibaasi, teeme andmebaasi migratsiooni, suuname liikluse uue koodiversiooni suunas. Suunamine toimub kohe.
Kui meil on veebisait Kuberneteses, jagatud mikroteenusteks, on konteineritega, kus on uus kood, palju — oioi. Tuleb koguda konteinerid uue koodiversiooniga, asendada need vanadega, Ă”igesti teostada andmebaasi migratsioon ja ideaaljuhul teha seda kĂŒlalistele mĂ€rkamatult. On seejuures hea, et Kubernetes aitab, toetades erinevaid juurutusviise.

Neljas – peate lahendama staatilise salvestamise kĂŒsimuse

Kui teie veebileht kaalub „vaid” 10 gigabaiti ja te kĂ€ivitate selle tĂ€ielikult konteinerites, siis saadud konteinerite kaal on 10 gigabaiti, mis paigaldatakse igavesti.
Veebilehe kĂ”ige „raskeid” osi tuleb hoida vĂ€ljaspool konteineri, ja tekib kĂŒsimus, kuidas seda Ă”igesti teha

Mida meie lahenduses ei ole

Kogu Bitrixi kood ei ole jagatud mikrofunktsioonide/mikroteenuste vahel (nii, et registreerimine eraldi, e-poe moodul eraldi jne). Kogu koodibaas on iga konteineri sees tÀies mahus.

Andmebaasi me Kuberneteses samuti ei hoia (olen siiski rakendanud lahendusi andmebaasi jaoks Kuberneteses arenduskeskkondades, kuid mitte tootmises).

Veebisaidi administraatorid mĂ€rkavad ikkagi, et veebileht töötab Kuberneteses. Funktsioon „sĂŒsteemi kontroll” ei tööta Ă”igesti, veebilehe koodi toimetamiseks administreerimisliidesest tuleb esmalt vajutada nuppu „tahan koodi toimetada”.

Oleme probleemid lahendanud ning mikrotasandite rakendamise vajadused mÀÀratletud, eesmĂ€rk on selge — luua töötav sĂŒsteem rakenduste kĂ€itamiseks Bitrixis Kuberneteses, sĂ€ilitades nii Bitrixi funktsionaalsuse kui ka Kubernetes eelised. Alustame rakendamist.

Arhitektuur

Palju 'töötavaid' pod'e veebiserveriga (töötajad).
Üks pod krontööride jaoks (ainult ĂŒks on kohustuslik).
Üks upgrade pod saidi koodi redigeerimiseks admin-paneelist (samuti on kohustuslik ainult ĂŒks).

Southbridge Čeljabinskis ja Bitrix Kuberneteses

Lahendame kĂŒsimused:

  • Kus sĂ€ilitada sessioone?
  • Kus hoida vahemĂ€lu?
  • Kus hoida staatilist sisu, ei saa ju gigabaite statiilist sisu hunnikus konteinerites hoida?
  • Kuidas töötab andmebaas?

Docker pilt

Alustame Docker pildi kogumisega.

Ideaalne variant — meil on ĂŒks universaalne pilt, mille alusel saame nii töötaja pod'id kui ka krontööride pod'id ja upgrade pod'id.

Oleme teinud nagu just selle pildi..

See sisaldab nginx'i, apache/php-fpm (valitav kogumise ajal), msmtp meilide saatmiseks ja krontöör.

Pildi kogumise kĂ€igus kopeeritakse kaustasse /app kogu saidi koodibaas (v.a need osad, mille viime ĂŒle eraldi jagatud salvestusse).

Mikroteenused, teenused

töötaja pod'id:

  • Konteiner nginx'iga + konteiner apache/php-fpm + msmtp
  • msmtp ei saanud eraldi mikroteenuseks vĂ€lja viidud, Bitrix hakkab protestima, et ei saa otse e-kirju saata
  • Igas konteineris on tĂ€ielik koodibaas.
  • Keeld koodi muutmiseks konteinerites.

cron all:

  • konteiner koos apache'i, php ja croniga
  • komplektis on tĂ€ielik koodibaas
  • keeld koodi muutmiseks konteinerites

upgrade all:

  • konteiner nginxiga + konteiner apache/php-fpm + msmtp
  • koodi muutmiseks konteinerites ei ole keeldu

sessioonide salvestamine

Bitrixi vahemÀlu salvestamine

Veel oluline: ĂŒhendamise paroolid, alates andmebaasist kuni e-kirjadeni, sĂ€ilitame kubernetes secrets. Saame boonuse, et paroolid on nĂ€htavad ainult neile, kellele anname juurdepÀÀsu saladustele, mitte kĂ”igile, kellel on juurdepÀÀs projekti koodibaasile.

staatika salvestamine

VÔib kasutada mida iganes: ceph, nfs (aga nfs ei ole tootmises soovitatav), pilveteenuse pakkujate vÔrgu salvestus jne.

Salvestus tuleb ĂŒhendama konteinerites /upload/ veebilehe katalooge ja teisi staatika katalooge.

Andmebaas

Lihtsuse huvides soovitame andmebaasi viia vĂ€ljapoole Kuberneteset. Andmebaas Kuberneteses on eraldi keeruline ĂŒlesanne, mis muudab skeemi oluliselt keerukamaks.

sessioonide salvestamine

Kasutame memcached 🙂

See sĂ€ilitab sessioone tĂ”husalt, klastreerub ja toetab "natiivselt" session.save_path'i php-s. Selline sĂŒsteem on korduvalt tööle pandud klassikalises monoliitarkitektuuris, kui ehitasime suure arvu veebi serveritega klastreid. Deployment'i jaoks kasutame helm'i.

$ helm install stable/memcached --name session

php.ini — siin on pildis mÀÀratud seaded sessioonide hoidmiseks memcached'is

Me kasutasime keskkonnamuutujaid hostide andmete edastamiseks memcached'iga https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/.
See vÔimaldab kasutada sama koodi dev, stage, test, prod keskkondades (memcached'i hostide nimed neil erinevad, seetÔttu peame igasse keskkonda edastama unikaalsed hostide nimed sessioonide jaoks).
Bitrix'i vahemÀlu salvestamine

Me vajame kÔrge usaldusvÀÀrsusega salvestust, kuhu kÔik podid saaksid kirjutada ja kust nad saaksid lugeda.

Kasutame ka memcached'i.
Seda lahendust soovitab Bitrix ise.

$ helm install stable/memcached --name cache

bitrix/.settings_extra.php — siin Bitrix'is mÀÀritakse, kus meie vahemĂ€lu asub

Kasutame ka keskkonnamuutujaid.

Kronitasud

Kuberneteses on erinevad lÀhenemisviisid cron-tasude tÀitmiseks.

  • eraldi deployment pod cron-tasude tĂ€itmiseks
  • cronjob krontaskide tĂ€itmiseks (kui see on veebirakendus — koos wget https://$host$cronjobname, vĂ”i kubectl exec ĂŒhe töötaja podi sisse jne)
  • jne.

Saame vaielda, mis on kĂ”ige Ă”igem, kuid antud juhul valisime variandi „eraldi deployment podide jaoks krontaskide jaoks“

Kuidas seda teha:

  • krontaskid lisame lĂ€bi ConfigMapi vĂ”i config/addcron faili
  • kĂ€ivitame konteineri, mis on identne töötaja podiga + lubame krontaskide tĂ€itmise selles
  • kasutame sama koodibaasi, tĂ€nu ĂŒhtsusele on konteineri koostamine lihtne

Mida head me saame:

  • meil on töötavad krontaskid keskkonnas, mis on identne arendajate keskkonnaga (docker)
  • krontaskid ei vaja Kubernetes'i jaoks 'ĂŒle kirjutamist', need töötavad samas vormis ja samas koodibaasis nagu varem
  • krontaskid saavad lisada kĂ”ik meeskonna liikmed, kellel on commit Ă”igused tootmisvihikus, mitte ainult administraatorid

Moodul Southbridge K8SDeploy ja koodi redigeerimine administraatoripaneelis

RÀÀkisime me ju podi uuendamisest?
Aga kuidas suunata sinna liiklust?
Hurraa, me kirjutasime selle jaoks mooduli PHP-s 🙂 See on vĂ€ike klassikaline moodul Bittrexile. Seda ei ole veel avalikult saadaval, kuid plaanime selle avada.
Moodul installitakse Bitrixis nagu tavaline moodul:

Southbridge Čeljabinskis ja Bitrix Kuberneteses

Ja see nÀeb vÀlja selline:

Southbridge Čeljabinskis ja Bitrix Kuberneteses

See vĂ”imaldab seadistada kĂŒpsise, mis identifitseerib saidi administraatori ja vĂ”imaldab Kubernetesel suunata liiklust upgrade podile.

Kui muudatused on lĂ”petatud, tuleb vajutada git push, koodimuudatused saadetakse git'i, seejĂ€rel kogub sĂŒsteem uue versiooni koodiga pildi ja „jaotab” selle klastrisse, asendades vanad podid.

Jah, see on veidi tobe, kuid samas sĂ€ilitame mikroteenuste arhitektuuri ja ei vĂ”ta Bitrixi kasutajatelt armastatud vĂ”imalust koodi adminpaneelilt parandada. LĂ”ppkokkuvĂ”ttes on see valik, koodi muutmise ĂŒlesanne vĂ”ib olla lahendatud ka teisiti.

Helm chart

Kuberneteses rakenduste kogumiseks kasutame tavaliselt pakihaldurit Helm.
Meie Bitrixi lahenduse jaoks Kuberneteses kirjutas meie juhtiv sĂŒsteemiadministraator Sergei Bondarev spetsiaalse Helm charti.

See kogub worker, upgrade, cron podes, seadistab ingressid, teenused ja edastab muutujad Kubernetesi salajastes podidesse.

Koodi hoiame Gitlabis, samuti kÀivitame Helm kogumise Gitlabist.

LĂŒhidalt öeldes, see nĂ€eb vĂ€lja selline

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

Helm vÔimaldab ka "sÔltumatut" tagasipöördumist, kui juhtub, et juurutamisel lÀheb midagi valesti. On tore, et te ei pea Àrevuses "koodi FTP kaudu parandama, sest tootmine kukkus", vaid Kubernetes teeb seda automaatselt, ilma seisakuta.

Juhtimistöö

Jah, me oleme Gitlabi ja GitLab CI fĂ€nnid, kasutame seda 🙂
Gitlabi projektireposiitiumisse commitimisel kÀivitab GitLab torustiku, mis viib ellu keskkonna uue versiooni.

Etapid:

  • build (uus Docker pilt kokku monteerimine)
  • test (testimine)
  • clean up (testkeskkonna eemaldamine)
  • push (kujundi saatmine Docker registrisse)
  • deploy (rakenduse juurutamine Kuberneteses Helmi kaudu).

Southbridge Čeljabinskis ja Bitrix Kuberneteses

Hurraa, valmis, juurutame!
VĂ”i kĂŒsime kĂŒsimusi, kui neid on.

Niisiis, mida me tegime

Tehnilisest vaatenurgast:

  • dockeriseerisime Bitrixi;
  • "lĂ”ikasime" Bitrixi konteineriteks, millest igaĂŒks tĂ€idab minimaalset funktsiooni;
  • saavutasime konteinerite state-less oleku;
  • lahendasime Bitrixi uuendamise probleem Kuberneteses;
  • kĂ”ik Bitrixi funktsioonid töötasid edasi (peaaegu kĂ”ik);
  • kasutasime Kuberneteses juurutamist ja versioonide vahelist tagasipöördumist.

Ärivaatepunktist:

  • rikketolerantsus;
  • Kubernetesi tööriistad (lihtne integratsioon Gitlab CI-ga, sujuv deploy, jne);
  • salasonad salvestustes (nĂ€htavad ainult neile, kellele on otseselt antud juurdepÀÀs salasonadele);
  • tĂ€iendavate keskkondade loomine (arenduseks, testimiseks jne) ĂŒhes infrastruktuuris on mugav.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster