Southbridge sa Chelyabinsk ug Bitrix sa Kubernetes

Ang Sysadminka system administrator meetups nahitabo sa Chelyabinsk, ug sa kataposan naghatag kog report sa among solusyon sa pagpadagan sa mga aplikasyon sa 1C-Bitrix sa Kubernetes.

Bitrix, Kubernetes, Ceph - usa ka maayo nga sagol?

Isulti ko kanimo kung giunsa namon gihiusa ang usa ka nagtrabaho nga solusyon gikan sa tanan niini.

Tana!

Southbridge sa Chelyabinsk ug Bitrix sa Kubernetes

Ang meetup nahitabo niadtong Abril 18 sa Chelyabinsk. Makabasa ka bahin sa among mga panagkita sa Timepad ug tan-awa YouTube.

Kung gusto nimo nga moanhi kanamo nga adunay usa ka taho o ingon usa ka tigpaminaw - welcome, pagsulat sa [protektado sa email] ug sa Telegram t.me/vadimisakanov.

Akong report

Southbridge sa Chelyabinsk ug Bitrix sa Kubernetes

Mga slide

Solusyon "Bitrix sa Kubernetes, bersyon Southbridge 1.0"

Maghisgot ko bahin sa among solusyon sa "para sa mga dummies sa Kubernetes" nga pormat, sama sa gihimo sa miting. Apan gihunahuna ko nga nahibal-an nimo ang mga pulong nga Bitrix, Docker, Kubernetes, Ceph labing menos sa lebel sa mga artikulo sa Wikipedia.

Unsa ang andam na bahin sa Bitrix sa Kubernetes?

Adunay gamay kaayo nga kasayuran sa tibuuk nga Internet bahin sa operasyon sa mga aplikasyon sa Bitrix sa Kubernetes.
Nakit-an ra nako kini nga mga materyales:

Report ni Alexander Serbul, 1C-Bitrix, ug Anton Tuzlukov gikan sa Qsoft:

Girekomendar nako ang pagpaminaw niini.

Pagpalambo sa imong kaugalingon nga solusyon gikan sa tiggamit serkyron sa Habré.
Nakaplagan pa maong desisyon.

Aaand... actually, mao ra.

Gipasidan-an ko ikaw, wala namo gisusi ang kalidad sa mga solusyon sa mga link sa ibabaw :)
Pinaagi sa dalan, sa pag-andam sa among solusyon, nakigsulti ako kang Alexander Serbul, unya ang iyang taho wala pa makita, mao nga sa akong mga slide adunay usa ka butang nga "Ang Bitrix wala mogamit sa Kubernetes."

Apan adunay daghan na nga andam nga gihimo nga mga imahe sa Docker alang sa pagpadagan sa Bitrix sa Docker: https://hub.docker.com/search?q=bitrix&type=image

Igo na ba kini aron makahimo usa ka kompleto nga solusyon alang sa Bitrix sa Kubernetes?
Dili. Adunay daghang mga problema nga kinahanglan sulbaron.

Unsa ang mga problema sa Bitrix sa Kubernetes?

Una, ang andam nga mga imahe gikan sa Dockerhub dili angay alang sa Kubernetes

Kung gusto namong magtukod ug arkitektura sa microservices (ug sa Kubernetes kasagaran namong buhaton), kinahanglan namo nga ibulag ang among aplikasyon sa Kubernetes ngadto sa mga sudlanan ug ipabuhat sa matag sudlanan ang usa ka gamay nga function (ug buhaton kini og maayo). Nganong usa ra? Sa laktod, ang mas simple mas kasaligan.
Aron mas espesipiko, tan-awa kini nga artikulo ug video, palihug: https://habr.com/ru/company/southbridge/blog/426637/

Ang mga imahe sa Docker sa Dockerhub batakan nga gitukod sa tanan-sa-usa nga prinsipyo, mao nga kinahanglan pa namon nga maghimo sa among kaugalingon nga bisikleta ug bisan ang paghimo og mga imahe gikan sa wala.

Ikaduha - ang code sa site gi-edit gikan sa admin panel

Naghimo kami usa ka bag-ong seksyon sa site - gi-update ang code (usa ka direktoryo nga adunay ngalan sa bag-ong seksyon gidugang).

Kung imong giusab ang mga kabtangan sa usa ka component gikan sa admin panel, ang code nausab.

Ang mga Kubernetes "sa default" dili magamit niini; ang mga sudlanan kinahanglan nga walay estado.

Rason: Ang matag sudlanan (pod) sa cluster nagproseso lang og bahin sa trapiko. Kon imong usbon ang code sa usa lang ka sudlanan (pod), unya ang code mahimong lahi sa lain-laing pod, ang site molihok nga lahi, ug lain-laing mga bersyon sa site ipakita ngadto sa lain-laing mga tiggamit. Dili ka mabuhi nga ingon niana.

