{"id":35581,"date":"2019-10-31T22:05:09","date_gmt":"2019-10-31T19:05:09","guid":{"rendered":"https:\/\/prohoster.info\/blog\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes\/"},"modified":"2019-10-31T22:05:09","modified_gmt":"2019-10-31T19:05:09","slug":"southbridge-v-chelyabinske-i-bitriks-v-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes","title":{"rendered":"Southbridge din Chelyabinsk \u0219i Bitrix \u00een Kubernetes.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00cen Chelyabinsk au loc \u00eent\u00e2lniri ale sistemelor administra\u021biilor Sysadminka, iar la ultima dintre ele am sus\u021binut o prezentare despre solu\u021bia noastr\u0103 pentru aplicarea 1C-Bitrix \u00een Kubernetes.<\/p>\n<p><\/p>\n<p>Bitrix, Kubernetes, Ceph - un amestec excelent?<\/p>\n<p><\/p>\n<p>Voi povesti cum am reu\u0219it s\u0103 construim o solu\u021bie func\u021bional\u0103 din toate acestea.<\/p>\n<p><\/p>\n<p>Configurarea Mitogen pentru Ansible este foarte simpl\u0103:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge din Chelyabinsk \u0219i Bitrix \u00een Kubernetes.\" src=\"\/wp-content\/uploads\/3f1b760eeab9dc07124a6353ccd2f004.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>\u00cent\u00e2lnirea a avut loc pe 18 aprilie \u00een Chelyabinsk. Despre \u00eent\u00e2lnirile noastre pute\u021bi citi \u00een <noindex><a rel=\"nofollow\" href=\"https:\/\/sysadminka.timepad.ru\">Timepad<\/a><\/noindex> \u0219i verifica pe <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/channel\/UCMblNgU0Gt-TXb9GdVeeinw\/\">youtube<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Dac\u0103 dori\u021bi s\u0103 veni\u021bi la noi cu o prezentare sau ca ascult\u0103tor - sunte\u021bi bineveni\u021bi, scrie\u021bi la vadim.isakanov@gmail.com \u0219i pe Telegram t.me\/vadimisakanov. <\/p>\n<p><\/p>\n<h2 id=\"moy-doklad\">Prezentarea mea<\/h2>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MZqPNMUjr_M\" title=\"Prezentare despre Bitrix \u00een Kubernetes\"><img decoding=\"async\" alt=\"Southbridge din Chelyabinsk \u0219i Bitrix \u00een Kubernetes.\" src=\"\/wp-content\/uploads\/eb02d3ceb8248faad927c2bcae0074de.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/yadi.sk\/i\/1q0YpFHBGBdtcg\">Slide-uri<\/a><\/noindex><\/p>\n<p><\/p>\n<h2 id=\"reshenie-bitriks-v-kubernetes-versiya-southbridge-10\">Solu\u021bia \u201eBitrix \u00een Kubernetes, versiunea Southbridge 1.0\u201d<\/h2>\n<p><\/p>\n<p>Voi vorbi despre solu\u021bia noastr\u0103 \u00eentr-un format \u201epentru \u00eencep\u0103tori \u00een Kubernetes\u201d, a\u0219a cum a fost prezentat\u0103 la \u00eent\u00e2lnire. Dar presupun c\u0103 termenii Bitrix, Docker, Kubernetes, Ceph v\u0103 sunt cunoscu\u021bi cel pu\u021bin la nivel de articole pe Wikipedia.<\/p>\n<p><\/p>\n<h4 id=\"chto-voobsche-est-gotovogo-pro-bitriks-v-kubernetes\">Ce informa\u021bii exist\u0103 despre Bitrix \u00een Kubernetes?<\/h4>\n<p><\/p>\n<p>Pe internet exist\u0103 foarte pu\u021bine informa\u021bii despre func\u021bionarea aplica\u021biilor cu Bitrix \u00een Kubernetes.<br \/>\nAm g\u0103sit doar urm\u0103toarele materiale:<\/p>\n<p><\/p>\n<p>Prezentarea lui Alexandru Serbul, 1C-Bitrix, \u0219i Anton Tuzlukov de la Qsoft: <\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"lHK4eOvLbRM\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/lHK4eOvLbRM\/hqdefault.jpg\" alt=\"Reda\u021bi video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p>Recomand s\u0103-l asculta\u021bi.<\/p>\n<p><\/p>\n<p>Dezvoltarea unei solu\u021bii proprii de utilizator <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/serkyron\/\" class=\"user_link\">serkyron<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/351286\/\">pe Habr<\/a><\/noindex>.<br \/>\nAm g\u0103sit \u0219i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ESSch\/kubernetes\">o astfel de solu\u021bie<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>\u0218i\u2026 cam at\u00e2t.<\/p>\n<p><\/p>\n<p>V\u0103 avertizez, nu am verificat calitatea solu\u021biilor de la linkurile de mai sus \ud83d\ude42<br \/>\nApropo, \u00een preg\u0103tirea solu\u021biei noastre am discutat cu Alexandru Serbul, prezentarea lui nu era disponibil\u0103 atunci, a\u0219a c\u0103 \u00een slide-urile mele exist\u0103 un punct denumind \u201eBitrix nu folose\u0219te Kubernetes\u201d.<\/p>\n<p><\/p>\n<p>Dar exist\u0103 deja multe imagini Docker gata preg\u0103tite pentru a lucra cu Bitrix \u00een Docker: <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/search?q=bitrix&amp;type=image\">https:\/\/hub.docker.com\/search?q=bitrix&amp;type=image<\/a><\/noindex> <\/p>\n<p><\/p>\n<p>Este suficient pentru a crea o solu\u021bie complet\u0103 pentru Bitrix \u00een Kubernetes?<br \/>\nNu. Exist\u0103 o mul\u021bime de probleme care trebuie rezolvate.<\/p>\n<p><\/p>\n<h4 id=\"v-chem-problemy-s-bitriks-v-kubernetes\">Care sunt problemele cu Bitrix \u00een Kubernetes?<\/h4>\n<p><\/p>\n<p><strong>Prima - imaginile preg\u0103tite din Dockerhub nu sunt potrivite pentru Kubernetes.<\/strong><\/p>\n<p><\/p>\n<p>Dac\u0103 dorim s\u0103 construim o arhitectur\u0103 bazat\u0103 pe microservicii (\u0219i \u00een Kubernetes de obicei dorim), aplica\u021bia \u00een Kubernetes trebuie s\u0103 fie \u00eemp\u0103r\u021bit\u0103 \u00een containere \u0219i s\u0103 ne asigur\u0103m c\u0103 fiecare container \u00eendepline\u0219te o mic\u0103 func\u021bie (\u0219i o face bine). De ce doar una? Pe scurt - cu c\u00e2t este mai simplu, cu at\u00e2t mai fiabil.<br \/>\nDac\u0103 dori\u021bi o explicare mai detaliat\u0103 - v\u0103 rog s\u0103 viziona\u021bi acest articol \u0219i video: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/426637\/\">https:\/\/habr.com\/ru\/company\/southbridge\/blog\/426637\/<\/a><\/noindex> <\/p>\n<p><\/p>\n<p>Imaginile Docker din Dockerhub sunt construite \u00een principal pe principiul \u201etotul \u00eentr-unul\u201d, a\u0219a c\u0103 a trebuit s\u0103 ne cre\u0103m propria solu\u021bie \u0219i chiar s\u0103 facem imaginile de la zero.<\/p>\n<p><\/p>\n<p><strong>A doua - codul site-ului este modificat din panoul de administrare.<\/strong><\/p>\n<p><\/p>\n<p>Am creat o nou\u0103 sec\u021biune pe site \u2014 codul s-a actualizat (a fost ad\u0103ugat\u0103 un director cu denumirea noii sec\u021biuni).<\/p>\n<p><\/p>\n<p>Am modificat propriet\u0103\u021bile componentei din panoul de administrare \u2014 codul s-a schimbat.<\/p>\n<p><\/p>\n<p>Kubernetes \u201edin start\u201d nu poate lucra astfel, containerele trebuie s\u0103 fie nemodificabile (Stateless).<\/p>\n<p><\/p>\n<p>Motivul: fiecare container (pod) din cluster proceseaz\u0103 doar o parte din trafic. Dac\u0103 modifici codul doar \u00eentr-un singur container (pod), atunci \u00een diferite poduri codul va fi diferit, site-ul va func\u021biona diferit, utilizatorilor le vor fi ar\u0103tate versiuni diferite ale site-ului. A\u0219a nu se poate tr\u0103i.<\/p>\n<p><\/p>\n<p><strong>Al treilea \u2014 trebuie s\u0103 rezolv\u0103m problema cu deployment-ul.<\/strong><\/p>\n<p><\/p>\n<p>Dac\u0103 avem un monolit \u0219i un server \u201eclasic\u201d, totul este foarte simplu: desf\u0103\u0219ur\u0103m o nou\u0103 baz\u0103 de cod, efectu\u0103m migrarea bazei de date, redirec\u021bion\u0103m traficul c\u0103tre noua versiune a codului. Schimbarea se face instantaneu.<br \/>\nDac\u0103 avem un site \u00een Kubernetes, \u00eemp\u0103r\u021bit pe microservicii, cu multe containere cu cod \u2014 oh. Trebuie s\u0103 construim containere cu noua versiune a codului, s\u0103 le lans\u0103m \u00een locul celor vechi, s\u0103 efectu\u0103m corect migrarea bazei de date, iar ideal ar fi s\u0103 facem acest lucru f\u0103r\u0103 ca vizitatorii s\u0103 observe. Din fericire, Kubernetes ne ajut\u0103 \u00een acest sens, sus\u021bin\u00e2nd o varietate de tipuri de deployment.<\/p>\n<p><\/p>\n<p><strong>Al patrulea \u2014 trebuie s\u0103 rezolv\u0103m problema cu stocarea staticei.<\/strong><\/p>\n<p><\/p>\n<p>Dac\u0103 site-ul vostru are \u201edoar\u201d 10 gigabytes \u0219i \u00eel desf\u0103\u0219ura\u021bi complet \u00een containere, ve\u021bi ob\u021bine containere de 10 gigabytes care se vor desf\u0103\u0219ura o eternitate.<br \/>\nTrebuie s\u0103 stoc\u0103m cele mai \u201egrele\u201d p\u0103r\u021bi ale site-ului \u00een afara containerelor, \u0219i apare \u00eentrebarea cum s\u0103 facem acest lucru corect.<\/p>\n<p><\/p>\n<h4 id=\"chego-net-v-nashem-reshenii\">Ce nu exist\u0103 \u00een solu\u021bia noastr\u0103.<\/h4>\n<p><\/p>\n<p>\u00centreg codul Bitrix nu este \u00eemp\u0103r\u021bit pe microfunc\u021bii\/microservicii (astfel \u00eenc\u00e2t, \u00eenregistrarea s\u0103 fie separat\u0103, modulul de magazin online separat, etc.). \u00centreaga baz\u0103 de cod o p\u0103str\u0103m \u00een fiecare container \u00een \u00eentregime.<\/p>\n<p><\/p>\n<p>Baza de date nici \u00een Kubernetes nu este stocat\u0103 (totu\u0219i am implementat solu\u021bii cu baza \u00een Kubernetes pentru medii de dezvoltare, dar nu pentru produc\u021bie).<\/p>\n<p><\/p>\n<p>Administra\u021bia site-ului va observa totu\u0219i c\u0103 site-ul func\u021bioneaz\u0103 \u00een Kubernetes. Func\u021bia \u201everificarea sistemului\u201d nu func\u021bioneaz\u0103 corect; pentru a edita codul site-ului din panoul de administrare, trebuie mai \u00eent\u00e2i s\u0103 ap\u0103sa\u021bi butonul \u201evreau s\u0103 editez codul\u201d.<\/p>\n<p><\/p>\n<p>Am identificat problemele, am stabilit necesitatea implement\u0103rii microserviciilor, obiectivul este clar - a ob\u021bine un sistem func\u021bional pentru aplica\u021biile Bitrix \u00een Kubernetes, p\u0103str\u00e2nd at\u00e2t func\u021bionalit\u0103\u021bile Bitrix, c\u00e2t \u0219i avantajele Kubernetes. \u00cencepem implementarea.<\/p>\n<p><\/p>\n<h4 id=\"arhitektura\">Arhitectur\u0103<\/h4>\n<p><\/p>\n<p>Multe \u00abnoduri de lucru\u00bb cu server web (worker&#8217;ii).<br \/>\nUn pod cu sarcini cron (numai unul este obligatoriu).<br \/>\nUn pod de upgrade pentru editarea codului site-ului din panoul de administrare (de asemenea, obligatoriu doar unul).<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge din Chelyabinsk \u0219i Bitrix \u00een Kubernetes.\" src=\"\/wp-content\/uploads\/e26a787c11f78811b15a89f597331ef1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Rezolv\u0103m problemele:<\/p>\n<p><\/p>\n<ul>\n<li>Unde s\u0103 stoc\u0103m sesiunile?<\/li>\n<li>Unde s\u0103 stoc\u0103m cache-ul?<\/li>\n<li>Unde s\u0103 stoc\u0103m fi\u0219ierele statice, nu putem pune gigabytes de fi\u0219iere statice \u00eentr-o mul\u021bime de containere?<\/li>\n<li>Cum va func\u021biona baza de date?<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"docker-obraz\">Imagine Docker<\/h4>\n<p><\/p>\n<p>\u00cencepem cu construirea imaginii Docker.<\/p>\n<p><\/p>\n<p>Varianta ideal\u0103 - avem o imagine universal\u0103, pe baza ei ob\u021binem at\u00e2t poduri worker, c\u00e2t \u0219i poduri cu sarcini cron \u0219i poduri de upgrade.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/centosadmin\/bitrixenv\">Am creat o astfel de imagine.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Aceasta include nginx, apache\/php-fpm (poate fi ales la construc\u021bie), msmtp pentru trimiterea de emailuri \u0219i cron.<\/p>\n<p><\/p>\n<p>La construirea imaginii, \u00eentregul cod surs\u0103 al site-ului este copiat \u00een directorul \/app (cu excep\u021bia p\u0103r\u021bilor pe care le vom muta \u00eentr-un stocare partajat\u0103 separat\u0103).<\/p>\n<p><\/p>\n<h4 id=\"mikroservisnost-servisy\">Microservicii, servicii<\/h4>\n<p><\/p>\n<p><strong>poduri worker:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>container cu nginx + container apache\/php-fpm + msmtp<\/li>\n<li>msmtp nu a putut fi mutat \u00eentr-un microserviciu separat, Bitrix \u00eencepe s\u0103 protesteze c\u0103 nu poate trimite emailuri direct.<\/li>\n<li>Fiecare container are \u00eentregul cod surs\u0103.<\/li>\n<li>Interzicerea modific\u0103rii codului \u00een containere.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>pod cron:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>container cu apache, php, cron<\/li>\n<li>\u00een pachet se afl\u0103 \u00eentregul cod surs\u0103<\/li>\n<li>interzicerea modific\u0103rii codului \u00een containere<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>pod de upgrade:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>container cu nginx + container apache\/php-fpm + msmtp<\/li>\n<li>nu exist\u0103 interdic\u021bie de modificare a codului \u00een containere<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>stocarea sesiunilor<\/strong><\/p>\n<p><\/p>\n<p><strong>stocarea cache-ului Bitrix<\/strong><\/p>\n<p><\/p>\n<p>De asemenea, este important: parolele pentru conectarea la tot, de la baze de date la email, le stoc\u0103m \u00een secretele Kubernetes. Ob\u021binem un avantaj, parolele sunt vizibile doar pentru cei c\u0103rora le oferim acces la secrete, nu tuturor celor care au acces la codul surs\u0103 al proiectului.<\/p>\n<p><\/p>\n<h4 id=\"hranilische-dlya-statiki\">Stocarea pentru fi\u0219iere statice<\/h4>\n<p><\/p>\n<p>Putem folosi orice: ceph, nfs (dar nfs nu este recomandat pentru produc\u021bie), stocare de re\u021bea de la furnizorii 'cloud', etc.<\/p>\n<p><\/p>\n<p>Va trebui s\u0103 conect\u0103m stocarea \u00een containere \u00een directorul \/upload\/ al site-ului \u0219i \u00een alte directoare cu fi\u0219iere statice.<\/p>\n<p><\/p>\n<h4 id=\"baza-dannyh\">Baza de date<\/h4>\n<p><\/p>\n<p>Pentru simplitate, recomand\u0103m s\u0103 scoatem baza din Kubernetes. O baz\u0103 \u00een Kubernetes este o sarcin\u0103 complicat\u0103 separat\u0103, va face schema mult mai complex\u0103.<\/p>\n<p><\/p>\n<h4 id=\"hranilische-sessiy\">Stocarea sesiunilor<\/h4>\n<p><\/p>\n<p>Folosim memcached \ud83d\ude42<\/p>\n<p><\/p>\n<p>Se descurc\u0103 bine cu stocarea sesiunilor, este clusterizat \u0219i este suportat \u201enativ\u201d ca session.save_path \u00een php. Un astfel de sistem a fost testat de multe ori \u00een arhitectura monolitic\u0103 clasic\u0103, c\u00e2nd construam clustere cu un num\u0103r mare de servere web. Pentru desf\u0103\u0219urare, folosim helm.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ helm install stable\/memcached --name session<\/code><\/pre>\n<p><\/p>\n<p>php.ini \u2013 aici sunt definite set\u0103rile pentru stocarea sesiunilor \u00een memcached<\/p>\n<p><\/p>\n<p>Am folosit variabile de mediu pentru a transmite datele despre hosturile cu memcached <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/inject-data-application\/define-environment-variable-container\/\">https:\/\/kubernetes.io\/docs\/tasks\/inject-data-application\/define-environment-variable-container\/<\/a><\/noindex>.<br \/>\nAceasta permite utilizarea aceluia\u0219i cod \u00een medii dev, stage, test, prod (numele hosturilor memcached \u00een ele vor fi diferite, de aceea pentru fiecare mediu trebuie s\u0103 transmitem un nume unic al hosturilor pentru sesiuni).<br \/>\nStocarea cache-ului Bitrix<\/p>\n<p><\/p>\n<p>Avem nevoie de un stocaj rezistent la erori, \u00een care toate podurile s\u0103 poat\u0103 scrie \u0219i din care s\u0103 poat\u0103 citi.<\/p>\n<p><\/p>\n<p>De asemenea, folosim memcached.<br \/>\nAceast\u0103 solu\u021bie este recomandat\u0103 de Bitrix \u00een sine.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ helm install stable\/memcached --name cache<\/code><\/pre>\n<p><\/p>\n<p>bitrix\/.settings_extra.php \u2013 aici \u00een Bitrix este specificat unde stoc\u0103m cache-ul<\/p>\n<p><\/p>\n<p>De asemenea, folosim variabile de mediu.<\/p>\n<p><\/p>\n<h3 id=\"krontaski\">Cron tasks<\/h3>\n<p><\/p>\n<p>Exist\u0103 diferite abord\u0103ri pentru executarea cron task-urilor \u00een Kubernetes.<\/p>\n<p><\/p>\n<ul>\n<li>o desf\u0103\u0219urare separat\u0103 cu un pod pentru executarea cron task-urilor<\/li>\n<li>cronjob pentru executarea cron task-urilor (dac\u0103 este aplica\u021bie web \u2014 cu wget <noindex>https:\/\/$host$cronjobname<\/noindex>, sau kubectl exec \u00een interiorul unuia dintre podurile worker, etc.)<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p><\/p>\n<p>Se poate discuta despre varianta corect\u0103, dar \u00een acest caz am ales op\u021biunea &#171;deployment separat cu noduri pentru crontasks&#187;.<\/p>\n<p><\/p>\n<p>Cum este realizat:<\/p>\n<p><\/p>\n<ul>\n<li>ad\u0103ug\u0103m cron-task-urile prin ConfigMap sau prin fi\u0219ierul config\/addcron<\/li>\n<li>\u00eentr-un singur exemplar lans\u0103m un container, identic cu podul worker + permitem executarea cron-task-urilor \u00een el<\/li>\n<li>se folose\u0219te aceea\u0219i baz\u0103 de cod, datorit\u0103 unific\u0103rii construc\u021bia containerului este simpl\u0103<\/li>\n<\/ul>\n<p><\/p>\n<p>Ce beneficii ob\u021binem:<\/p>\n<p><\/p>\n<ul>\n<li>avem cron-task-uri func\u021bionale \u00eentr-un mediu identic cu cel al dezvoltatorilor (docker)<\/li>\n<li>Crontasks nu trebuie &#171;rescrise&#187; pentru Kubernetes, ele func\u021bioneaz\u0103 \u00een aceea\u0219i form\u0103 \u0219i \u00een aceea\u0219i baz\u0103 de cod ca \u00eenainte.<\/li>\n<li>cron-task-urile pot fi ad\u0103ugate de to\u021bi membrii echipei cu drepturi de commit \u00een ramura de produc\u021bie, nu doar de administratori<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"modul-southbridge-k8sdeploy-i-redaktirovanie-koda-iz-admin-paneli\">Modulul Southbridge K8SDeploy \u0219i editarea codului din panoul de administrare<\/h3>\n<p><\/p>\n<p>De fapt, vorbeam despre upgrade-ul pod-ului?<br \/>\n\u0218i cum direc\u021bion\u0103m traficul acolo?<br \/>\nUra, am scris un modul pentru aceasta \u00een php \ud83d\ude42 Este un mic modul clasic pentru Bitrix. \u00ce \u00eenc\u0103 nu este disponibil public, dar pl\u0103nuim s\u0103-l deschidem.<br \/>\nModulul se instaleaz\u0103 ca un modul obi\u0219nuit \u00een Bitrix:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge din Chelyabinsk \u0219i Bitrix \u00een Kubernetes.\" src=\"\/wp-content\/uploads\/ba9f895ce645862c7ba003d523cd5656.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i arat\u0103 astfel:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge din Chelyabinsk \u0219i Bitrix \u00een Kubernetes.\" src=\"\/wp-content\/uploads\/916ae9243fae9f6405cc68174ec5bb2b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Permite setarea unui cookie care identific\u0103 administratorul site-ului \u0219i permite Kubernetes s\u0103 redirec\u021bioneze traficul c\u0103tre upgrade pod.<\/p>\n<p><\/p>\n<p>C\u00e2nd modific\u0103rile sunt finalizate, trebuie s\u0103 ap\u0103sa\u021bi git push, modific\u0103rile codului vor fi trimise \u00een git, apoi sistemul va construi o imagine cu noua versiune a codului \u0219i o va distribui \u00een cluster, \u00eenlocuind podurile vechi.<\/p>\n<p><\/p>\n<p>Da, este pu\u021bin mai complicat, dar \u00een acela\u0219i timp p\u0103str\u0103m arhitectura microserviciilor \u0219i nu lu\u0103m utilizatorilor Bitrix op\u021biunea preferat\u0103 de a modifica codul din panoul de administrare. La urma urmei, este o op\u021biune, pute\u021bi rezolva problema modific\u0103rii codului \u00een alt mod.<\/p>\n<p><\/p>\n<h4 id=\"helm-chart\">Chart Helm<\/h4>\n<p><\/p>\n<p>Pentru construirea aplica\u021biilor \u00een Kubernetes, de obicei, folosim managerul de pachete Helm.<br \/>\nPentru solu\u021bia noastr\u0103 Bitrix \u00een Kubernetes, Serghei Bondarev, administratorul nostru de sistem principal, a scris un chart Helm special.<\/p>\n<p><\/p>\n<p>El realizeaz\u0103 construirea worker-ului, upgrade-ul, nodurile cron, configureaz\u0103 ingress&#8217;urile, serviciile, transmite variabile din secretele Kubernetes \u00een noduri.<\/p>\n<p><\/p>\n<p>Codul \u00eel stoc\u0103m \u00een Gitlab, iar construc\u021bia Helm o lans\u0103m tot din Gitlab.<\/p>\n<p><\/p>\n<p>Pe scurt, arat\u0103 cam a\u0219a<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ helm upgrade --install project .helm --set image=registrygitlab.local\/k8s\/bitrix -f .helm\/values.yaml --wait --timeout 300 --debug --tiller-namespace=production<\/code><\/pre>\n<p><\/p>\n<p>De asemenea, Helm permite s\u0103 efectuezi un rollback \u201ef\u0103r\u0103 cusur\u201d, dac\u0103, dintr-o dat\u0103, ceva nu a mers bine la deploy. Este pl\u0103cut c\u00e2nd nu e\u0219ti \u00een panic\u0103 \u201efix\u00e2nd codul pe ftp, pentru c\u0103 produc\u021bia a c\u0103zut\u201d, ci Kubernetes face asta automat, f\u0103r\u0103 downtime.<\/p>\n<p><\/p>\n<h4 id=\"deploy\">Deploy<\/h4>\n<p><\/p>\n<p>Da, suntem fani Gitlab &amp; Gitlab CI, \u00eel folosim \ud83d\ude42<br \/>\nLa commit \u00een Gitlab \u00een repository-ul proiectului, Gitlab lanseaz\u0103 un pipeline care desf\u0103\u0219oar\u0103 o nou\u0103 versiune a mediului.<\/p>\n<p><\/p>\n<p>Etapele:<\/p>\n<p><\/p>\n<ul>\n<li>build (construim o nou\u0103 imagine Docker)<\/li>\n<li>test (test\u0103m)<\/li>\n<li>clean up (\u0219tergem mediu de testare)<\/li>\n<li>push (\u00eel trimitem \u00een Docker registry)<\/li>\n<li>deploy (desf\u0103\u0219ur\u0103m aplica\u021bia \u00een Kubernetes prin Helm).<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge din Chelyabinsk \u0219i Bitrix \u00een Kubernetes.\" src=\"\/wp-content\/uploads\/74e565a0793b90c3cc19b8c7dedaff34.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ura, este gata, implement\u0103m!<br \/>\nSau punem \u00eentreb\u0103ri, dac\u0103 sunt.<\/p>\n<p><\/p>\n<h2 id=\"itak-chto-my-sdelali\">Deci, ce am realizat<\/h2>\n<p><\/p>\n<p><strong>Din punct de vedere tehnic:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>am dockerizat Bitrix;<\/li>\n<li>am \u201et\u0103iat\u201d Bitrix \u00een containere, fiecare av\u00e2nd func\u021bii minime;<\/li>\n<li>am ob\u021binut un stateless pentru containere;<\/li>\n<li>am rezolvat problema actualiz\u0103rii Bitrix \u00een Kubernetes;<\/li>\n<li>toate func\u021biile Bitrix au continuat s\u0103 func\u021bioneze (aproape toate);<\/li>\n<li>am finalizat deploy-ul \u00een Kubernetes \u0219i rollback-ul \u00eentre versiuni.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Din punct de vedere al afacerii:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>rezilien\u021b\u0103;<\/li>\n<li>instrumente Kubernetes (integr\u0103ri simple cu Gitlab CI, deploy f\u0103r\u0103 cusur, etc);<\/li>\n<li>parole \u00een secrete (vizibile doar celor c\u0103ror li s-a acordat direct acces la parole);<\/li>\n<li>Este convenabil s\u0103 creezi medii suplimentare (pentru dezvoltare, teste etc.) \u00een cadrul unei singure infrastructuri.<\/li>\n<\/ul>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/456608\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u0427\u0435\u043b\u044f\u0431\u0438\u043d\u0441\u043a\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u043c\u0438\u0442\u0430\u043f\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u0432 Sysadminka, \u0438 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0438\u0437 \u043d\u0438\u0445 \u044f \u0434\u0435\u043b\u0430\u043b \u0434\u043e\u043a\u043b\u0430\u0434 \u043e \u043d\u0430\u0448\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 1\u0421-\u0411\u0438\u0442\u0440\u0438\u043a\u0441 \u0432 Kubernetes. \u0411\u0438\u0442\u0440\u0438\u043a\u0441, Kubernetes, \u0421eph \u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u0441\u043c\u0435\u0441\u044c? \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043c\u044b \u0438\u0437 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041f\u043e\u0435\u0445\u0430\u043b\u0438! \u041c\u0438\u0442\u0430\u043f \u043f\u0440\u043e\u0448\u0435\u043b 18 \u0430\u043f\u0440\u0435\u043b\u044f \u0427\u0435\u043b\u044f\u0431\u0438\u043d\u0441\u043a\u0435. \u041f\u0440\u043e \u043d\u0430\u0448\u0438 \u043c\u0438\u0442\u0430\u043f\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 Timepad \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35581","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u0427\u0435\u043b\u044f\u0431\u0438\u043d\u0441\u043a\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u043c\u0438\u0442\u0430\u043f\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u0432 Sysadminka, \u0438 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0438\u0437 \u043d\u0438\u0445 \u044f \u0434\u0435\u043b\u0430\u043b \u0434\u043e\u043a\u043b\u0430\u0434 \u043e \u043d\u0430\u0448\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 1\u0421-\u0411\u0438\u0442\u0440\u0438\u043a\u0441 \u0432 Kubernetes. \u0411\u0438\u0442\u0440\u0438\u043a\u0441, Kubernetes, \u0421eph \u2014.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Southbridge \u0432 \u0427\u0435\u043b\u044f\u0431\u0438\u043d\u0441\u043a\u0435 \u0438 \u0411\u0438\u0442\u0440\u0438\u043a\u0441 \u0432 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u0427\u0435\u043b\u044f\u0431\u0438\u043d\u0441\u043a\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u043c\u0438\u0442\u0430\u043f\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u0432 Sysadminka, \u0438 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0438\u0437 \u043d\u0438\u0445 \u044f \u0434\u0435\u043b\u0430\u043b \u0434\u043e\u043a\u043b\u0430\u0434 \u043e \u043d\u0430\u0448\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 1\u0421-\u0411\u0438\u0442\u0440\u0438\u043a\u0441 \u0432 Kubernetes. \u0411\u0438\u0442\u0440\u0438\u043a\u0441, Kubernetes, \u0421eph \u2014.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:05:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:05:09+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Southbridge \u00een Celiabinsk \u0219i Bitrix \u00een Kubernetes | ProHoster","description":"\u00cen Celiabinsk au avut loc \u00eent\u00e2lniri ale administratorilor de sistem Sysadminka, iar la ultima dintre ele am sus\u021binut o prezentare despre solu\u021bia noastr\u0103 pentru rularea aplica\u021biilor pe 1C-Bitrix \u00een Kubernetes. Bitrix, Kubernetes, Ceph.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Southbridge \u0432 \u0427\u0435\u043b\u044f\u0431\u0438\u043d\u0441\u043a\u0435 \u0438 \u0411\u0438\u0442\u0440\u0438\u043a\u0441 \u0432 Kubernetes | ProHoster","og:description":"\u0412 \u0427\u0435\u043b\u044f\u0431\u0438\u043d\u0441\u043a\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u043c\u0438\u0442\u0430\u043f\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u0432 Sysadminka, \u0438 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0438\u0437 \u043d\u0438\u0445 \u044f \u0434\u0435\u043b\u0430\u043b \u0434\u043e\u043a\u043b\u0430\u0434 \u043e \u043d\u0430\u0448\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 1\u0421-\u0411\u0438\u0442\u0440\u0438\u043a\u0441 \u0432 Kubernetes. \u0411\u0438\u0442\u0440\u0438\u043a\u0441, Kubernetes, \u0421eph \u2014.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:05:09+00:00","article:modified_time":"2019-10-31T19:05:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35581","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 23:52:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:59:36","updated":"2026-01-21 23:52:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/35581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=35581"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/35581\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=35581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=35581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=35581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}