{"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\/sv\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes","title":{"rendered":"Southbridge i Tjelyabinsk och Bitrix i Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>I Chelyabinsk, meetups for system administrators Sysadminka are taking place, and at the last one, I presented on our solution for running applications on 1C-Bitrix in Kubernetes.<\/p>\n<p><\/p>\n<p>Bitrix, Kubernetes, Ceph \u2014 a great mix?<\/p>\n<p><\/p>\n<p>I'll explain how we put all of this together into a working solution.<\/p>\n<p><\/p>\n<p>L\u00e5t oss k\u00f6ra!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge i Tjelyabinsk och Bitrix i 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>The meetup took place on April 18 in Chelyabinsk. You can read about our meetups in <noindex><a rel=\"nofollow\" href=\"https:\/\/sysadminka.timepad.ru\">Timepad<\/a><\/noindex> and watch on <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/channel\/UCMblNgU0Gt-TXb9GdVeeinw\/\">YouTube<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>If you want to join us as a speaker or as an attendee, feel free to write to vadim.isakanov@gmail.com and on Telegram t.me\/vadimisakanov. <\/p>\n<p><\/p>\n<h2 id=\"moy-doklad\">My presentation<\/h2>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MZqPNMUjr_M\" title=\"Rapport om Bitrix i Kubernetes\"><img decoding=\"async\" alt=\"Southbridge i Tjelyabinsk och Bitrix i 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\">Bildspel<\/a><\/noindex><\/p>\n<p><\/p>\n<h2 id=\"reshenie-bitriks-v-kubernetes-versiya-southbridge-10\">Solution \"Bitrix in Kubernetes, version Southbridge 1.0\"<\/h2>\n<p><\/p>\n<p>I will discuss our solution in a \"for beginners in Kubernetes\" format, as it was done at the meetup. However, I assume that you are at least familiar with the terms Bitrix, Docker, Kubernetes, and Ceph at the Wikipedia article level.<\/p>\n<p><\/p>\n<h4 id=\"chto-voobsche-est-gotovogo-pro-bitriks-v-kubernetes\">What is actually available regarding Bitrix in Kubernetes?<\/h4>\n<p><\/p>\n<p>There is very little information on the internet about running applications on Bitrix in Kubernetes.<br \/>\nI found only the following materials:<\/p>\n<p><\/p>\n<p>Presentation by Alexander Serbul, 1C-Bitrix, and Anton Tuzlukov from 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=\"Spela 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>I recommend listening to it.<\/p>\n<p><\/p>\n<p>Development of a solution from a user <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\/\">I detta omr\u00e5de har ocks\u00e5 AI-system n\u00e5tt fram. Smarta algoritmer f\u00f6rutsp\u00e5r serverfel genom att analysera deras \"beteende\". Till exempel, f\u00f6retaget Litbit<\/a><\/noindex>.<br \/>\nI also found <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ESSch\/kubernetes\">such a solution<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>And... that's basically it.<\/p>\n<p><\/p>\n<p>I warn you, we haven't checked the quality of the solutions linked above \ud83d\ude42<br \/>\nBy the way, while preparing our solution, I communicated with Alexander Serbul, and at that time his presentation wasn't available yet, so there is a point in my slides stating that \"Bitrix does not use Kubernetes.\"<\/p>\n<p><\/p>\n<p>But there are already many ready-made Docker images for running Bitrix in 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>Is this enough to create a full-fledged solution for Bitrix in Kubernetes?<br \/>\nNo. There are a lot of problems that need to be solved.<\/p>\n<p><\/p>\n<h4 id=\"v-chem-problemy-s-bitriks-v-kubernetes\">What are the problems with Bitrix in Kubernetes?<\/h4>\n<p><\/p>\n<p><strong>The first is that the ready-made images from Dockerhub are not suitable for Kubernetes.<\/strong><\/p>\n<p><\/p>\n<p>If we want to build a microservices architecture (which we usually want to do in Kubernetes), you need to break the application down into containers and ensure that each container performs one small function (and does it well). Why only one? In short \u2014 the simpler, the more reliable.<br \/>\nIf you want a longer explanation \u2014 please take a look at this article and 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>Docker images on Dockerhub are mainly built on the principle of \"everything in one\", so we had to reinvent the wheel and even create images from scratch.<\/p>\n<p><\/p>\n<p><strong>The second is that the website code is modified from the admin panel.<\/strong><\/p>\n<p><\/p>\n<p>Vi har skapat en ny sektion p\u00e5 webbplatsen - koden har uppdaterats (en katalog med namnet p\u00e5 den nya sektionen har lagts till).<\/p>\n<p><\/p>\n<p>Egenskaperna f\u00f6r komponenten har \u00e4ndrats fr\u00e5n administrationspanelen - koden har f\u00f6r\u00e4ndrats.<\/p>\n<p><\/p>\n<p>Kubernetes kan inte arbeta med det h\u00e4r som standard, containrar m\u00e5ste vara of\u00f6r\u00e4nderliga (Stateless).<\/p>\n<p><\/p>\n<p>Orsaken: varje container (pod) i klustret hanterar endast en del av trafiken. Om koden \u00e4ndras endast i en container (pod), kommer koden att vara olika i olika pods, webbplatsen kommer att fungera olika, olika anv\u00e4ndare f\u00e5r se olika versioner av webbplatsen. S\u00e5 kan vi inte ha det.<\/p>\n<p><\/p>\n<p><strong>Det tredje - vi m\u00e5ste ta itu med fr\u00e5gan om utplacering.<\/strong><\/p>\n<p><\/p>\n<p>Om vi har en monolit och en \"klassisk\" server \u00e4r allt ganska enkelt: vi rullar ut en ny kodbas, genomf\u00f6r databasmigrering, och dirigerar trafiken till den nya versionen av koden. Omkopplingen sker omedelbart.<br \/>\nOm vi har en webbplats i Kubernetes, uppdelad i mikrotj\u00e4nster, och det finns m\u00e5nga containrar med kod - oj. Vi m\u00e5ste bygga containrar med den nya versionen av koden, rulla ut dem ist\u00e4llet f\u00f6r de gamla, utf\u00f6ra databasmigreringen korrekt, och helst g\u00f6ra detta utan att bes\u00f6karna m\u00e4rker det. Lyckligtvis hj\u00e4lper Kubernetes oss med detta, med en m\u00e4ngd olika typer av utplacering.<\/p>\n<p><\/p>\n<p><strong>Det fj\u00e4rde - vi m\u00e5ste ta itu med fr\u00e5gan om lagring av statiska filer.<\/strong><\/p>\n<p><\/p>\n<p>Om din webbplats \"bara\" v\u00e4ger 10 gigabyte och du rullar ut den helt i containrar, f\u00e5r du containrar som v\u00e4ger 10 gigabyte, som kommer att ta en evighet att distribuera.<br \/>\nDe tyngsta delarna av webbplatsen m\u00e5ste lagras utanf\u00f6r containrarna, och fr\u00e5gan \u00e4r hur man g\u00f6r detta p\u00e5 r\u00e4tt s\u00e4tt.<\/p>\n<p><\/p>\n<h4 id=\"chego-net-v-nashem-reshenii\">Vad som saknas i v\u00e5r l\u00f6sning.<\/h4>\n<p><\/p>\n<p>Hela koden f\u00f6r Bitrix \u00e4r inte uppdelad p\u00e5 mikro-funktioner\/mikrotj\u00e4nster (s\u00e5 att registrering \u00e4r separat, modulen f\u00f6r e-handeln separat, och s\u00e5 vidare). Vi lagrar hela kodbasen i varje container i sin helhet.<\/p>\n<p><\/p>\n<p>Vi lagrar \u00e4ven inte databasen i Kubernetes (jag har anv\u00e4nt l\u00f6sningar med databasen i Kubernetes f\u00f6r utvecklarmilj\u00f6er, men inte f\u00f6r produktion).<\/p>\n<p><\/p>\n<p>Webbplatsens administrat\u00f6rer kommer att m\u00e4rka att webbplatsen arbetar i Kubernetes. Funktionen \"systemkontroll\" fungerar inte korrekt, f\u00f6r att redigera koden p\u00e5 webbplatsen fr\u00e5n administrationspanelen m\u00e5ste man f\u00f6rst klicka p\u00e5 knappen \"jag vill redigera koden\".<\/p>\n<p><\/p>\n<p>Problemmerne er blevet l\u00f8st, behovet for implementering af mikrotjenester er afklaret, m\u00e5let er klart - at f\u00e5 et fungerende system til anvendelse af Bitrix i Kubernetes, mens vi bevarer b\u00e5de Bitrix-funktionalitet og Kubernetes-fordele. Vi starter implementeringen.<\/p>\n<p><\/p>\n<h4 id=\"arhitektura\">Arkitektur<\/h4>\n<p><\/p>\n<p>M\u00e5nga \"arbets\" poddar med webserver (worker&#8217;er).<br \/>\nEn pod med cron-opgaver (kun \u00e9n kr\u00e6ves).<br \/>\nEn upgrade pod til redigering af hjemmesidens kode fra administrationspanelet (ogs\u00e5 kun \u00e9n kr\u00e6ves).<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge i Tjelyabinsk och Bitrix i Kubernetes\" src=\"\/wp-content\/uploads\/e26a787c11f78811b15a89f597331ef1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi l\u00f8ser sp\u00f8rgsm\u00e5lene:<\/p>\n<p><\/p>\n<ul>\n<li>Hvor skal sessioner gemmes?<\/li>\n<li>Hvor skal cache gemmes?<\/li>\n<li>Hvor skal statiske filer gemmes, skal vi virkelig placere gigabyte statiske filer i en bunke containere?<\/li>\n<li>Hvordan vil databasen fungere?<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"docker-obraz\">Docker-billede<\/h4>\n<p><\/p>\n<p>Vi starter med at opbygge Docker-billedet.<\/p>\n<p><\/p>\n<p>Den ideelle l\u00f8sning er, at vi har et universelt billede, p\u00e5 grundlag af dette f\u00e5r vi b\u00e5de arbejdende pods, pods med cron-opgaver og upgrade pods.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/centosadmin\/bitrixenv\">Vi har netop lavet et s\u00e5dant billede<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Det inkluderer nginx, apache\/php-fpm (kan v\u00e6lges ved opbygning), msmtp til mailudsendelse og cron.<\/p>\n<p><\/p>\n<p>Under opbygningen kopieres hele kodebasen for hjemmesiden til mappen \/app (undtagen de dele, vi vil flytte til et separat f\u00e6lles lager).<\/p>\n<p><\/p>\n<h4 id=\"mikroservisnost-servisy\">Mikrotjenester, services<\/h4>\n<p><\/p>\n<p><strong>arbejdende pods:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>Container med nginx + container apache\/php-fpm + msmtp<\/li>\n<li>Msmtp kunne ikke flyttes til en separat mikrotjeneste, Bitrix bliver utilfreds, fordi det ikke kan sende mails direkte.<\/li>\n<li>I hver container er der hele kodebasen.<\/li>\n<li>Der er forbud mod at \u00e6ndre koden i containere.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>cron pod:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>container med apache, php, cron<\/li>\n<li>sammen med hele kodebasen<\/li>\n<li>forbud mod at \u00e6ndre koden i containere<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>upgrade pod:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>container med nginx + container apache\/php-fpm + msmtp<\/li>\n<li>der er ikke forbud mod at \u00e6ndre koden i containere<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>sessionlager<\/strong><\/p>\n<p><\/p>\n<p><strong>cachelager for Bitrix<\/strong><\/p>\n<p><\/p>\n<p>Det er ogs\u00e5 vigtigt: adgangskoder til forbindelse til alt, fra databasen til mail, opbevares i Kubernetes secrets. Vi f\u00e5r en bonus, adgangskoderne kan kun ses af dem, vi giver adgang til secrets, og ikke alle, der har adgang til kodebasen.<\/p>\n<p><\/p>\n<h4 id=\"hranilische-dlya-statiki\">Lager til statiske filer<\/h4>\n<p><\/p>\n<p>Vi kan bruge hvad som helst: ceph, nfs (men vi anbefaler ikke nfs til produktion), netv\u00e6rkslager fra 'cloud'-udbydere osv.<\/p>\n<p><\/p>\n<p>Lageret skal tilsluttes i containere i \/upload\/ mappen p\u00e5 hjemmesiden og andre mapper med statiske filer.<\/p>\n<p><\/p>\n<h4 id=\"baza-dannyh\">Databas<\/h4>\n<p><\/p>\n<p>For enkelhedens skyld anbefaler vi at flytte databasen uden for Kubernetes. At have databasen i Kubernetes er en kompleks opgave, der vil g\u00f8re strukturen v\u00e6sentligt mere kompleks.<\/p>\n<p><\/p>\n<h4 id=\"hranilische-sessiy\">sessionlager<\/h4>\n<p><\/p>\n<p>Vi bruger memcached \ud83d\ude42<\/p>\n<p><\/p>\n<p>Det hanterar sessioner v\u00e4l, \u00e4r klusterbaserat och st\u00f6ds \"naturligt\" som session.save_path i php. S\u00e5dana system har g\u00e5ng p\u00e5 g\u00e5ng anv\u00e4nts i den klassiska monolitiska arkitekturen, n\u00e4r vi byggde kluster med ett stort antal webbservrar. F\u00f6r distribution anv\u00e4nder vi 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 h\u00e4r st\u00e4lls inst\u00e4llningar f\u00f6r lagring av sessioner i memcached in i bilden<\/p>\n<p><\/p>\n<p>Vi anv\u00e4nde milj\u00f6variabler f\u00f6r att \u00f6verf\u00f6ra data om v\u00e4rdar med 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 \/>\nDetta m\u00f6jligg\u00f6r att anv\u00e4nda samma kod i milj\u00f6er som dev, stage, test, prod (namnen p\u00e5 v\u00e4rdarna f\u00f6r memcached kommer att skilja sig \u00e5t, s\u00e5 vi beh\u00f6ver \u00f6verf\u00f6ra unika v\u00e4rdnamn f\u00f6r sessioner till varje milj\u00f6).<br \/>\nCache-lagring i Bitrix<\/p>\n<p><\/p>\n<p>Vi beh\u00f6ver en kaustikresistent lagring dit alla pods kan skriva och l\u00e4sa.<\/p>\n<p><\/p>\n<p>Vi anv\u00e4nder \u00e4ven memcached.<br \/>\nDenna l\u00f6sning rekommenderas av Bitrix sj\u00e4lva.<\/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 h\u00e4r anges var vi lagrar cachen i Bitrix<\/p>\n<p><\/p>\n<p>Vi anv\u00e4nder ocks\u00e5 milj\u00f6variabler.<\/p>\n<p><\/p>\n<h3 id=\"krontaski\">Cron-jobb<\/h3>\n<p><\/p>\n<p>Det finns olika tillv\u00e4gag\u00e5ngss\u00e4tt f\u00f6r att k\u00f6ra cron-jobb i Kubernetes.<\/p>\n<p><\/p>\n<ul>\n<li>separat deployment med en pod f\u00f6r att k\u00f6ra cron-jobb<\/li>\n<li>cronjob f\u00f6r att utf\u00f6ra cron-jobb (om det \u00e4r webapp \u2013 med wget <noindex>https:\/\/$host$cronjobname<\/noindex>, eller kubectl exec in i en av worker-pods, osv.)<\/li>\n<li>med flera.<\/li>\n<\/ul>\n<p><\/p>\n<p>Man kan diskutera vad som \u00e4r mest korrekt, men vi valde alternativet &#171;separat deployment med poddar f\u00f6r cronjobb&#187;.<\/p>\n<p><\/p>\n<p>Hur det g\u00f6rs:<\/p>\n<p><\/p>\n<ul>\n<li>funktionerna l\u00e4ggs till via ConfigMap eller genom filen config\/addcron<\/li>\n<li>i en instans k\u00f6r vi en container som \u00e4r identisk med worker-poden + vi till\u00e5ter k\u00f6rning av cron-jobb i den<\/li>\n<li>den samma kodbas anv\u00e4nds, tack vare standardiseringen \u00e4r det enkelt att bygga containern<\/li>\n<\/ul>\n<p><\/p>\n<p>Vad vi f\u00e5r bra:<\/p>\n<p><\/p>\n<ul>\n<li>vi har fungerande cron-jobb i en milj\u00f6 som \u00e4r identisk med utvecklarnas milj\u00f6 (docker)<\/li>\n<li>Cronjobben beh\u00f6ver inte &#171;omskrivas&#187; f\u00f6r Kubernetes, de fungerar i samma form och med samma kodbas som tidigare.<\/li>\n<li>cro-jobb kan l\u00e4ggas till av alla teammedlemmar med commit-r\u00e4ttigheter till produktionsgrenen, inte bara administrat\u00f6rer<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"modul-southbridge-k8sdeploy-i-redaktirovanie-koda-iz-admin-paneli\">Modul Southbridge K8SDeploy och redigering av kod fr\u00e5n adminpanelen<\/h3>\n<p><\/p>\n<p>Vi talade ju om uppgradering av podden?<br \/>\nOch hur dirigerar vi trafiken dit?<br \/>\nHurra, vi har skrivit en modul f\u00f6r detta i php \ud83d\ude42 Det \u00e4r en liten klassisk modul f\u00f6r Bitrix. Den finns \u00e4nnu inte tillg\u00e4nglig offentligt, men vi planerar att g\u00f6ra den tillg\u00e4nglig.<br \/>\nModulen installeras som en vanlig modul i Bitrix:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge i Tjelyabinsk och Bitrix i Kubernetes\" src=\"\/wp-content\/uploads\/ba9f895ce645862c7ba003d523cd5656.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och ser s\u00e5 h\u00e4r ut:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge i Tjelyabinsk och Bitrix i Kubernetes\" src=\"\/wp-content\/uploads\/916ae9243fae9f6405cc68174ec5bb2b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det g\u00f6r det m\u00f6jligt att st\u00e4lla in en cookie som identifierar webbplatsadministrat\u00f6ren och l\u00e5ter Kubernetes dirigera trafik till uppgraderingspodden.<\/p>\n<p><\/p>\n<p>N\u00e4r \u00e4ndringarna \u00e4r klara m\u00e5ste du trycka p\u00e5 git push, \u00e4ndringarna i koden skickas till git, och systemet kommer sedan att bygga en bild med den nya versionen av koden och \"rulla\" ut den i klustret, vilket ers\u00e4tter de gamla poddarna.<\/p>\n<p><\/p>\n<p>Ja, lite kr\u00e5ngligt, men vi bevarar samtidigt mikrotj\u00e4nstarkitekturen och tar inte bort Bitrix-anv\u00e4ndarnas favoritfunktion att justera koden fr\u00e5n adminpanelen. I slut\u00e4ndan \u00e4r det ett alternativ, man kan l\u00f6sa kodjusteringsuppgiften p\u00e5 ett annat s\u00e4tt.<\/p>\n<p><\/p>\n<h4 id=\"helm-chart\">Helm-diagram<\/h4>\n<p><\/p>\n<p>F\u00f6r att bygga appar i Kubernetes anv\u00e4nder vi vanligtvis paketchefen Helm.<br \/>\nF\u00f6r v\u00e5r Bitrix-l\u00f6sning i Kubernetes har Sergey Bondarev, v\u00e5r ledande systemadministrat\u00f6r, skrivit ett specialanpassat Helm-diagram.<\/p>\n<p><\/p>\n<p>Den k\u00f6r bygget av worker, uppgradering, cron-poddar, konfigurerar ingress&#8217;er, tj\u00e4nster, \u00f6verf\u00f6r variabler fr\u00e5n Kubernetes secrets till poddar.<\/p>\n<p><\/p>\n<p>Vi lagrar koden i Gitlab och initierar \u00e4ven Helm-byggnaden fr\u00e5n Gitlab.<\/p>\n<p><\/p>\n<p>Det ser ungef\u00e4r ut s\u00e5 h\u00e4r<\/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>Helm m\u00f6jligg\u00f6r ocks\u00e5 \"s\u00f6ml\u00f6s\" nedgradering om n\u00e5got g\u00e5r fel vid distributionen. Det \u00e4r trevligt n\u00e4r det inte \u00e4r du som panikartat \"fixar koden via ftp f\u00f6r att produktionen har kraschat\", utan Kubernetes g\u00f6r det automatiskt, dessutom utan driftstopp.<\/p>\n<p><\/p>\n<h4 id=\"deploy\">Utveckla<\/h4>\n<p><\/p>\n<p>Ja, vi \u00e4r fans av Gitlab &amp; Gitlab CI, vi anv\u00e4nder det \ud83d\ude42<br \/>\nVid commit i Gitlab i projektets repository startar Gitlab en pipeline som utf\u00f6r distributionen av den nya versionen av milj\u00f6n.<\/p>\n<p><\/p>\n<p>Steg:<\/p>\n<p><\/p>\n<ul>\n<li>build (bygger en ny Docker-bild)<\/li>\n<li>test (testar)<\/li>\n<li>clean up (tar bort testmilj\u00f6n)<\/li>\n<li>push (skickar den till Docker registry)<\/li>\n<li>deploy (distribuerar applikationen i Kubernetes via Helm).<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge i Tjelyabinsk och Bitrix i Kubernetes\" src=\"\/wp-content\/uploads\/74e565a0793b90c3cc19b8c7dedaff34.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hurra, klart, vi implementerar!<br \/>\nEller st\u00e4ller fr\u00e5gor om det finns n\u00e5gra.<\/p>\n<p><\/p>\n<h2 id=\"itak-chto-my-sdelali\">S\u00e5, vad har vi gjort<\/h2>\n<p><\/p>\n<p><strong>Ur ett tekniskt perspektiv:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>dockeriserade Bitrix;<\/li>\n<li>\"skar upp\" Bitrix i containrar, d\u00e4r varje utf\u00f6r minimalt med funktioner;<\/li>\n<li>uppn\u00e5dde stateless tillst\u00e5nd i containrarna;<\/li>\n<li>l\u00f6ste problemet med att uppdatera Bitrix i Kubernetes;<\/li>\n<li>alla funktioner i Bitrix fortsatte att fungera (n\u00e4stan allt);<\/li>\n<li>testade distributionen i Kubernetes och nedgradering mellan versioner.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Ur ett aff\u00e4rsperspektiv:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>felfunktionstolerans;<\/li>\n<li>Kubernetes-verktyg (enkel integration med Gitlab CI, s\u00f6ml\u00f6s distribution, etc);<\/li>\n<li>l\u00f6senord i secrets (synliga endast f\u00f6r dem som direkt beviljas \u00e5tkomst till l\u00f6senorden);<\/li>\n<li>Det \u00e4r enkelt att skapa ytterligare milj\u00f6er (f\u00f6r utveckling, tester m.m.) inom en och samma infrastruktur.<\/li>\n<\/ul>\n<p>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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 i Tjeljabinsk och Bitrix i Kubernetes | ProHoster","description":"I Tjeljabinsk h\u00e5lls meetups f\u00f6r systemadministrat\u00f6rer Sysadminka, och vid det senaste av dem h\u00f6ll jag en presentation om v\u00e5r l\u00f6sning f\u00f6r att k\u00f6ra applikationer p\u00e5 1C-Bitrix i Kubernetes. Bitrix, Kubernetes, Ceph -.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/35581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=35581"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/35581\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=35581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=35581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=35581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}