{"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\/no\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes","title":{"rendered":"Southbridge i Tsjeljabinsk og Bitrix i Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>I Tsjeljabinsk holdes det m\u00f8ter for systemadministratoren Sysadminka, og p\u00e5 det siste m\u00f8tet presenterte jeg v\u00e5r l\u00f8sning for \u00e5 kj\u00f8re applikasjoner p\u00e5 1\u0421-Bitrix i Kubernetes.<\/p>\n<p><\/p>\n<p>Bitrix, Kubernetes, Ceph \u2013 en utmerket kombinasjon?<\/p>\n<p><\/p>\n<p>Jeg vil fortelle hvordan vi bygde en fungerende l\u00f8sning ut av alt dette.<\/p>\n<p><\/p>\n<p>La oss g\u00e5!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge i Tsjeljabinsk og 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>M\u00f8tet fant sted 18. april i Tsjeljabinsk. Du kan lese om v\u00e5re m\u00f8ter i <noindex><a rel=\"nofollow\" href=\"https:\/\/sysadminka.timepad.ru\">Timepad<\/a><\/noindex> og se dem p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/channel\/UCMblNgU0Gt-TXb9GdVeeinw\/\">YouTube<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Hvis du \u00f8nsker \u00e5 komme til oss med en presentasjon eller som lytter \u2013 velkommen, skriv til vadim.isakanov@gmail.com og p\u00e5 Telegram t.me\/vadimisakanov. <\/p>\n<p><\/p>\n<h2 id=\"moy-doklad\">Min presentasjon<\/h2>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MZqPNMUjr_M\" title=\"Presentasjon om Bitrix i Kubernetes.\"><img decoding=\"async\" alt=\"Southbridge i Tsjeljabinsk og 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\">Lysbilder<\/a><\/noindex><\/p>\n<p><\/p>\n<h2 id=\"reshenie-bitriks-v-kubernetes-versiya-southbridge-10\">L\u00f8sningen \u00abBitrix i Kubernetes, versjon Southbridge 1.0\u00bb<\/h2>\n<p><\/p>\n<p>Jeg vil fortelle om v\u00e5r l\u00f8sning i formatet \u00abfor nybegynnere i Kubernetes\u00bb, slik det ble gjort p\u00e5 m\u00f8tet. Men jeg antar at ordene Bitrix, Docker, Kubernetes, Ceph er kjent for deg, om ikke annet p\u00e5 niv\u00e5et av artikler p\u00e5 Wikipedia.<\/p>\n<p><\/p>\n<h4 id=\"chto-voobsche-est-gotovogo-pro-bitriks-v-kubernetes\">Hva finnes egentlig av klare l\u00f8sninger for Bitrix i Kubernetes?<\/h4>\n<p><\/p>\n<p>Det finnes veldig lite informasjon p\u00e5 internett om kj\u00f8ring av applikasjoner p\u00e5 Bitrix i Kubernetes.<br \/>\nJeg fant bare disse materialene:<\/p>\n<p><\/p>\n<p>Presentasjonen til Alexander Serbul, 1\u0421-Bitrix, og Anton Tuzlukov fra 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=\"Spill 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>Jeg anbefaler \u00e5 h\u00f8re p\u00e5 den.<\/p>\n<p><\/p>\n<p>Utvikling av en egen l\u00f8sning fra brukeren <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\/\">p\u00e5 Habr\u00e9<\/a><\/noindex>.<br \/>\nFant ogs\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ESSch\/kubernetes\">slike l\u00f8sninger<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Og\u2026 faktisk, det er alt.<\/p>\n<p><\/p>\n<p>Jeg advarer, kvaliteten p\u00e5 l\u00f8sningene i lenkene ovenfor har vi ikke sjekket \ud83d\ude42<br \/>\nForresten, under forberedelsen av v\u00e5r l\u00f8sning snakket jeg med Alexander Serbul, da hans presentasjon enn\u00e5 ikke var tilgjengelig, s\u00e5 i lysbildene mine er det et punkt som sier \u00abBitrix bruker ikke Kubernetes\u00bb.<\/p>\n<p><\/p>\n<p>Men det finnes allerede mange klare Docker-bilder for \u00e5 jobbe med Bitrix i 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>Er dette nok for \u00e5 lage en fullverdig l\u00f8sning for Bitrix i Kubernetes?<br \/>\nNei. Det er mange problemer som m\u00e5 l\u00f8ses.<\/p>\n<p><\/p>\n<h4 id=\"v-chem-problemy-s-bitriks-v-kubernetes\">Hva er problemene med Bitrix i Kubernetes?<\/h4>\n<p><\/p>\n<p><strong>Det f\u00f8rste \u2013 klare bilder fra Dockerhub er ikke egnet for Kubernetes<\/strong><\/p>\n<p><\/p>\n<p>Hvis vi \u00f8nsker \u00e5 bygge en mikrotjenestearkitektur (som vi vanligvis \u00f8nsker i Kubernetes), m\u00e5 applikasjonen i Kubernetes deles inn i containere og s\u00f8rge for at hver container utf\u00f8rer en liten funksjon (og gj\u00f8r det godt). Hvorfor bare en? Kort sagt \u2013 jo enklere, jo mer p\u00e5litelig.<br \/>\nFor en lengre forklaring \u2013 vennligst sjekk denne artikkelen og videoen: <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-bildene i Dockerhub er hovedsakelig bygget etter prinsippet \u00abalt i ett\u00bb, derfor m\u00e5tte vi faktisk lage v\u00e5r egen l\u00f8sning og til og med bygge bildene fra bunnen av.<\/p>\n<p><\/p>\n<p><strong>Det andre \u2013 koden til nettsiden blir endret fra administrasjonspanelet<\/strong><\/p>\n<p><\/p>\n<p>Vi har opprettet en ny seksjon p\u00e5 nettstedet \u2014 koden har blitt oppdatert (en katalog med navnet p\u00e5 den nye seksjonen har blitt lagt til).<\/p>\n<p><\/p>\n<p>Vi har endret egenskapene til komponenten fra administrasjonspanelet \u2014 koden har endret seg.<\/p>\n<p><\/p>\n<p>Kubernetes kan ikke jobbe med dette \u00absom standard\u00bb, containere m\u00e5 v\u00e6re uforanderlige (Stateless).<\/p>\n<p><\/p>\n<p>\u00c5rsaken: hver container (pod) i klyngen h\u00e5ndterer bare en del av trafikken. Hvis koden bare endres i \u00e9n container (pod), vil koden v\u00e6re forskjellig i forskjellige podder, nettstedet vil fungere forskjellig, og forskjellige brukere vil se forskjellige versjoner av nettstedet. Dette er ikke b\u00e6rekraftig.<\/p>\n<p><\/p>\n<p><strong>Det tredje \u2014 vi m\u00e5 l\u00f8se problemet med deploy.<\/strong><\/p>\n<p><\/p>\n<p>Hvis vi har et monolithisk system og \u00e9n \u00abklassisk\u00bb server, er alt ganske enkelt: vi distribuerer den nye kodebasen, gjennomf\u00f8rer databasemigrering, og omdirigerer trafikken til den nye koden. Omdirigeringen skjer umiddelbart.<br \/>\nHvis vi har et nettsted i Kubernetes, delt opp i mikrotjenester, og det er mange containere med kode \u2014 \u00e5h. Vi m\u00e5 bygge containere med den nye versjonen av koden, rulle dem ut i stedet for de gamle, utf\u00f8re databasemigreringen riktig, og ideelt sett gj\u00f8re dette uten at bes\u00f8kende merker det. Heldigvis hjelper Kubernetes oss med dette, og st\u00f8tter en rekke forskjellige typer deploy.<\/p>\n<p><\/p>\n<p><strong>Det fjerde \u2014 vi m\u00e5 l\u00f8se lagringsproblemene for statisk innhold.<\/strong><\/p>\n<p><\/p>\n<p>Hvis nettstedet ditt bare veier \u00ab10 gigabyte\u00bb, og du distribuerer det helt i containere, f\u00e5r du containere som veier 10 gigabyte, som vil bli deployet i en evighet.<br \/>\nVi m\u00e5 lagre de \u00abtyngste\u00bb delene av nettstedet utenfor containerne, og sp\u00f8rsm\u00e5let oppst\u00e5r om hvordan vi skal gj\u00f8re dette p\u00e5 riktig m\u00e5te.<\/p>\n<p><\/p>\n<h4 id=\"chego-net-v-nashem-reshenii\">Hva som ikke er inkludert i v\u00e5r l\u00f8sning.<\/h4>\n<p><\/p>\n<p>Hele Bitrix-koden er ikke delt opp i mikrofunksjoner\/mikrotjenester (for eksempel er registrering separat, modulen for nettbutikken separat, osv.). Vi lagrer hele kodebasen i hver container i sin helhet.<\/p>\n<p><\/p>\n<p>Vi lagrer heller ikke databasen i Kubernetes (jeg har faktisk implementert l\u00f8sninger med databasen i Kubernetes for utviklermilj\u00f8er, men ikke for produksjon).<\/p>\n<p><\/p>\n<p>Administratorene p\u00e5 nettstedet vil likevel merke at nettstedet kj\u00f8rer p\u00e5 Kubernetes. Funksjonen \u00absystemkontroll\u00bb fungerer ikke korrekt, og for \u00e5 redigere nettstedets kode fra administrasjonspanelet m\u00e5 du f\u00f8rst trykke p\u00e5 knappen \u00abjeg vil redigere koden\u00bb.<\/p>\n<p><\/p>\n<p>Vi har identifisert problemene, vi har bestemt n\u00f8dvendigheten av mikrotjenester, m\u00e5let er klart - \u00e5 f\u00e5 et fungerende system for applikasjoner p\u00e5 Bitrix i Kubernetes, samtidig som vi opprettholder mulighetene fra Bitrix og fordelene ved Kubernetes. Vi begynner implementeringen.<\/p>\n<p><\/p>\n<h4 id=\"arhitektura\">Arkitektur<\/h4>\n<p><\/p>\n<p>Mange \u00abarbeids\u00bb podder med webserver (worker'ene).<br \/>\n\u00c9n pod med cron-jobber (kun \u00e9n er obligatorisk).<br \/>\n\u00c9n upgrade pod for redigering av nettstedkode fra administrasjonspanelet (kun \u00e9n er ogs\u00e5 obligatorisk).<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge i Tsjeljabinsk og 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\u00f8rsm\u00e5lene:<\/p>\n<p><\/p>\n<ul>\n<li>Hvor skal vi lagre sesjoner?<\/li>\n<li>Hvor skal vi lagre cache?<\/li>\n<li>Hvor skal vi lagre statiske filer, vi kan ikke plassere gigabyte med statiske filer i en haug med containere?<\/li>\n<li>Hvordan vil databasen fungere?<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"docker-obraz\">Docker-bilde<\/h4>\n<p><\/p>\n<p>Vi begynner med \u00e5 bygge Docker-bildet.<\/p>\n<p><\/p>\n<p>Den ideelle l\u00f8sningen er at vi har ett universelt bilde, p\u00e5 grunnlag av dette f\u00e5r vi b\u00e5de arbeids-pods, pods med cron-jobber, og upgrade pods.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/centosadmin\/bitrixenv\">Vi har laget nettopp et slikt bilde.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Det inkluderer nginx, apache\/php-fpm (kan velges under byggingen), msmtp for sending av e-post, og cron.<\/p>\n<p><\/p>\n<p>Under byggingen kopieres hele kodebasen til \/app-mappen (unntatt de delene vi vil flytte til en egen delt lagring).<\/p>\n<p><\/p>\n<h4 id=\"mikroservisnost-servisy\">Mikrotjenester, tjenester<\/h4>\n<p><\/p>\n<p><strong>arbeider-pods:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>Container med nginx + container apache\/php-fpm + msmtp<\/li>\n<li>Det ble ikke mulig \u00e5 flytte msmtp til en egen mikrotjeneste, Bitrix begynner \u00e5 klage over at den ikke kan sende e-post direkte.<\/li>\n<li>Hver container har hele kodebasen.<\/li>\n<li>Forbud mot \u00e5 endre kode i containerne.<\/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>med full kodebase inkludert<\/li>\n<li>forbud mot \u00e5 endre kode i containerne<\/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>det er ingen forbud mot \u00e5 endre kode i containerne<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>lagringsl\u00f8sning for sesjoner<\/strong><\/p>\n<p><\/p>\n<p><strong>cache-lagring for Bitrix<\/strong><\/p>\n<p><\/p>\n<p>Det er ogs\u00e5 viktig: passord for tilkobling til alt, fra databasen til e-post, lagrer vi i Kubernetes secrets. Vi f\u00e5r en bonus, passordene kan kun sees av de vi gir tilgang til hemmelighetene, og ikke av alle som har tilgang til kodebasen.<\/p>\n<p><\/p>\n<h4 id=\"hranilische-dlya-statiki\">Lagring for statiske filer<\/h4>\n<p><\/p>\n<p>Vi kan bruke hva som helst: ceph, nfs (men vi anbefaler ikke nfs for produksjon), nettverkslagring fra \"skyleverand\u00f8rer\", osv.<\/p>\n<p><\/p>\n<p>Lagring m\u00e5 kobles til containerne i \/upload\/-mappen p\u00e5 nettstedet og andre mapper med statiske filer.<\/p>\n<p><\/p>\n<h4 id=\"baza-dannyh\">Database<\/h4>\n<p><\/p>\n<p>For enkelhetens skyld anbefaler vi \u00e5 flytte databasen utenfor Kubernetes. En database i Kubernetes er en egen kompleks oppgave, og den vil gj\u00f8re systemet betydelig mer komplisert.<\/p>\n<p><\/p>\n<h4 id=\"hranilische-sessiy\">Lagring for sesjoner<\/h4>\n<p><\/p>\n<p>Vi bruker memcached \ud83d\ude42<\/p>\n<p><\/p>\n<p>Det gj\u00f8r en god jobb med sesjonslagring, kanClusters, og st\u00f8ttes \u00abnativt\u00bb som session.save_path i php. Et slikt system er allerede godt utpr\u00f8vd i klassisk monolitisk arkitektur, da vi bygde klynger med et stort antall webservere. For distribusjon bruker 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 \u2014 her er konfigurasjonene for sesjonslagring i memcached angitt i bildet<\/p>\n<p><\/p>\n<p>Vi har brukt milj\u00f8variabler for \u00e5 overf\u00f8re data om vertene 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 \/>\nDette gj\u00f8r at vi kan bruke den samme koden i dev-, stage-, test- og prod-milj\u00f8ene (vertens navn for memcached vil variere, s\u00e5 i hvert milj\u00f8 m\u00e5 vi overf\u00f8re unike vertsnavn for sesjoner).<br \/>\nCache-lager for Bitrix<\/p>\n<p><\/p>\n<p>Vi trenger et distribuert lager som alle podene kan skrive til og lese fra.<\/p>\n<p><\/p>\n<p>Vi bruker ogs\u00e5 memcached.<br \/>\nDenne l\u00f8sningen anbefales av Bitrix selv.<\/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 \u2014 her angis hvor v\u00e5rt cachelagring er i Bitrix<\/p>\n<p><\/p>\n<p>Vi bruker ogs\u00e5 milj\u00f8variabler.<\/p>\n<p><\/p>\n<h3 id=\"krontaski\">Kronoppgaver<\/h3>\n<p><\/p>\n<p>Det er ulike tiln\u00e6rminger til \u00e5 kj\u00f8re kronoppgaver i Kubernetes.<\/p>\n<p><\/p>\n<ul>\n<li>separat distribusjon med pod for \u00e5 kj\u00f8re kronoppgaver<\/li>\n<li>cronjob for \u00e5 gjennomf\u00f8re kronoppgaver (hvis dette er en webapp \u2014 med wget <noindex>https:\/\/$host$cronjobname<\/noindex>, eller kubectl exec inne i en av worker-podene, osv.)<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p><\/p>\n<p>Man kan diskutere hva som er mest riktig, men i dette tilfellet har vi valgt alternativet \u00abseparat deployment med podder for cron-jobs\u00bb.<\/p>\n<p><\/p>\n<p>Slik er det gjort:<\/p>\n<p><\/p>\n<ul>\n<li>kronoppgaver legges til gjennom ConfigMap eller gjennom filen config\/addcron<\/li>\n<li>vi kj\u00f8rer en enkel container, identisk med worker-poden + tillater kj\u00f8ring av kronoppgaver i den<\/li>\n<li>den samme kodebasen brukes, takket v\u00e6re standardiseringen, er containeropprettelsen enkel<\/li>\n<\/ul>\n<p><\/p>\n<p>Hva f\u00e5r vi ut av dette:<\/p>\n<p><\/p>\n<ul>\n<li>vi har fungerende kronoppgaver i et milj\u00f8 som ligner utviklermilj\u00f8et (docker)<\/li>\n<li>Cron-jobs trenger ikke \u00e5 \u00abskrives om\u00bb for Kubernetes, de fungerer i samme form og i samme kodebase som f\u00f8r.<\/li>\n<li>kronoppgaver kan bli lagt til av alle teammedlemmer med commit-rettigheter i produksjonsgrenen, ikke bare administratorer<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"modul-southbridge-k8sdeploy-i-redaktirovanie-koda-iz-admin-paneli\">Modul Southbridge K8SDeploy og redigering av kode fra admin-panelet<\/h3>\n<p><\/p>\n<p>Vi snakket jo om oppgradering av pod, ikke sant?<br \/>\nHvordan dirigerer vi trafikken dit?<br \/>\nHurra, vi har skrevet en modul for dette i php \ud83d\ude42 Det er en liten klassisk modul for Bitrix. Den er ikke tilgjengelig offentlig enn\u00e5, men vi planlegger \u00e5 gj\u00f8re den tilgjengelig.<br \/>\nModulen installeres som en vanlig modul i Bitrix:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge i Tsjeljabinsk og Bitrix i Kubernetes\" src=\"\/wp-content\/uploads\/ba9f895ce645862c7ba003d523cd5656.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og ser slik ut:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge i Tsjeljabinsk og Bitrix i Kubernetes\" src=\"\/wp-content\/uploads\/916ae9243fae9f6405cc68174ec5bb2b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det lar deg angi en cookie som identifiserer nettstedets administrator, og lar Kubernetes sende trafikk til oppgraderingspodden.<\/p>\n<p><\/p>\n<p>N\u00e5r endringene er fullf\u00f8rt, m\u00e5 du trykke p\u00e5 git push, endringene i koden vil bli sendt til git, deretter vil systemet bygge et bilde med den nye versjonen av koden og \"rulle den ut\" over klyngen, og erstatte gamle podder.<\/p>\n<p><\/p>\n<p>Ja, litt kl\u00f8nete, men vi bevarer mikroservicearkitekturen og tar ikke bort Bitrix-brukernes elskede mulighet til \u00e5 endre koden fra adminpanelet. Til syvende og sist er dette et valg, og man kan l\u00f8se oppgave om \u00e5 redigere koden p\u00e5 en annen m\u00e5te.<\/p>\n<p><\/p>\n<h4 id=\"helm-chart\">Helm-diagram<\/h4>\n<p><\/p>\n<p>For \u00e5 bygge applikasjoner i Kubernetes bruker vi vanligvis pakkeh\u00e5ndtereren Helm.<br \/>\nFor v\u00e5r Bitrix-l\u00f8sning i Kubernetes har Sergej Bondarev, v\u00e5r ledende systemadministrator, skrevet et spesialdesignert Helm-diagram.<\/p>\n<p><\/p>\n<p>Den utf\u00f8rer bygging av worker, oppgradering, cron-podder, konfigurerer ingressene, tjenestene, og overf\u00f8rer variabler fra Kubernetes secrets til poddene.<\/p>\n<p><\/p>\n<p>Vi lagrer koden i Gitlab, og vi starter ogs\u00e5 Helm-byggeren fra Gitlab.<\/p>\n<p><\/p>\n<p>I korte trekk ser det slik ut<\/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 lar deg ogs\u00e5 gj\u00f8re en \"s\u00f8ml\u00f8s\" tilbakestilling hvis noe g\u00e5r galt under distribusjonen. Det er fint at du ikke er i panikk og \"fikser koden via ftp fordi produksjonen har falt\", mens Kubernetes gj\u00f8r dette automatisk, uten nedetid.<\/p>\n<p><\/p>\n<h4 id=\"deploy\">UTPLASSERING<\/h4>\n<p><\/p>\n<p>Ja, vi er fans av Gitlab &amp; Gitlab CI, vi bruker det \ud83d\ude42<br \/>\nVed committing til Gitlab i prosjektets repository, starter Gitlab en pipeline som distribuerer den nye versjonen av milj\u00f8et.<\/p>\n<p><\/p>\n<p>Faser:<\/p>\n<p><\/p>\n<ul>\n<li>build (bygger et nytt Docker-bilde)<\/li>\n<li>test (testar)<\/li>\n<li>clean up (fjerner testmilj\u00f8et)<\/li>\n<li>push (sender det til Docker registry)<\/li>\n<li>deploy (distribuerer applikasjonen i Kubernetes via Helm).<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge i Tsjeljabinsk og Bitrix i Kubernetes\" src=\"\/wp-content\/uploads\/74e565a0793b90c3cc19b8c7dedaff34.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hurra, ferdig, implementerer!<br \/>\nEller stiller sp\u00f8rsm\u00e5l hvis det finnes.<\/p>\n<p><\/p>\n<h2 id=\"itak-chto-my-sdelali\">S\u00e5, hva har vi gjort<\/h2>\n<p><\/p>\n<p><strong>Fra et teknisk perspektiv:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>dockeriserte vi Bitrix;<\/li>\n<li>\"delte\" vi Bitrix i containere, hver av dem utf\u00f8rer minimum funksjoner;<\/li>\n<li>oppn\u00e5dde stateless tilstand for containerne;<\/li>\n<li>l\u00f8ste vi problemet med oppdatering av Bitrix i Kubernetes;<\/li>\n<li>alle funksjoner i Bitrix fortsatte \u00e5 fungere (nesten alle);<\/li>\n<li>vi har gjennomf\u00f8rt distribusjon i Kubernetes og tilbakekobling mellom versjoner.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Fra et forretningsperspektiv:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>feiltoleranse;<\/li>\n<li>Kubernetes-verkt\u00f8y (enkel integrasjon med Gitlab CI, s\u00f8ml\u00f8s distribusjon, etc);<\/li>\n<li>passord i hemmeligheter (synlig kun for de som har f\u00e5tt direkte tilgang til passordene);<\/li>\n<li>Det er praktisk \u00e5 lage ekstra milj\u00f8er (for utvikling, testing osv.) innenfor \u00e9n infrastruktur.<\/li>\n<\/ul>\n<p>Kilde: <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.5 - 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\/no\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"nn_NO\" \/>\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\/no\/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 Tsjeljabinsk og Bitrix i Kubernetes | ProHoster","description":"I Tsjeljabinsk skjer det meetup-er for systemadministratorer i Sysadminka, og p\u00e5 den siste av dem holdt jeg en presentasjon om v\u00e5r l\u00f8sning for \u00e5 kj\u00f8re applikasjoner p\u00e5 1C-Bitrix i Kubernetes. Bitrix, Kubernetes, Ceph -.","canonical_url":"https:\/\/prohoster.info\/no\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nn_NO","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\/no\/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\/no\/wp-json\/wp\/v2\/posts\/35581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/comments?post=35581"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts\/35581\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/media?parent=35581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/categories?post=35581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/tags?post=35581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}