Southbridge nan Chelyabinsk ak Bitrix nan Kubernetes

Reyinyon administratè sistèm Sysadminka ap fèt nan Chelyabinsk, epi nan dènye a mwen te bay yon rapò sou solisyon nou an pou kouri aplikasyon sou 1C-Bitrix nan Kubernetes.

Bitrix, Kubernetes, Ceph - yon melanj gwo?

Mwen pral di ou ki jan nou mete ansanm yon solisyon k ap travay soti nan tout sa a.

Ale!

Southbridge nan Chelyabinsk ak Bitrix nan Kubernetes

Rankont la te fèt 18 avril nan Chelyabinsk. Ou ka li sou rankont nou yo nan Timepad epi gade YouTube.

Si ou vle vin jwenn nou ak yon rapò oswa kòm yon moun k ap koute - akeyi, ekri nan [imèl pwoteje] ak sou Telegram t.me/vadimisakanov.

Rapò mwen an

Southbridge nan Chelyabinsk ak Bitrix nan Kubernetes

Dyapozitiv

Solisyon "Bitrix nan Kubernetes, vèsyon Southbridge 1.0"

Mwen pral pale sou solisyon nou an nan fòma "pou nul nan Kubernetes", jan yo te fè nan reyinyon an. Men, mwen sipoze ke ou konnen mo Bitrix, Docker, Kubernetes, Ceph omwen nan nivo atik sou Wikipedya.

Ki sa ki pare-fè sou Bitrix nan Kubernetes?

Gen anpil ti enfòmasyon sou tout entènèt la sou operasyon aplikasyon Bitrix nan Kubernetes.
Mwen te jwenn sèlman materyèl sa yo:

Rapò Alexander Serbul, 1C-Bitrix, ak Anton Tuzlukov soti nan Qsoft:

Mwen rekòmande pou koute li.

Devlope pwòp solisyon ou nan men itilizatè a serkyron sou Habré.
Jwenn plis yon desizyon konsa.

Aaand... aktyèlman, se tout.

Mwen avèti ou, nou pa t tcheke kalite solisyon yo nan lyen ki anwo yo :)
By wout la, lè w ap prepare solisyon nou an, mwen te pale ak Alexander Serbul, Lè sa a, rapò li a pa t 'ankò parèt, kidonk nan glisad mwen yo gen yon atik "Bitrix pa sèvi ak Kubernetes."

Men, gen deja anpil imaj Docker pare pou kouri Bitrix nan Docker: https://hub.docker.com/search?q=bitrix&type=image

Èske sa a ase yo kreye yon solisyon konplè pou Bitrix nan Kubernetes?
Non. Gen yon gwo kantite pwoblèm ki bezwen rezoud.

Ki pwoblèm ki genyen ak Bitrix nan Kubernetes?

Premyèman, imaj ki pare soti nan Dockerhub yo pa apwopriye pou Kubernetes

Si nou vle bati yon achitekti mikwosèvis (ak nan Kubernetes nou fè nòmalman), nou bezwen separe aplikasyon Kubernetes nou an nan resipyan epi fè chak veso fè yon ti fonksyon (epi fè li byen). Poukisa yon sèl? Nan ti bout tan, pi senp la pi serye a.
Pou plis espesifik, gade atik sa a ak videyo, tanpri: https://habr.com/ru/company/southbridge/blog/426637/

Imaj Docker nan Dockerhub yo sitou bati sou prensip tout-an-yon sèl la, kidonk nou te toujou oblije fè pwòp bisiklèt nou an e menm kreye imaj nan grate.

Dezyèm - kòd sit la modifye nan panèl la admin

Nou te kreye yon nouvo seksyon sou sit la - kòd la te mete ajou (yo te ajoute yon anyè ak non nouvo seksyon an).

Si ou chanje pwopriyete yo nan yon eleman nan panèl la admin, kòd la chanje.

Kubernetes "pa defo" pa ka travay ak sa a; kontenè yo dwe apatrid.

