Southbridge li Chelyabinsk û Bitrix li Kubernetes

Hevdîtinên rêvebirê pergala Sysadminka li Chelyabinsk pêk tên, û di ya dawî de min raporek li ser çareseriya me ya ji bo xebitandina sepanên li ser 1C-Bitrix li Kubernetes da.

Bitrix, Kubernetes, Ceph - tevliheviyek mezin?

Ez ê ji we re vebêjim ka em çawa ji van hemîyan çareseriyek xebatê berhev dikin.

Em herin!

Southbridge li Chelyabinsk û Bitrix li Kubernetes

Hevdîtin di 18'ê Nîsanê de li Çelyabînskê pêk hat. Hûn dikarin li ser hevdîtinên me bixwînin Timepad û lê binêre YouTube.

Ger hûn dixwazin bi raporek an jî wekî guhdarek werin ba me - bi xêr hatî, ji me re binivîsin [email parastî] û li ser Telegram t.me/vadimisakanov.

Rapora min

Southbridge li Chelyabinsk û Bitrix li Kubernetes

Slides

Çareseriya "Bitrix li Kubernetes, guhertoya Southbridge 1.0"

Ez ê li ser çareseriya me di forma "ji bo dummies di Kubernetes" de biaxivim, wekî ku di civînê de hate kirin. Lê ez texmîn dikim ku hûn bi kêmanî di asta gotarên Wikipedia de peyvên Bitrix, Docker, Kubernetes, Ceph dizanin.

Di Kubernetes de di derbarê Bitrix de çi amade ye?

Li ser tevaya Înternetê di derbarê xebata sepanên Bitrix de li Kubernetes pir hindik agahdarî hene.
Min tenê van materyalan dît:

Rapora Alexander Serbul, 1C-Bitrix, û Anton Tuzlukov ji Qsoft:

Ez guhdarîkirina wê pêşniyar dikim.

Pêşxistina çareseriya xwe ya ji bikarhêner serkyron li ser Habré.
Zêdetir dîtin biryareke wiha.

Aaand ... bi rastî, ew hemî.

Ez we hişyar dikim, me kalîteya çareseriyên di lînkên jorîn de kontrol nekiriye :)
Bi awayê, dema ku çareseriya me amade kir, min bi Alexander Serbul re peyivî, hingê rapora wî hîn derneketibû, ji ber vê yekê di slaytên min de babetek heye "Bitrix Kubernetes bikar nayîne."

Lê jixwe ji bo xebitandina Bitrix di Docker de gelek wêneyên Docker-a amade hene: https://hub.docker.com/search?q=bitrix&type=image

Ma ev bes e ku ji bo Bitrix di Kubernetes de çareseriyek bêkêmasî biafirîne?
Na. Gelek pirsgirêk hene ku divê bên çareserkirin.

Pirsgirêkên Bitrix li Kubernetes çi ne?

Pêşîn, wêneyên amadekirî yên ji Dockerhub ji bo Kubernetes ne maqûl in

Ger em dixwazin mîmariyek mîkroxizmetê ava bikin (û di Kubernetes de em bi gelemperî dikin), pêdivî ye ku em serîlêdana xweya Kubernetes di konteyneran de veqetînin û her konteynir fonksiyonek piçûk pêk bîne (û wê baş bike). Çima tenê yek? Bi kurtasî, sadetir pêbawertir.
Ji bo bêtir taybetî, vê gotar û vîdyoyê temaşe bikin, ji kerema xwe: https://habr.com/ru/company/southbridge/blog/426637/

Wêneyên Docker-ê li Dockerhub bi gelemperî li ser prensîba hemî-yek-yek têne çêkirin, ji ber vê yekê me hîn jî neçar ma ku bisiklêta xwe çêkin û tewra ji sifirê wêneyan biafirînin.

Ya duyemîn - koda malperê ji panela rêveberiyê tê guherandin

Me li ser malperê beşek nû çêkir - kod hate nûve kirin (peldankek bi navê beşa nû hate zêdekirin).

Ger we taybetmendiyên pêkhateyek ji panela rêveberiyê guhezand, kod guherî.

Kubernetes "ji hêla xwerû" nikare bi vê yekê re bixebite, divê konteynir bê dewlet bin.

Sedem: Her konteynir (pod) di komê de tenê beşek trafîkê pêvajo dike. Ger hûn kodê tenê di yek konteynerek (pod) de biguhezînin, wê hingê kod dê di podên cihêreng de cûda be, malper dê cûda bixebite, û guhertoyên cihêreng ên malperê dê ji bikarhênerên cihêreng re werin xuyang kirin. Hûn nikarin wisa bijîn.

