Dienvidu tilts ÄeļabinskÄ un Bitriks Kubernetes pilsÄtÄ
Sysadminka sistÄmas administratora tikÅ”anÄs notiek ÄeļabinskÄ, un pÄdÄjÄ es sniedzu ziÅojumu par mÅ«su risinÄjumu lietojumprogrammu palaiÅ”anai 1C-Bitrix Kubernetes.
Bitrix, Kubernetes, Ceph - lielisks maisījums?
Es jums pastÄstÄ«Å”u, kÄ mÄs no tÄ visa izveidojÄm funkcionÄjoÅ”u risinÄjumu.
Iesim!
TikÅ”anÄs notika 18. aprÄ«lÄ« ÄeļabinskÄ. Par mÅ«su tikÅ”anÄm varat lasÄ«t vietnÄ Timepad un paskaties YouTube.
Ja vÄlies nÄkt pie mums ar referÄtu vai kÄ klausÄ«tÄjs - laipni lÅ«dzam, raksti uz [e-pasts aizsargÄts] un Telegram t.me/vadimisakanov.
RisinÄjums "Bitrix in Kubernetes, versija Southbridge 1.0"
Par mÅ«su risinÄjumu es runÄÅ”u formÄtÄ āmanekeniem Kubernetesā, kÄ tas tika darÄ«ts tikÅ”anÄs reizÄ. Bet pieÅemu, ka vÄrdus Bitrix, Docker, Kubernetes, Ceph tu zini vismaz VikipÄdijas rakstu lÄ«menÄ«.
Kas ir gatavs par Bitrix pakalpojumÄ Kubernetes?
VisÄ internetÄ ir ļoti maz informÄcijas par Bitrix lietojumprogrammu darbÄ«bu Kubernetes.
Es atradu tikai Å”Ädus materiÄlus:
Aleksandra Serbuļa, 1C-Bitrix un Antona Tuzlukova ziÅojums no Qsoft:
Vai ar to pietiek, lai izveidotu pilnÄ«gu Bitrix risinÄjumu Kubernetes?
NÄ. Ir liels skaits problÄmu, kas ir jÄatrisina.
KÄdas ir Bitrix problÄmas Kubernetes?
PirmkÄrt, gatavie attÄli no Dockerhub nav piemÄroti Kubernetes
Ja mÄs vÄlamies izveidot mikropakalpojumu arhitektÅ«ru (un Kubernetes mÄs to parasti darÄm), mums ir jÄsadala mÅ«su Kubernetes lietojumprogramma konteineros un katram konteineram jÄveic viena neliela funkcija (un tas jÄdara labi). KÄpÄc tikai viens? ÄŖsÄk sakot, jo vienkÄrÅ”Äk, jo uzticamÄk.
Lai bÅ«tu precÄ«zÄk, skatiet Å”o rakstu un videoklipu, lÅ«dzu: https://habr.com/ru/company/southbridge/blog/426637/
Docker attÄli programmÄ Dockerhub galvenokÄrt ir veidoti pÄc "viss vienÄ" principa, tÄpÄc mums joprojÄm bija jÄizveido savs velosipÄds un pat jÄizveido attÄli no nulles.
OtrkÄrt - vietnes kods tiek rediÄ£Äts no admin paneļa
VietnÄ izveidojÄm jaunu sadaļu - kods tika atjauninÄts (tika pievienots direktorijs ar jaunÄs sadaļas nosaukumu).
Ja administrÄÅ”anas panelÄ« mainÄ«jÄt komponenta rekvizÄ«tus, kods mainÄ«jÄs.
Kubernetes āpÄc noklusÄjumaā ar to nevar darboties; konteineriem jÄbÅ«t bezvalstniekiem.
Iemesls: katrs klastera konteiners (pods) apstrÄdÄ tikai daļu datplÅ«smas. Ja mainÄt kodu tikai vienÄ konteinerÄ (pod), tad kods bÅ«s atŔķirÄ«gs dažÄdos aplikumos, vietne darbosies atŔķirÄ«gi, un dažÄdiem lietotÄjiem tiks rÄdÄ«tas dažÄdas vietnes versijas. JÅ«s nevarat tÄ dzÄ«vot.
TreÅ”kÄrt - jums ir jÄatrisina problÄma ar izvietoÅ”anu
Ja mums ir monolÄ«ts un viens āklasisksā serveris, viss ir pavisam vienkÄrÅ”i: izvietojam jaunu kodu bÄzi, migrÄjam datu bÄzi, pÄrslÄdzam trafiku uz jauno koda versiju. PÄrslÄgÅ”anÄs notiek uzreiz.
Ja mums ir vietne Kubernetes, sagriezta mikropakalpojumos, ir daudz konteineru ar kodu - ak. Jums ir jÄapkopo konteineri ar jaunu koda versiju, tie jÄizlaiž veco vietÄ, pareizi jÄmigrÄ datu bÄze, un ideÄlÄ gadÄ«jumÄ tas jÄdara, apmeklÄtÄjiem nepamanot. Par laimi, Kubernetes mums palÄ«dz Å”ajÄ jautÄjumÄ, atbalstot veselu virkni dažÄdu izvietoÅ”anas veidu.
Ja jÅ«su vietne ir ātikaiā 10 gigabaiti un jÅ«s to pilnÄ«bÄ izvietojat konteineros, jÅ«s iegÅ«sit 10 gigabaitu konteinerus, kuru izvietoÅ”ana prasÄ«s visu laiku.
Vietnes āsmagÄkÄsā daļas ir jÄuzglabÄ Ärpus konteineriem, un rodas jautÄjums, kÄ to izdarÄ«t pareizi.
Kas trÅ«kst mÅ«su risinÄjumam?
Viss Bitrix kods nav sadalÄ«ts mikrofunkcijÄs/mikropakalpojumos (lai reÄ£istrÄcija bÅ«tu atseviŔķa, interneta veikala modulis ir atseviŔķs utt.). MÄs glabÄjam visu koda bÄzi katrÄ konteinerÄ.
MÄs arÄ« neuzglabÄjam datubÄzi Kubernetes (es joprojÄm ieviesu risinÄjumus ar datu bÄzi Kubernetes izstrÄdes vidÄm, bet ne ražoÅ”anai).
VietÅu administratori joprojÄm bÅ«s pamanÄmi, ka vietne darbojas Kubernetes. Funkcija āSistÄmas pÄrbaudeā nedarbojas pareizi; lai rediÄ£Ätu vietnes kodu no administratora paneļa, vispirms jÄnoklikŔķina uz pogas āEs vÄlos rediÄ£Ät koduā.
ProblÄmas ir apzinÄtas, mikropakalpojumu ievieÅ”anas nepiecieÅ”amÄ«ba noteikta, mÄrÄ·is skaidrs - iegÅ«t funkcionÄjoÅ”u sistÄmu aplikÄciju darbinÄÅ”anai uz Bitrix uz Kubernetes, saglabÄjot gan Bitrix iespÄjas, gan Kubernetes priekÅ”rocÄ«bas. SÄksim ievieÅ”anu.
Arhitektūra
Ir daudz āstrÄdÄjoÅ”uā pÄkstu ar tÄ«mekļa serveri (darbiniekiem).
Viens zem ar cron uzdevumiem (nepiecieŔams tikai viens).
Viens jauninÄjums vietnes koda rediÄ£ÄÅ”anai no administratora paneļa (arÄ« ir nepiecieÅ”ams tikai viens).
MÄs risinÄm jautÄjumus:
Kur uzglabÄt sesijas?
Kur glabÄt keÅ”atmiÅu?
Kur glabÄt statiku, nevis ievietot gigabaitus statikas konteineru gÅ«zmÄ?
KÄ datubÄze darbosies?
Docker attÄls
MÄs sÄkam ar Docker attÄla izveidi.
IdeÄls variants ir tÄds, ka mums ir viens universÄls attÄls, uz kura pamata mÄs iegÅ«stam strÄdnieku, Crontasks un jauninÄjumu komplektus.
Tas ietver nginx, apache/php-fpm (var izvÄlÄties veidoÅ”anas laikÄ), msmtp pasta sÅ«tÄ«Å”anai un cron.
Saliekot attÄlu, visa vietnes koda bÄze tiek kopÄta /app direktorijÄ (izÅemot tÄs daļas, kuras pÄrvietosim uz atseviŔķu koplietojamo krÄtuvi).
Mikropakalpojumi, pakalpojumi
strÄdnieku pÄkstis:
Konteiners ar nginx + konteiners apache/php-fpm + msmtp
NeizdevÄs pÄrvietot msmtp uz atseviŔķu mikropakalpojumu, Bitrix sÄk bÅ«t saÅ”utis, ka nevar tieÅ”i nosÅ«tÄ«t pastu
VÄl viena svarÄ«ga lieta: paroles, lai izveidotu savienojumu ar visu, no datu bÄzes lÄ«dz pastam, mÄs glabÄjam kubernetes noslÄpumos. MÄs saÅemam bonusu: paroles ir redzamas tikai tiem, kam pieŔķiram piekļuvi noslÄpumiem, nevis visiem, kam ir pieeja projekta kodu bÄzei.
KrÄtuve statikai
Varat izmantot jebko: ceph, nfs (bet mÄs neiesakÄm nfs ražoÅ”anai), tÄ«kla krÄtuvi no mÄkoÅpakalpojumu sniedzÄjiem utt.
KrÄtuve bÅ«s jÄsavieno konteineros ar vietnes direktoriju /upload/ un citiem direktorijiem ar statisku saturu.
Datu bÄze
VienkÄrŔības labad mÄs iesakÄm pÄrvietot datu bÄzi Ärpus Kubernetes. Kubernetes bÄze ir atseviŔķs sarežģīts uzdevums; tas padarÄ«s shÄmu par lielumu sarežģītÄku.
Sesiju krÄtuve
Izmantojam memcached :)
Tas labi apstrÄdÄ sesiju krÄtuvi, ir grupÄts un tiek ānativelyā atbalstÄ«ts kÄ session.save_path php. Å Äda sistÄma ir daudzkÄrt pÄrbaudÄ«ta klasiskajÄ monolÄ«tajÄ arhitektÅ«rÄ, kad mÄs veidojÄm klasterus ar lielu skaitu tÄ«mekļa serveru. IzvietoÅ”anai mÄs izmantojam stÅ«ri.
$ helm install stable/memcached --name session
php.ini - Å”eit attÄlÄ ir iestatÄ«jumi sesiju glabÄÅ”anai memcached
MÄs izmantojÄm vides mainÄ«gos, lai nodotu datus par saimniekdatoriem ar memcached https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/.
Tas ļauj izmantot vienu un to paÅ”u kodu izstrÄdes, stadijas, testa, prod vidÄs (atmiÅÄ saglabÄtie resursdatora nosaukumi tajÄs bÅ«s atŔķirÄ«gi, tÄpÄc mums katrai videi ir jÄnodod unikÄls resursdatora nosaukums sesijÄm).
Bitrix keÅ”atmiÅas krÄtuve
Mums ir nepiecieÅ”ama kļūmÄm izturÄ«ga krÄtuve, kurÄ visi podi var rakstÄ«t un lasÄ«t.
MÄs arÄ« izmantojam memcached.
Å o risinÄjumu iesaka pats Bitrix.
$ helm install stable/memcached --name cache
bitrix/.settings_extra.php - Å”eit Bitrix ir norÄdÄ«ts, kur tiek glabÄta keÅ”atmiÅa
MÄs izmantojam arÄ« vides mainÄ«gos.
Krontaski
Crontasks palaiÅ”anai Kubernetes ir dažÄdas pieejas.
atseviŔķa izvietoÅ”ana ar podziÅu Crontasks palaiÅ”anai
cronjob crontasks izpildei (ja Ŕī ir tÄ«mekļa lietotne - ar wget https://$host$cronjobname, vai kubectl exec vienÄ no darbinieka podiem utt.)
un tÄ joprojÄm
JÅ«s varat strÄ«dÄties par pareizÄko, taÄu Å”ajÄ gadÄ«jumÄ mÄs izvÄlÄjÄmies opciju āatseviŔķa izvietoÅ”ana ar podiem Crontasksā.
KÄ tas tiek darÄ«ts:
pievienojiet cron uzdevumus, izmantojot ConfigMap vai failu config/addcron
vienÄ gadÄ«jumÄ mÄs palaižam konteineru, kas ir identisks worker pod + ļaujam tajÄ izpildÄ«t crown uzdevumus
tiek izmantota tÄ pati koda bÄze, pateicoties unifikÄcijai, konteinera montÄža ir vienkÄrÅ”a
Ko mÄs iegÅ«stam:
mums ir darba Crontasks vidÄ, kas ir identiska izstrÄdÄtÄju videi (docker)
Kubernetes Crontaski nav ājÄpÄrrakstaā, tie darbojas tÄdÄ paÅ”Ä formÄ un tajÄ paÅ”Ä kodu bÄzÄ kÄ iepriekÅ”
cron uzdevumus var pievienot visi komandas dalÄ«bnieki ar saistÄ«bu tiesÄ«bÄm ražoÅ”anas filiÄlei, ne tikai administratori
Southbridge K8SDeploy moduļa un koda rediÄ£ÄÅ”anu no administratora paneļa
MÄs runÄjÄm par jauninÄÅ”anu saskaÅÄ ar?
KÄ tur novirzÄ«t satiksmi?
UrÄ, Å”im mÄs uzrakstÄ«jÄm moduli PHP :) Å is ir mazs klasisks modulis priekÅ” Bitrix. Tas vÄl nav publiski pieejams, taÄu plÄnojam to atvÄrt.
Modulis ir instalÄts kÄ parasts modulis Bitrix:
Un tas izskatÄs Å”Ädi:
Tas ļauj iestatÄ«t sÄ«kfailu, kas identificÄ vietnes administratoru, un ļauj Kubernetes nosÅ«tÄ«t trafiku uz jauninÄÅ”anas bloku.
Kad izmaiÅas ir pabeigtas, jums jÄnoklikŔķina uz git push, koda izmaiÅas tiks nosÅ«tÄ«tas uz git, pÄc tam sistÄma izveidos attÄlu ar jaunu koda versiju un āizlaidÄ«sā to klasterÄ«, aizstÄjot vecÄs podi. .
JÄ, tas ir nedaudz apgrÅ«tinoÅ”s, taÄu tajÄ paÅ”Ä laikÄ mÄs uzturam mikropakalpojumu arhitektÅ«ru un neatÅemam Bitrix lietotÄjiem viÅu iecienÄ«tÄko iespÄju labot kodu no administratora paneļa. Galu galÄ Å”Ä« ir iespÄja; jÅ«s varat atrisinÄt koda rediÄ£ÄÅ”anas problÄmu citÄdÄ veidÄ.
Helm arÄ« ļauj veikt ānevainojamuā atcelÅ”anu, ja izvietoÅ”anas laikÄ pÄkÅ”Åi kaut kas noiet greizi. Ir jauki, ja neesat panikÄ ālabojiet kodu, izmantojot ftp, jo prod nokritaā, bet Kubernetes to dara automÄtiski un bez dÄ«kstÄves.
Izvietot
JÄ, mÄs esam Gitlab & Gitlab CI fani, mÄs to izmantojam :)
Kad Gitlab pievienojas projekta repozitorijai, Gitlab palaiž konveijeru, kas izvieto jaunu vides versiju.
Posmi:
veidot (jauna Docker attÄla izveide)
pÄrbaude (pÄrbaude)
notÄ«rÄ«t (pÄrbaudes vides noÅemÅ”ana)
push (mÄs to nosÅ«tÄm uz Docker reÄ£istru)
izvietot (mÄs izvietojam lietojumprogrammu Kubernetes, izmantojot Helm).
UrÄ, gatavs, Ä«stenosim!
Nu, vai uzdodiet jautÄjumus, ja tÄdi ir.
TÄtad, ko mÄs darÄ«jÄm
No tehniskÄ viedokļa:
dokerizÄts Bitrix;
āsagriežā Bitrix konteineros, no kuriem katrs veic minimÄlu funkciju;
sasniegts konteineru bezvalsts stÄvoklis;
atrisinÄja problÄmu ar Bitrix atjauninÄÅ”anu Kubernetes;
visas Bitrix funkcijas turpinÄja darboties (gandrÄ«z visas);
MÄs strÄdÄjÄm pie izvietoÅ”anas Kubernetes un atgrieÅ”anÄs starp versijÄm.
No biznesa viedokļa:
defektu tolerance;
Kubernetes rÄ«ki (Ärta integrÄcija ar Gitlab CI, netraucÄta izvietoÅ”ana utt.);
slepenas paroles (redzamas tikai tiem, kam ir tieÅ”i pieŔķirta piekļuve parolÄm);
Ir Ärti izveidot papildu vides (izstrÄdei, testiem utt.) vienÄ infrastruktÅ«rÄ.