Rezon ki fè: Chak veso (gous) nan gwoup la trete sèlman yon pòsyon nan trafik la. Si ou chanje kòd la nan yon sèl veso (gous), Lè sa a, kòd la pral diferan nan gous diferan, sit la ap travay yon fason diferan, ak diferan vèsyon nan sit la pral montre itilizatè diferan. Ou pa ka viv konsa.

Twazyèm - ou bezwen rezoud pwoblèm nan ak deplwaman

Si nou gen yon monolit ak yon sèvè "klasik", tout bagay se byen senp: nou deplwaye yon nouvo baz kòd, emigre baz done a, chanje trafik nan nouvo vèsyon an nan kòd la. Chanjman fèt imedyatman.
Si nou gen yon sit nan Kubernetes, koupe an mikwosèvis, gen yon anpil nan resipyan ki gen kòd - oh. Ou bezwen kolekte resipyan ki gen yon nouvo vèsyon kòd la, woule yo olye pou yo ansyen yo, kòrèkteman imigre baz done a, epi depreferans fè sa inapèsi pa vizitè yo. Erezman, Kubernetes ede nou ak sa a, sipòte yon pakèt antye nan diferan kalite deplwaman.

Katriyèm - ou bezwen rezoud pwoblèm nan nan estoke estatik

Si sit ou a se "sèlman" 10 gigaocte epi ou deplwaye li antyèman nan resipyan, ou pral fini ak 10 gigaocte resipyan ki pran pou tout tan deplwaye.
Ou bezwen estoke pati "pi lou" yo nan sit la deyò nan resipyan, ak kesyon an rive sou ki jan fè sa kòrèkteman.

Kisa ki manke nan solisyon nou an?

Tout kòd Bitrix la pa divize an mikrofonksyon/mikwosèvis (pou enskripsyon an separe, modil magazen sou entènèt la separe, elatriye). Nou estoke tout baz kòd la nan chak veso.

Nou menm tou nou pa estoke baz done a nan Kubernetes (mwen toujou aplike solisyon ak yon baz done nan Kubernetes pou anviwònman devlopman, men se pa pou pwodiksyon).

Li pral toujou aparan pou administratè sit yo ke sit la kouri sou Kubernetes. Fonksyon "chèk sistèm" la pa travay kòrèkteman; pou modifye kòd sit la nan panèl administratè a, ou dwe premye klike sou bouton "Mwen vle modifye kòd la".

Yo te idantifye pwoblèm yo, yo te detèmine bezwen pou aplike mikwosèvis, objektif la klè - jwenn yon sistèm k ap travay pou kouri aplikasyon sou Bitrix nan Kubernetes, prezève tou de kapasite Bitrix ak avantaj Kubernetes. Ann kòmanse aplikasyon.

achitekti

Gen anpil gous "k ap travay" ak yon sèvè entènèt (travayè).
Youn anba ak travay cron (se sèlman youn obligatwa).
Yon ajou pou koreksyon kòd sit la nan panèl admin (tou sèlman youn obligatwa).

Southbridge nan Chelyabinsk ak Bitrix nan Kubernetes

Nou rezoud kesyon:

  • Ki kote yo estoke sesyon yo?
  • Ki kote yo estoke kachèt la?
  • Ki kote pou estoke statistik, pa mete gigabyte nan estatik nan yon pakèt moun sou kontenè?
  • Ki jan baz done a pral travay?

Docker imaj

Nou kòmanse pa bati yon imaj Docker.

Opsyon ideyal la se ke nou gen yon imaj inivèsèl, sou baz li nou jwenn gous travayè, gous ak Crontasks, ak gous ajou.

Nou te fè jis tankou yon imaj.

Li gen ladan nginx, apache/php-fpm (ka chwazi pandan konstriksyon), msmtp pou voye lapòs, ak cron.

Lè rasanble imaj la, tout baz kòd sit la kopye nan anyè /app (ak eksepsyon de pati sa yo ke nou pral deplase nan yon depo separe separe).

Mikwosèvis, sèvis