Sêyemîn - hûn hewce ne ku pirsgirêkê bi birêkûpêk çareser bikin

Ger me serverek monolît û yek "klasîk" hebe, her tişt pir hêsan e: em bingehek kodek nû saz dikin, databasê koç dikin, seyrûseferê veguherînin guhertoya nû ya kodê. Guhertin tavilê pêk tê.
Ger malperek me li Kubernetes hebe, ku di mîkroservisan de hatî qut kirin, gelek konteynerên bi kod hene - oh. Hûn hewce ne ku konteyneran bi guhertoyek nû ya kodê berhev bikin, wan li şûna yên kevin derxînin, databasê bi rengek rast koç bikin, û bi îdeal vê yekê ji hêla mêvanan ve nedîtî bikin. Bi bextewarî, Kubernetes bi vê yekê re ji me re dibe alîkar, piştgirî dide komek cûrbecûr cûrbecûr danînan.

Çaremîn - hûn hewce ne ku pirsgirêka hilanîna statîkan çareser bikin

Ger malpera we "tenê" 10 gîgabayt be û hûn wê bi tevahî di konteyneran de bi cih bikin, hûn ê bi konteynerên 10 gigabyte yên ku herheyî werin bicîh kirin bi dawî bibin.
Pêdivî ye ku hûn beşên "giran" ên malperê li derveyî konteyneran hilînin, û pirs derdikeve holê ka meriv çawa vê yekê rast dike

Çi ji çareseriya me kêm e?

Tevahiya koda Bitrix-ê li mîkrofonksiyonên / mîkroxizmetan nayê dabeş kirin (da ku tomar ji hev cihê be, modula dikana serhêl veqetandî ye, hwd.). Em tevahiya bingeha kodê di her konteynerê de hilînin.

Em di heman demê de databasê li Kubernetes naparêzin (min hîn jî çareseriyên bi databasek li Kubernetes-ê ji bo hawîrdorên pêşkeftinê, lê ne ji bo hilberînê bicîh anîn).

Dê hîn jî ji rêvebirên malperê re were dîtin ku malper li Kubernetes dimeşe. Fonksiyona "kontrolkirina pergalê" rast naxebite ku hûn koda malperê ji panela rêveberiyê biguherînin, divê hûn pêşî bişkoka "Ez dixwazim kodê biguherim" bikirtînin.

Pirsgirêk hatin tespît kirin, hewcedariya pêkanîna mîkroxizmetan hate destnîşankirin, armanc zelal e - bidestxistina pergalek xebatê ya ji bo xebitandina serîlêdanên li ser Bitrix li Kubernetes, hem kapasîteyên Bitrix û hem jî avantajên Kubernetes biparêze. Werin em dest bi pêkanînê bikin.

avakarî

Bi serverek webê (karker) gelek podên "xebitîn" hene.
Yek di binê peywirên kron de (tenê yek pêdivî ye).
Yek nûvekirinek ji bo guherandina koda malperê ji panela rêveberiyê (her weha tenê yek hewce ye).

Southbridge li Chelyabinsk û Bitrix li Kubernetes

Em pirsan çareser dikin:

  • Li ku derê rûniştinan hilînin?
  • Kaşê li ku derê hilîne?
  • Li ku derê statîkan hilînin, ne ku meriv gigabayt statîkan di komek konteyneran de bi cîh bike?
  • Dê databas çawa bixebite?

Wêneyê Docker

Em bi avakirina wêneyek Docker dest pê dikin.

Vebijêrkek îdeal ev e ku me yek wêneyek gerdûnî heye, li ser bingeha wê em podên karker, polên bi Crontasks digirin, û potan nûve dikin.

Me wêneyek wisa çêkir.

Ew nginx, apache / php-fpm (dikare di dema çêkirinê de were hilbijartin), msmtp ji bo şandina e-nameyê, û cron vedigire.

Dema komkirina wêneyê, tevahiya bingeha kodê ya malperê li pelrêça /appê tê kopî kirin (ji bilî wan beşan ku em ê biçin depoyek hevpar a cihê).

Microservices, xizmetên

pêlên karker:

  • Konteynirê bi nginx + konteynir apache/php-fpm + msmtp
  • Nexebite ku msmtp bikeve nav mîkroxizmetek cihê, Bitrix dest bi hêrsbûnê dike ku ew nikare rasterast e-nameyê bişîne.
  • Her konteynir xwedan bingehek kodek bêkêmasî ye.
  • Qedexekirina guhertina kodê di konteynir de.