Ikatulo - kinahanglan nimo nga sulbaron ang isyu sa pag-deploy

Kung kami adunay usa ka monolith ug usa ka "classic" nga server, ang tanan yano ra: nag-deploy kami usa ka bag-ong base sa code, gibalhin ang database, gibalhin ang trapiko sa bag-ong bersyon sa code. Ang pagbalhin mahitabo dayon.
Kung kami adunay usa ka site sa Kubernetes, giputol sa mga microservice, adunay daghang mga sudlanan nga adunay code - oh. Kinahanglan nimo nga mangolekta og mga sudlanan nga adunay bag-ong bersyon sa code, i-roll out kini imbes ang mga daan, husto nga ibalhin ang database, ug labing maayo nga buhaton kini nga wala mamatikdi sa mga bisita. Maayo na lang, ang Kubernetes nagtabang kanamo niini, nga nagsuporta sa usa ka bug-os nga hugpong sa lainlaing mga lahi sa pag-deploy.

Ikaupat - kinahanglan nimo nga sulbaron ang isyu sa pagtipig sa mga static

Kung ang imong site "lamang" 10 gigabytes ug i-deploy nimo kini sa tibuuk nga mga sudlanan, mahuman ka sa 10 gigabyte nga mga sudlanan nga kinahanglan nga ma-deploy sa kahangturan.
Kinahanglan nimo nga tipigan ang "labing bug-at" nga mga bahin sa site sa gawas sa mga sudlanan, ug ang pangutana mitungha kung giunsa kini buhaton sa husto.

Unsa ang kulang sa among solusyon?

Ang tibuok Bitrix code wala gibahin sa microfunctions/microservices (aron bulag ang pagrehistro, bulag ang module sa online store, ug uban pa). Gitipigan namo ang tibuok code base sa matag sudlanan.

Dili usab namo tipigan ang database sa Kubernetes (nagpatuman gihapon ko og mga solusyon nga adunay database sa Kubernetes para sa development environment, pero dili para sa production).

Mamatikdan gihapon sa mga tagdumala sa site nga ang site nagdagan sa Kubernetes. Ang function nga "pagsusi sa sistema" dili molihok sa husto; aron ma-edit ang code sa site gikan sa admin panel, kinahanglan nimo nga i-klik una ang buton nga "Gusto ko i-edit ang code".

Ang mga problema nahibal-an, ang panginahanglan sa pagpatuman sa mga microservice nadeterminar, ang tumong mao ang tin-aw - aron makakuha og usa ka nagtrabaho nga sistema alang sa pagpadagan sa mga aplikasyon sa Bitrix sa Kubernetes, pagpreserbar sa mga kapabilidad sa Bitrix ug sa mga bentaha sa Kubernetes. Atong sugdan ang pagpatuman.

arkitektura

Adunay daghang "nagtrabaho" nga mga pod nga adunay web server (mga trabahante).
Usa sa ubos nga adunay mga buluhaton sa cron (usa ra ang gikinahanglan).
Usa ka pag-upgrade alang sa pag-edit sa code sa site gikan sa admin panel (usa ra usab ang gikinahanglan).

Southbridge sa Chelyabinsk ug Bitrix sa Kubernetes

Atong sulbaron ang mga pangutana:

  • Asa ibutang ang mga sesyon?
  • Asa ibutang ang cache?
  • Asa ibutang ang statics, dili ibutang ang gigabytes sa statics sa usa ka hugpong sa mga sudlanan?
  • Sa unsang paagi molihok ang database?

Imahe sa Docker

Nagsugod kami pinaagi sa paghimo og imahe sa Docker.

Ang sulundon nga kapilian mao nga kita adunay usa ka unibersal nga imahe, base niini makakuha kita mga worker pod, pod nga adunay Crontasks, ug upgrade pods.

Naghimo kami og ingon nga imahe.

Naglakip kini sa nginx, apache/php-fpm (mahimong mapili sa panahon sa pagtukod), msmtp alang sa pagpadala sa mail, ug cron.

Kung gi-assemble ang imahe, ang tibuuk nga base sa code sa site gikopya sa direktoryo sa / app (gawas sa mga bahin nga among ibalhin sa usa ka lahi nga gipaambit nga pagtipig).

Microservices, serbisyo

mga trabahante pod:

  • Container nga adunay nginx + container apache/php-fpm + msmtp
  • Wala kini molihok sa pagbalhin sa msmtp sa usa ka bulag nga microservice, ang Bitrix nagsugod sa pagkasuko nga dili kini makapadala direkta sa mail
  • Ang matag sudlanan adunay kompleto nga codebase.
  • Pagdili sa pagbag-o sa code sa mga sudlanan.