gous travayè:

  • Veso ki gen nginx + veso apache/php-fpm + msmtp
  • Li pa t travay pou deplase msmtp nan yon mikwosèvis separe, Bitrix ap kòmanse endiye ke li pa ka voye lapòs dirèkteman.
  • Chak veso gen yon baz kòd konplè.
  • Entèdiksyon sou chanje kòd nan resipyan.

cron anba:

  • veso ki gen apache, php, cron
  • baz kòd konplè enkli
  • entèdiksyon sou chanje kòd nan resipyan

ajou anba:

  • veso nginx + veso apache/php-fpm + msmtp
  • Pa gen okenn entèdiksyon pou chanje kòd nan resipyan yo

depo sesyon

Bitrix kachèt depo

Yon lòt bagay enpòtan: nou estoke modpas pou konekte ak tout bagay, soti nan baz done a lapòs, nan sekrè kubernetes. Nou jwenn yon bonis: modpas yo vizib sèlman pou moun nou bay aksè a sekrè yo, epi yo pa tout moun ki gen aksè nan baz kòd pwojè a.

Depo pou estatik

Ou ka itilize nenpòt bagay: ceph, nfs (men nou pa rekòmande nfs pou pwodiksyon), depo rezo nan men founisè nwaj, elatriye.

Depo a ap bezwen konekte nan resipyan nan /upload/ anyè sit la ak lòt anyè ki gen kontni estatik.

Baz done

Pou senplisite, nou rekòmande pou deplase baz done a deyò Kubernetes. Baz la nan Kubernetes se yon travay konplèks separe; li pral fè konplo a yon lòd nan grandè pi konplèks.

Depo sesyon

Nou itilize memcached :)

Li okipe depo sesyon byen, se gwoupe, epi li sipòte "natif" kòm session.save_path nan php. Yon sistèm sa yo te teste anpil fwa nan achitekti monolitik klasik la, lè nou bati grap ak yon gwo kantite sèvè entènèt. Pou deplwaman nou itilize Helm.

$ helm install stable/memcached --name session

php.ini - isit la imaj la gen anviwònman pou estoke sesyon yo nan memcached

Nou itilize Varyab Anviwònman pou pase done sou lame ak memcached https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/.
Sa a pèmèt ou sèvi ak menm kòd la nan dev, etap, tès, anviwònman prod (non lame memcached nan yo pral diferan, kidonk nou bezwen pase yon non lame inik pou sesyon yo nan chak anviwònman).
Bitrix kachèt depo

Nou bezwen depo ki toleran fay ke tout gous ka ekri ak li nan men yo.

Nou itilize memcached tou.
Solisyon sa a rekòmande pa Bitrix tèt li.

$ helm install stable/memcached --name cache

bitrix/.settings_extra.php - isit la nan Bitrix li espesifye kote kachèt la estoke

Nou itilize tou varyab anviwònman yo.

Krontaski

Gen diferan apwòch pou kouri Crontasks nan Kubernetes.

  • deplwaman separe ak yon gous pou kouri Crontasks
  • cronjob pou egzekite crontasks (si sa a se yon aplikasyon entènèt - ak wget https://$host$cronjobname, oswa kubectl exec andedan youn nan gous travayè yo, elatriye)
  • elatriye.

Ou ka diskite sou youn ki pi kòrèk la, men nan ka sa a nou te chwazi opsyon "deplwaman separe ak gous pou Crontasks"

Ki jan li fè:

  • ajoute travay cron atravè ConfigMap oswa atravè fichye konfig/addcron la
  • nan yon egzanp nou lanse yon veso ki idantik ak gous travayè a + pèmèt ekzekisyon travay kouwòn nan li
  • se menm baz kòd yo itilize, gras a inifikasyon, asanble veso se senp

Ki bon nou jwenn:

  • nou gen k ap travay Crontasks nan yon anviwònman ki idantik ak anviwònman devlopè yo (docker)
  • Crontasks pa bezwen "reekri" pou Kubernetes, yo travay nan menm fòm ak nan menm baz kòd tankou anvan.
  • tout manm ekip ki gen dwa komèt nan branch pwodiksyon an ka ajoute travay cron, pa sèlman administratè yo

Southbridge K8SDeploy modil ak koreksyon kòd nan panèl admin

Nou t ap pale de ajou anba?
Ki jan yo dirije trafik la?
Hurray, nou te ekri yon modil pou sa a nan PHP :) Sa a se yon ti modil klasik pou Bitrix. Li poko disponib piblikman, men nou planifye pou ouvri li.
Modil la enstale tankou yon modil regilye nan Bitrix:

Southbridge nan Chelyabinsk ak Bitrix nan Kubernetes

Epi li sanble sa a:

Southbridge nan Chelyabinsk ak Bitrix nan Kubernetes

Li pèmèt ou mete yon bonbon ki idantifye administratè sit la epi ki pèmèt Kubernetes voye trafik nan gous ajou la.

Lè chanjman yo fini, ou bezwen klike sou git push, chanjman kòd yo pral voye bay git, Lè sa a, sistèm nan pral bati yon imaj ak yon nouvo vèsyon nan kòd la ak "woule" li atravè gwoup la, ranplase gous yo fin vye granmoun. .

Wi, li se yon ti jan nan beki, men an menm tan an nou kenbe achitekti mikwosèvis la epi yo pa retire itilizatè Bitrix opòtinite pi renmen yo pou korije kòd la nan panèl la admin. Nan fen a, sa a se yon opsyon; ou ka rezoud pwoblèm nan nan koreksyon kòd la nan yon fason diferan.

Tablo Helm

Pou konstwi aplikasyon sou Kubernetes, anjeneral nou itilize manadjè pake Helm.
Pou solisyon Bitrix nou an nan Kubernetes, Sergey Bondarev, dirijan administratè sistèm nou an, te ekri yon tablo Helm espesyal.

Li bati travayè, ugrade, cron gous, konfigirasyon antre, sèvis, epi transfere varyab soti nan sekrè Kubernetes nan gous.

Nou estoke kòd la nan Gitlab, epi nou tou kouri Helm bati nan Gitlab.

Nan ti bout tan, li sanble sa a

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

Helm tou pèmèt ou fè yon "san pwoblèm" rollback si toudenkou yon bagay ale mal pandan deplwaman. Li bon lè ou pa nan yon panik "ranje kòd la atravè ftp paske prod la tonbe," men Kubernetes fè li otomatikman, epi san D '.

Deplwaye

Wi, nou se fanatik Gitlab & Gitlab CI, nou itilize li :)
Lè Gitlab komèt nan depo pwojè a, Gitlab lanse yon tiyo ki deplwaye yon nouvo vèsyon anviwònman an.

Etap:

  • bati (konstwi yon nouvo imaj Docker)
  • tès (tès)
  • netwaye (retire anviwònman tès la)
  • pouse (nou voye li nan rejis Docker)
  • deplwaye (nou deplwaye aplikasyon an nan Kubernetes atravè Helm).

Southbridge nan Chelyabinsk ak Bitrix nan Kubernetes

Hurray, li pare, ann aplike li!
Oke, oswa poze kesyon si gen nenpòt.

Se konsa, kisa nou te fè

Soti nan yon pwen de vi teknik:

  • dockerized Bitrix;
  • "koupe" Bitrix nan resipyan, chak nan yo ki fè yon minimòm de fonksyon;
  • reyalize eta apatrid nan veso yo;
  • rezoud pwoblèm nan ak ajou Bitrix nan Kubernetes;
  • tout fonksyon Bitrix te kontinye travay (prèske tout);
  • Nou te travay sou deplwaman nan Kubernetes ak rollback ant vèsyon yo.

Soti nan yon pwen de vi biznis:

  • tolerans fòt;
  • Zouti Kubernetes (entegrasyon fasil ak Gitlab CI, deplwaman san pwoblèm, elatriye);
  • modpas sekrè (vizib sèlman pou moun ki gen aksè dirèkteman nan modpas yo);
  • Li bon pou kreye anviwonman adisyonèl (pou devlopman, tès, elatriye) nan yon sèl enfrastrikti.

Sous: www.habr.com

Add nouvo kòmantè