kron di bin:

  • konteynir bi apache, php, cron
  • bingeha kodê ya tevahî tê de
  • qedexekirina guhertina kodê di konteyneran de

nûvekirin di bin:

  • konteynir nginx + konteynir apache/php-fpm + msmtp
  • Di konteyneran de guhertina kodê qedexe nîne

hilanîna danişînê

hilanînê cache Bitrix

Tiştek din a girîng: em şîfreyan ji bo girêdana bi her tiştî re, ji databasê bigire heya e-nameyê, di sirên kubernetes de hilînin. Em bonusek werdigirin: şîfre tenê ji kesên ku em gihandina razan didin wan têne xuyang kirin, û ne ji her kesê ku xwedan bingeha koda projeyê ye.

Storage ji bo statîk

Hûn dikarin her tiştî bikar bînin: ceph, nfs (lê em nfs ji bo hilberînê pêşniyar nakin), hilanîna torê ji pêşkêşkerên ewr, hwd.

Pêdivî ye ku hilanîn di konteyneran de bi pelrêça /barkirin/ malperê û pelrêçiyên din ên bi naverok statîk ve were girêdan.

Database

Ji bo sadebûnê, em pêşniyar dikin ku databasê li derveyî Kubernetes biguhezînin. Bingeha li Kubernetes peywirek tevlihev e ku ew ê pileyê bi mezinahî tevlihevtir bike.

Depoya rûniştinê

Em memcached bikar tînin :)

Ew hilanîna danişînê baş bi rê ve dibe, komkirî ye, û wekî session.save_path di php-ê de "xwemalî" tê piştgirî kirin. Pergalek wusa di mîmariya monolîtîk a klasîk de gelek caran hate ceribandin, dema ku me bi hejmareke mezin serverên malperê re koman çêkir. Ji bo bicihkirinê em helm bikar tînin.

$ helm install stable/memcached --name session

php.ini - li vir wêne mîhengên hilanîna danişînan di memcached de vedihewîne

Me Guherbarên Jîngehê bikar anî da ku daneyên li ser mêvandarên bi memcached re derbas bikin https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/.
Ev dihêle hûn di hawîrdorên dev, qonax, ceribandin, prod de heman kodê bikar bînin (navên mêvandarên memcached ên di wan de dê cûda bin, ji ber vê yekê em hewce ne ku navek mêvandar a yekta ji bo danişînan ji her hawîrdorê re derbas bikin).
hilanînê cache Bitrix

Pêdiviya me bi hilanîna xelet-tolerans heye ku hemî pod dikarin jê re binivîsin û bixwînin.

Em jî memcached bikar tînin.
Ev çareserî ji hêla Bitrix bixwe ve tê pêşniyar kirin.

$ helm install stable/memcached --name cache

bitrix/.settings_extra.php - li vir di Bitrix-ê de tê destnîşan kirin ku cache li ku tê hilanîn

Em Guherbarên Jîngehê jî bikar tînin.

Krontaski

Ji bo xebitandina Crontasks li Kubernetes nêzîkatiyên cûda hene.

  • veqetandina veqetandî bi podek ji bo xebitandina Crontasks
  • cronjob ji bo pêkanîna crontasks (heke ev serîlêdanek webê ye - bi wget https://$host$cronjobname, an kubectl exec di hundurê yek ji podên karker, hwd.)
  • hwd.

Hûn dikarin di derbarê ya herî rast de nîqaş bikin, lê di vê rewşê de me vebijarka "ji bo Crontasks veqetandina bi potan" hilbijart.

Çawa tê kirin:

  • peywirên kron bi navgîniya ConfigMap an bi pelê config/addcron ve zêde bikin
  • di yek meselê de em konteynirek ku mîna podê karkeran e dest pê dikin + destûr didin ku karên tac di wê de werin cîbicîkirin
  • heman bingeha kodê tê bikar anîn, bi saya yekbûnê, kombûna konteynerê hêsan e

Em çi baş distînin:

  • me Crontasks li hawîrdorek ku bi hawîrdora pêşdebiran re (doker) yek e, dixebitin
  • Crontasks ne hewce ne ku ji bo Kubernetes "ji nû ve werin nivîsandin", ew bi heman form û di heman bingeha kodê ya berê de dixebitin.
  • peywirên kron dikare ji hêla hemî endamên tîmê ve ku bi mafên pabendbûnê li şaxê hilberînê ve têne zêde kirin, ne tenê rêveberan

Modula Southbridge K8SDeploy û guherandina kodê ji panela rêveberiyê

Em li ser upgrade di bin dipeyivî?
Meriv çawa seyrûsefera li wir rasterast dike?
Hurray, me ji bo vê di PHP-ê de modulek nivîsand :) Ev ji bo Bitrix modulek piçûk a klasîk e. Ew hîn ji raya giştî re peyda nebûye, lê em plan dikin ku wê vekin.
Module wekî modulek birêkûpêk li Bitrix tê saz kirin:

Southbridge li Chelyabinsk û Bitrix li Kubernetes

Û bi vî awayî xuya dike:

Southbridge li Chelyabinsk û Bitrix li Kubernetes

Ew dihêle hûn cookieyek saz bikin ku rêvebirê malperê nas dike û dihêle Kubernetes seyrûseferê bişîne poda nûvekirinê.

Dema ku guhertin qediyan, hûn hewce ne ku git push bikirtînin, guhertinên kodê dê ji git re werin şandin, dûv re pergal dê wêneyek bi guhertoyek nû ya kodê ava bike û wê li seranserê komê "hilweşîne" û li şûna pelên kevn .

Erê, ew piçek qut e, lê di heman demê de em mîmariya mîkroxizmetê diparêzin û ji bikarhênerên Bitrix fersenda xweya bijare ji bo rastkirina kodê ji panela rêveberiyê nagirin. Di dawiyê de, ev vebijarkek e ku hûn dikarin pirsgirêka guherandina kodê bi rengek din çareser bikin.

Helm chart

Ji bo avakirina serîlêdanan li ser Kubernetes, em bi gelemperî rêveberê pakêtê Helm bikar tînin.
Ji bo çareseriya meya Bitrix li Kubernetes, Sergey Bondarev, rêvebirê pergala meya sereke, nexşeyek Helm a taybetî nivîsand.

Ew karker, ugrade, cron pods ava dike, têketin, karûbaran mîheng dike, û guhêrbaran ji razên Kubernetes vediguhezîne pods.

Em kodê li Gitlab hilînin, û em avakirina Helm ji Gitlab jî dimeşînin.

Bi kurtasî, ev xuya dike

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

Helm di heman demê de rê dide we ku hûn vegerek "bêhin" bikin ger di dema bicîhkirinê de ji nişka ve tiştek xelet derkeve. Dema ku hûn ne di nav panîkê de ne xweş e "kodê bi ftp-ê rast bikin ji ber ku prod ket," lê Kubernetes wê bixweber, û bêyî demdirêj dike.

Bikaranîn

Erê, em temaşevanên Gitlab & Gitlab CI ne, em wê bikar tînin :)
Dema ku Gitlab li depoya projeyê ve girêdayî ye, Gitlab boriyek ku guhertoyek nû ya hawîrdorê saz dike dest pê dike.

Stage:

  • avakirin (avakirina wêneyek nû ya Docker)
  • ceribandin (ceribandin)
  • paqijkirin (rakirina hawîrdora testê)
  • push (em wê ji qeyda Docker re dişînin)
  • bicîh bikin (em bi rêya Helm serîlêdanê li Kubernetes bicîh dikin).

Southbridge li Chelyabinsk û Bitrix li Kubernetes

Hurra, ew amade ye, em wê bicîh bikin!
Baş e, an heke hebin pirsan bipirsin.

Îcar me çi kir

Ji hêla teknîkî ve:

  • Dockerized Bitrix;
  • Bitrix "birrîn" li konteyneran, ku her yek ji wan kêmtirîn fonksiyonan pêk tîne;
  • bigihêje rewşa bêdewlet a konteynir;
  • Pirsgirêka nûvekirina Bitrix li Kubernetes çareser kir;
  • hemî fonksiyonên Bitrix berdewam kir (hema hema hemî);
  • Me li ser bicihkirina Kubernetes û vegerandina di navbera guhertoyan de xebitî.

Ji nêrînek karsaziyê:

  • tolerance fault;
  • Amûrên Kubernetes (entegrasyona hêsan a bi Gitlab CI, bicîhkirina bêkêmasî, hwd.);
  • şîfreyên nehênî (tenê ji bo kesên ku rasterast ji şîfreyan re gihîştina wan tê xuyang kirin);
  • Di nav binesaziyek yekane de çêkirina hawîrdorên zêde (ji bo pêşkeftin, ceribandin, hwd.) rehet e.

Source: www.habr.com

Add a comment