cron ubos sa:

  • sudlanan nga adunay apache, php, cron
  • kompleto nga code base gilakip
  • pagdili sa pagbag-o sa code sa mga sudlanan

upgrade ubos sa:

  • nginx container + apache/php-fpm container + msmtp
  • Walay pagdili sa pag-ilis sa code sa mga sudlanan

pagtipig sa sesyon

Pagtipig sa cache sa Bitrix

Laing importante nga butang: nagtipig kami mga password alang sa pagkonektar sa tanan, gikan sa database hangtod sa mail, sa mga sekreto sa kubernetes. Nakuha namo ang usa ka bonus: ang mga password makita lamang niadtong kinsa among gihatagan og access sa mga sekreto, ug dili sa tanan nga adunay access sa code base sa proyekto.

Pagtipig alang sa statics

Mahimo nimong gamiton ang bisan unsa: ceph, nfs (apan dili namo girekomenda ang nfs alang sa produksiyon), pagtipig sa network gikan sa mga cloud provider, ug uban pa.

Ang pagtipig kinahanglan nga konektado sa mga sudlanan sa / upload / direktoryo sa site ug uban pang mga direktoryo nga adunay static nga sulud.

Database

Alang sa kayano, among girekomendar ang pagbalhin sa database gawas sa Kubernetes. Ang base sa Kubernetes usa ka bulag nga komplikado nga buluhaton; kini maghimo sa laraw nga usa ka han-ay sa kadako nga labi ka komplikado.

Pagtipig sa sesyon

Gigamit namo ang memcached :)

Maayo ang pagdumala niini sa pagtipig sa sesyon, gipundok, ug gisuportahan "natively" isip session.save_path sa php. Ang ingon nga sistema gisulayan sa daghang mga higayon sa klasikal nga monolithic nga arkitektura, kung nagtukod kami mga pungpong nga adunay daghang mga web server. Para sa deployment naggamit mig timon.

$ helm install stable/memcached --name session

php.ini - dinhi ang imahe adunay mga setting alang sa pagtipig sa mga sesyon sa memcached

Gigamit namo ang Environment Variables sa pagpasa sa datos mahitungod sa mga host nga adunay memcached https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/.
Gitugotan ka niini nga gamiton ang parehas nga code sa dev, stage, test, prod environment (ang memcached host names niini magkalahi, mao nga kinahanglan namon nga ipasa ang usa ka talagsaon nga host name alang sa mga sesyon sa matag palibot).
Pagtipig sa cache sa Bitrix

Nagkinahanglan kami og fault-tolerant storage diin ang tanang pods makasulat ug makabasa.

Gigamit usab namo ang memcached.
Kini nga solusyon girekomenda sa Bitrix mismo.

$ helm install stable/memcached --name cache

bitrix/.settings_extra.php - dinhi sa Bitrix gipiho kung asa gitipigan ang cache

Gigamit usab namo ang Environment Variables.

Krontaski

Adunay lainlaing mga pamaagi sa pagpadagan sa Crontasks sa Kubernetes.

  • bulag nga deployment nga adunay pod para sa pagpadagan sa Crontasks
  • cronjob alang sa pagpatuman sa mga crontasks (kung kini usa ka web app - nga adunay wget https://$host$cronjobname, o kubectl exec sulod sa usa sa mga worker pod, ug uban pa)
  • ug uban pa

Mahimo ka makiglalis bahin sa labing tama, apan sa kini nga kaso gipili namon ang kapilian nga "bulag nga pag-deploy sa mga pod alang sa Crontasks"

Giunsa kini nahimo:

  • idugang ang mga buluhaton sa cron pinaagi sa ConfigMap o pinaagi sa config/addcron file
  • sa usa ka higayon naglunsad kami og usa ka sudlanan nga susama sa worker pod + tugotan ang pagpatuman sa mga buluhaton sa korona niini
  • gigamit ang parehas nga base sa code, salamat sa panaghiusa, yano ang pagpupulong sa sudlanan

Unsa ang kaayohan nga atong makuha:

  • kami adunay nagtrabaho nga Crontasks sa usa ka palibot nga parehas sa palibot sa mga developer (docker)
  • Ang mga Crontask dili kinahanglan nga "isulat pag-usab" alang sa mga Kubernetes, nagtrabaho sila sa parehas nga porma ug sa parehas nga base sa code sama kaniadto.
  • Ang mga buluhaton sa cron mahimong idugang sa tanan nga mga miyembro sa team nga adunay mga katungod sa pagtugyan sa sanga sa produksiyon, dili lang mga admin

Southbridge K8SDeploy module ug code editing gikan sa admin panel

Naghisgot kami bahin sa pag-upgrade sa ilawom?
Unsaon pagdirekta ang trapiko didto?
Hurray, nagsulat mi ug module para niini sa PHP :) Kini usa ka gamay nga classic module para sa Bitrix. Dili pa kini magamit sa publiko, apan plano namon nga ablihan kini.
Ang module gi-install sama sa usa ka regular nga module sa Bitrix:

Southbridge sa Chelyabinsk ug Bitrix sa Kubernetes

Ug ingon niini:

Southbridge sa Chelyabinsk ug Bitrix sa Kubernetes

Gitugotan ka niini nga magbutang usa ka cookie nga nagpaila sa tagdumala sa site ug gitugotan ang Kubernetes nga ipadala ang trapiko sa pag-upgrade pod.

Kung nahuman na ang mga pagbag-o, kinahanglan nimo nga i-klik ang git push, ang mga pagbag-o sa code ipadala sa git, unya ang sistema maghimo usa ka imahe nga adunay bag-ong bersyon sa code ug "i-roll out" kini tabok sa cluster, ilisan ang mga daan nga pods. .

Oo, kini usa ka gamay nga crutch, apan sa samang higayon among gipadayon ang microservice nga arkitektura ug dili kuhaa gikan sa mga tiggamit sa Bitrix ang ilang paborito nga oportunidad sa pagtul-id sa code gikan sa admin panel. Sa katapusan, kini usa ka kapilian; mahimo nimong masulbad ang problema sa pag-edit sa code sa lahi nga paagi.

Helm nga tsart

Aron makahimo og mga aplikasyon sa Kubernetes, kasagaran namong gamiton ang Helm package manager.
Alang sa among solusyon sa Bitrix sa Kubernetes, si Sergey Bondarev, among nanguna nga tagdumala sa sistema, nagsulat usa ka espesyal nga tsart sa Helm.

Nagtukod kini og trabahante, ugrade, mga cron pod, nag-configure sa mga pagsulod, mga serbisyo, ug nagbalhin sa mga variable gikan sa mga sekreto sa Kubernetes ngadto sa mga pod.

Gitipigan namo ang code sa Gitlab, ug gipadagan usab namo ang Helm build gikan sa Gitlab.

Sa laktod nga pagkasulti, ingon niini ang hitsura

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

Gitugotan ka usab sa Helm nga maghimo usa ka "seamless" nga pag-rollback kung kalit nga adunay sayup sa panahon sa pag-deploy. Nindot kini kung wala ka sa kalisang "ayo ang code pinaagi sa ftp tungod kay nahulog ang prod," apan awtomatiko kini nga gihimo sa Kubernetes, ug wala’y paghunong.

Ipakaylap

Oo, kami mga tagahanga sa Gitlab & Gitlab CI, gigamit namon kini :)
Kung nag-commit sa Gitlab sa repository sa proyekto, ang Gitlab naglansad usa ka pipeline nga nag-deploy og bag-ong bersyon sa palibot.

Mga hugna:

  • pagtukod (pagtukod og bag-ong imahe sa Docker)
  • pagsulay (pagsulay)
  • paglimpyo (pagkuha sa palibot sa pagsulay)
  • pagduso (gipadala namo kini sa rehistro sa Docker)
  • deploy (among i-deploy ang aplikasyon sa Kubernetes pinaagi sa Helm).

Southbridge sa Chelyabinsk ug Bitrix sa Kubernetes

Hurray, andam na, atong ipatuman!
Aw, o pangutana kung naa.

So unsa among gibuhat

Gikan sa teknikal nga punto sa panglantaw:

  • gi-docker nga Bitrix;
  • "giputol" ang Bitrix sa mga sudlanan, nga ang matag usa adunay labing gamay nga mga gimbuhaton;
  • nakab-ot nga stateless nga kahimtang sa mga sudlanan;
  • nasulbad ang problema sa pag-update sa Bitrix sa Kubernetes;
  • ang tanan nga mga gimbuhaton sa Bitrix nagpadayon sa pagtrabaho (halos tanan);
  • Nagtrabaho kami sa pag-deploy sa Kubernetes ug pag-rollback tali sa mga bersyon.

Gikan sa panglantaw sa negosyo:

  • pagtugot sa sayup;
  • Mga gamit sa Kubernetes (sayon ​​nga pag-integrate sa Gitlab CI, seamless deployment, etc);
  • tinago nga mga password (makita ra sa mga direktang gihatagan og access sa mga password);
  • Kombenyente ang paghimo og dugang nga mga palibot (para sa kalamboan, mga pagsulay, ug uban pa) sulod sa usa ka imprastraktura.

Source: www.habr.com

Idugang sa usa ka comment