{"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\/et\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes","title":{"rendered":"Southbridge \u010celjabinskis ja Bitrix Kuberneteses","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Chelyabinskis toimuvad Sysadminka s\u00fcsteemiadministraatorite kohtumised ning viimasel neist esitlesin meie lahendust 1C-Bitrix'i rakenduste k\u00e4itamiseks Kuberneteses.<\/p>\n<p><\/p>\n<p>Bitrix, Kubernetes, Ceph \u2014 suurep\u00e4rane segu?<\/p>\n<p><\/p>\n<p>R\u00e4\u00e4gin, kuidas me sellest kokku panime t\u00f6\u00f6tava lahenduse.<\/p>\n<p><\/p>\n<p>L\u00e4hme!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge \u010celjabinskis ja Bitrix Kuberneteses\" 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>Kohtumine toimus 18. aprillil Chelyabinskis. Meie kohtumiste kohta saab lugeda <noindex><a rel=\"nofollow\" href=\"https:\/\/sysadminka.timepad.ru\">Timepad<\/a><\/noindex> ja vaadata <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/channel\/UCMblNgU0Gt-TXb9GdVeeinw\/\">YouTube'is<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Kui soovite meiega esitlusele tulla v\u00f5i kuulajana osaleda \u2014 olete teretulnud, kirjutage aadressile vadim.isakanov@gmail.com ja Telegramis t.me\/vadimisakanov. <\/p>\n<p><\/p>\n<h2 id=\"moy-doklad\">Minu ettekande pealkiri<\/h2>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MZqPNMUjr_M\" title=\"Ettekanne Bitrixist Kubernetesis\"><img decoding=\"async\" alt=\"Southbridge \u010celjabinskis ja Bitrix Kuberneteses\" 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\">Esitlused<\/a><\/noindex><\/p>\n<p><\/p>\n<h2 id=\"reshenie-bitriks-v-kubernetes-versiya-southbridge-10\">Lahendus \u201eBitrix Kuberneteses, versioon Southbridge 1.0\u201c<\/h2>\n<p><\/p>\n<p>R\u00e4\u00e4gin meie lahendusest formaadis \u201eKubernetesi for dummies\u201c, kuidas see kohtumisel teoks sai. Kuid ma eeldan, et s\u00f5nad Bitrix, Docker, Kubernetes, Ceph on teile tuttavad v\u00e4hemalt Wikipedias artiklite tasemel.<\/p>\n<p><\/p>\n<h4 id=\"chto-voobsche-est-gotovogo-pro-bitriks-v-kubernetes\">Mis valmis lahendust Bitrix Kuberneteses on?<\/h4>\n<p><\/p>\n<p>Internetis on v\u00e4ga v\u00e4he teavet Bitrix'i rakenduste t\u00f6\u00f6 kohta Kuberneteses.<br \/>\nLeidsin vaid sellised materjalid:<\/p>\n<p><\/p>\n<p>Ettekanne Aleksandr Serbuli ja Anton Tuzlukovi poolt Qsoft'ist: <\/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=\"Vaata videot\" 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>Soovitan seda kuulata.<\/p>\n<p><\/p>\n<p>Kasutajalt enda lahenduse arendamine <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\/\">Habr\u00e1s<\/a><\/noindex>.<br \/>\nLeidsin veel <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ESSch\/kubernetes\">sellise lahenduse<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Ja... t\u00f5epoolest, see on k\u00f5ik.<\/p>\n<p><\/p>\n<p>Maadan, mehaanika lahenduste t\u00f6\u00f6 kvaliteeti, mis on antud \u00fclalpool, me pole kontrollinud \ud83d\ude42<br \/>\nMuide, meie lahenduse ettevalmistamise k\u00e4igus suhtlesin Aleksandr Serbuliiga. Tema ettekannet ei olnud veel, seega mu slaididel on punkt \u201eBitrix ei kasuta Kuberneteset\u201c.<\/p>\n<p><\/p>\n<p>Aga Bitrixi jaoks on juba palju valmis Docker-imaid: <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>Kas see on piisav, et luua t\u00e4ielik lahendus Bitrixi jaoks Kuberneteses?<br \/>\nEi. On palju probleeme, mida tuleb lahendada.<\/p>\n<p><\/p>\n<h4 id=\"v-chem-problemy-s-bitriks-v-kubernetes\">Millised on probleemid Bitrixiga Kuberneteses?<\/h4>\n<p><\/p>\n<p><strong>Esimene probleem on see, et Dockerhubist leitud valmis pildid ei sobi Kubernetesesse.<\/strong><\/p>\n<p><\/p>\n<p>Kui me tahame ehitada mikroteenuste arhitektuuri (ja Kuberneteses me tavaliselt tahame), tuleb rakendus Kuberneteses jagada konteineriteks ja p\u00fc\u00fcdma tagada, et iga konteiner t\u00e4idab \u00fcksikut v\u00e4ikest funktsiooni (ja teeb seda h\u00e4sti). Miks ainult \u00fcks? Lihtsalt \u00f6eldes \u2014 mida lihtsam, seda kindlam.<br \/>\nPikemalt vaadake palun seda artiklit ja videot: <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>Dockerhubi Docker-imaid ehitatakse peamiselt p\u00f5him\u00f5ttel \u201ek\u00f5ik \u00fches\u201c, seega pidime ikkagi oma rattaga asja k\u00e4ivitama ja isegi pilte nullist tegema.<\/p>\n<p><\/p>\n<p><strong>Teine probleem on see, et saidi koodi muudetakse admin-paneeli kaudu.<\/strong><\/p>\n<p><\/p>\n<p>Loodud on uus jaotis veebisaidil \u2014 kood on uuendatud (ilmunud on uue jaotise nimeline kaust).<\/p>\n<p><\/p>\n<p>Muudeti komponendi omadusi admin-paneelist \u2014 kood on muutunud.<\/p>\n<p><\/p>\n<p>Kubernetes ei oska sellise konfiguratsiooniga t\u00f6\u00f6tada, konteinerid peaksid olema muutumatud (Stateless).<\/p>\n<p><\/p>\n<p>P\u00f5hjus: iga konteiner (pod) klastri sees t\u00f6\u00f6tleb ainult osa liiklusest. Kui muuta koodi ainult \u00fches konteineris (podis), siis erinevates podides on kood erinev, veebisait t\u00f6\u00f6tab erinevalt ja erinevatele kasutajatele kuvatakse veebisaidi erinevaid versioone. Nii ei saa eksisteerida.<\/p>\n<p><\/p>\n<p><strong>Kolmas \u2014 tuleb lahendada juurutamise k\u00fcsimus.<\/strong><\/p>\n<p><\/p>\n<p>Kui meil on monoliitne rakendus ja \u00fcks \u00abklassikaline\u00bb server, on k\u00f5ik v\u00e4ga lihtne: k\u00e4ivitame uue koodibaasi, teeme andmebaasi migratsiooni, suuname liikluse uue koodiversiooni suunas. Suunamine toimub kohe.<br \/>\nKui meil on veebisait Kuberneteses, jagatud mikroteenusteks, on konteineritega, kus on uus kood, palju \u2014 oioi. Tuleb koguda konteinerid uue koodiversiooniga, asendada need vanadega, \u00f5igesti teostada andmebaasi migratsioon ja ideaaljuhul teha seda k\u00fclalistele m\u00e4rkamatult. On seejuures hea, et Kubernetes aitab, toetades erinevaid juurutusviise.<\/p>\n<p><\/p>\n<p><strong>Neljas \u2013 peate lahendama staatilise salvestamise k\u00fcsimuse<\/strong><\/p>\n<p><\/p>\n<p>Kui teie veebileht kaalub \u201evaid\u201d 10 gigabaiti ja te k\u00e4ivitate selle t\u00e4ielikult konteinerites, siis saadud konteinerite kaal on 10 gigabaiti, mis paigaldatakse igavesti.<br \/>\nVeebilehe k\u00f5ige \u201eraskeid\u201d osi tuleb hoida v\u00e4ljaspool konteineri, ja tekib k\u00fcsimus, kuidas seda \u00f5igesti teha<\/p>\n<p><\/p>\n<h4 id=\"chego-net-v-nashem-reshenii\">Mida meie lahenduses ei ole<\/h4>\n<p><\/p>\n<p>Kogu Bitrixi kood ei ole jagatud mikrofunktsioonide\/mikroteenuste vahel (nii, et registreerimine eraldi, e-poe moodul eraldi jne). Kogu koodibaas on iga konteineri sees t\u00e4ies mahus.<\/p>\n<p><\/p>\n<p>Andmebaasi me Kuberneteses samuti ei hoia (olen siiski rakendanud lahendusi andmebaasi jaoks Kuberneteses arenduskeskkondades, kuid mitte tootmises).<\/p>\n<p><\/p>\n<p>Veebisaidi administraatorid m\u00e4rkavad ikkagi, et veebileht t\u00f6\u00f6tab Kuberneteses. Funktsioon \u201es\u00fcsteemi kontroll\u201d ei t\u00f6\u00f6ta \u00f5igesti, veebilehe koodi toimetamiseks administreerimisliidesest tuleb esmalt vajutada nuppu \u201etahan koodi toimetada\u201d.<\/p>\n<p><\/p>\n<p>Oleme probleemid lahendanud ning mikrotasandite rakendamise vajadused m\u00e4\u00e4ratletud, eesm\u00e4rk on selge \u2014 luua t\u00f6\u00f6tav s\u00fcsteem rakenduste k\u00e4itamiseks Bitrixis Kuberneteses, s\u00e4ilitades nii Bitrixi funktsionaalsuse kui ka Kubernetes eelised. Alustame rakendamist.<\/p>\n<p><\/p>\n<h4 id=\"arhitektura\">Arhitektuur<\/h4>\n<p><\/p>\n<p>Palju 't\u00f6\u00f6tava' pinde veebiserveriga (worker'id).<br \/>\n\u00dcks pod kront\u00f6\u00f6ride jaoks (ainult \u00fcks on kohustuslik).<br \/>\n\u00dcks upgrade pod saidi koodi redigeerimiseks admin-paneelist (samuti on kohustuslik ainult \u00fcks).<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge \u010celjabinskis ja Bitrix Kuberneteses\" src=\"\/wp-content\/uploads\/e26a787c11f78811b15a89f597331ef1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lahendame k\u00fcsimused:<\/p>\n<p><\/p>\n<ul>\n<li>Kus s\u00e4ilitada sessioone?<\/li>\n<li>Kus hoida vahem\u00e4lu?<\/li>\n<li>Kus hoida staatilist sisu, ei saa ju gigabaite statiilist sisu hunnikus konteinerites hoida?<\/li>\n<li>Kuidas t\u00f6\u00f6tab andmebaas?<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"docker-obraz\">Docker pilt<\/h4>\n<p><\/p>\n<p>Alustame Docker pildi kogumisega.<\/p>\n<p><\/p>\n<p>Ideaalne variant \u2014 meil on \u00fcks universaalne pilt, mille alusel saame nii t\u00f6\u00f6taja pod'id kui ka kront\u00f6\u00f6ride pod'id ja upgrade pod'id.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/centosadmin\/bitrixenv\">Oleme teinud nagu just selle pildi.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>See sisaldab nginx'i, apache\/php-fpm (valitav kogumise ajal), msmtp meilide saatmiseks ja kront\u00f6\u00f6r.<\/p>\n<p><\/p>\n<p>Pildi kogumise k\u00e4igus kopeeritakse kaustasse \/app kogu saidi koodibaas (v.a need osad, mille viime \u00fcle eraldi jagatud salvestusse).<\/p>\n<p><\/p>\n<h4 id=\"mikroservisnost-servisy\">Mikroteenused, teenused<\/h4>\n<p><\/p>\n<p><strong>t\u00f6\u00f6taja pod'id:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>Konteiner nginx'iga + konteiner apache\/php-fpm + msmtp<\/li>\n<li>msmtp ei saanud eraldi mikroteenuseks v\u00e4lja viidud, Bitrix hakkab protestima, et ei saa otse e-kirju saata<\/li>\n<li>Igas konteineris on t\u00e4ielik koodibaas.<\/li>\n<li>Keeld koodi muutmiseks konteinerites.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>cron all:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>konteiner koos apache'i, php ja croniga<\/li>\n<li>komplektis on t\u00e4ielik koodibaas<\/li>\n<li>keeld koodi muutmiseks konteinerites<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>upgrade all:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>konteiner nginxiga + konteiner apache\/php-fpm + msmtp<\/li>\n<li>koodi muutmiseks konteinerites ei ole keeldu<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>sessioonide salvestamine<\/strong><\/p>\n<p><\/p>\n<p><strong>Bitrixi vahem\u00e4lu salvestamine<\/strong><\/p>\n<p><\/p>\n<p>Veel oluline: \u00fchendamise paroolid, alates andmebaasist kuni e-kirjadeni, s\u00e4ilitame kubernetes secrets. Saame boonuse, et paroolid on n\u00e4htavad ainult neile, kellele anname juurdep\u00e4\u00e4su saladustele, mitte k\u00f5igile, kellel on juurdep\u00e4\u00e4s projekti koodibaasile.<\/p>\n<p><\/p>\n<h4 id=\"hranilische-dlya-statiki\">staatika salvestamine<\/h4>\n<p><\/p>\n<p>V\u00f5ib kasutada mida iganes: ceph, nfs (aga nfs ei ole tootmises soovitatav), pilveteenuse pakkujate v\u00f5rgu salvestus jne.<\/p>\n<p><\/p>\n<p>Salvestus tuleb \u00fchendama konteinerites \/upload\/ veebilehe katalooge ja teisi staatika katalooge.<\/p>\n<p><\/p>\n<h4 id=\"baza-dannyh\">Andmebaas<\/h4>\n<p><\/p>\n<p>Lihtsuse huvides soovitame andmebaasi viia v\u00e4ljapoole Kuberneteset. Andmebaas Kuberneteses on eraldi keeruline \u00fclesanne, mis muudab skeemi oluliselt keerukamaks.<\/p>\n<p><\/p>\n<h4 id=\"hranilische-sessiy\">sessioonide salvestamine<\/h4>\n<p><\/p>\n<p>Kasutame memcached \ud83d\ude42<\/p>\n<p><\/p>\n<p>See s\u00e4ilitab sessioone t\u00f5husalt, klastreerub ja toetab \"natiivselt\" session.save_path'i php-s. Selline s\u00fcsteem on korduvalt t\u00f6\u00f6le pandud klassikalises monoliitarkitektuuris, kui ehitasime suure arvu veebi serveritega klastreid. Deployment'i jaoks kasutame helm'i.<\/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 siin on pildis m\u00e4\u00e4ratud seaded sessioonide hoidmiseks memcached'is<\/p>\n<p><\/p>\n<p>Me kasutasime keskkonnamuutujaid hostide andmete edastamiseks memcached'iga <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 \/>\nSee v\u00f5imaldab kasutada sama koodi dev, stage, test, prod keskkondades (memcached'i hostide nimed neil erinevad, seet\u00f5ttu peame igasse keskkonda edastama unikaalsed hostide nimed sessioonide jaoks).<br \/>\nBitrix'i vahem\u00e4lu salvestamine<\/p>\n<p><\/p>\n<p>Me vajame k\u00f5rge usaldusv\u00e4\u00e4rsusega salvestust, kuhu k\u00f5ik podid saaksid kirjutada ja kust nad saaksid lugeda.<\/p>\n<p><\/p>\n<p>Kasutame ka memcached'i.<br \/>\nSeda lahendust soovitab Bitrix ise.<\/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 siin Bitrix'is m\u00e4\u00e4ritakse, kus meie vahem\u00e4lu asub<\/p>\n<p><\/p>\n<p>Kasutame ka keskkonnamuutujaid.<\/p>\n<p><\/p>\n<h3 id=\"krontaski\">Kronitasud<\/h3>\n<p><\/p>\n<p>Kuberneteses on erinevad l\u00e4henemisviisid cron-tasude t\u00e4itmiseks.<\/p>\n<p><\/p>\n<ul>\n<li>eraldi deployment pod cron-tasude t\u00e4itmiseks<\/li>\n<li>cronjob krontaskide t\u00e4itmiseks (kui see on veebirakendus \u2014 koos wget <noindex>https:\/\/$host$cronjobname<\/noindex>, v\u00f5i kubectl exec \u00fche t\u00f6\u00f6taja podi sisse jne)<\/li>\n<li>jne.<\/li>\n<\/ul>\n<p><\/p>\n<p>V\u00f5ib vaielda, milline valik on k\u00f5ige \u00f5igem, kuid selles olukorras valisime variandi 'eraldi deployment pod'ide jaoks cron taskidele'.<\/p>\n<p><\/p>\n<p>Kuidas seda teha:<\/p>\n<p><\/p>\n<ul>\n<li>krontaskid lisame l\u00e4bi ConfigMapi v\u00f5i config\/addcron faili<\/li>\n<li>k\u00e4ivitame konteineri, mis on identne t\u00f6\u00f6taja podiga + lubame krontaskide t\u00e4itmise selles<\/li>\n<li>kasutame sama koodibaasi, t\u00e4nu \u00fchtsusele on konteineri koostamine lihtne<\/li>\n<\/ul>\n<p><\/p>\n<p>Mida head me saame:<\/p>\n<p><\/p>\n<ul>\n<li>meil on t\u00f6\u00f6tavad krontaskid keskkonnas, mis on identne arendajate keskkonnaga (docker)<\/li>\n<li>Cron-t\u00f6\u00f6d pole vaja '\u00fclekirjutada' Kubernetes jaoks, need t\u00f6\u00f6tavad endiselt samas vormis ja sama koodibaasis nagu varem.<\/li>\n<li>krontaskid saavad lisada k\u00f5ik meeskonna liikmed, kellel on commit \u00f5igused tootmisvihikus, mitte ainult administraatorid<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"modul-southbridge-k8sdeploy-i-redaktirovanie-koda-iz-admin-paneli\">Moodul Southbridge K8SDeploy ja koodi redigeerimine administraatoripaneelis<\/h3>\n<p><\/p>\n<p>R\u00e4\u00e4kisime me ju podi uuendamisest?<br \/>\nAga kuidas suunata sinna liiklust?<br \/>\nHurraa, me kirjutasime selle jaoks mooduli PHP-s \ud83d\ude42 See on v\u00e4ike klassikaline moodul Bittrexile. Seda ei ole veel avalikult saadaval, kuid plaanime selle avada.<br \/>\nMoodul installitakse Bitrixis nagu tavaline moodul:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge \u010celjabinskis ja Bitrix Kuberneteses\" src=\"\/wp-content\/uploads\/ba9f895ce645862c7ba003d523cd5656.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja see n\u00e4eb v\u00e4lja selline:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge \u010celjabinskis ja Bitrix Kuberneteses\" src=\"\/wp-content\/uploads\/916ae9243fae9f6405cc68174ec5bb2b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See v\u00f5imaldab seadistada k\u00fcpsise, mis identifitseerib saidi administraatori ja v\u00f5imaldab Kubernetesel suunata liiklust upgrade podile.<\/p>\n<p><\/p>\n<p>Kui muudatused on l\u00f5petatud, tuleb vajutada git push, koodimuudatused saadetakse git'i, seej\u00e4rel kogub s\u00fcsteem uue versiooni koodiga pildi ja \u201ejaotab\u201d selle klastrisse, asendades vanad podid.<\/p>\n<p><\/p>\n<p>Jah, see on veidi tobe, kuid samas s\u00e4ilitame mikroteenuste arhitektuuri ja ei v\u00f5ta Bitrixi kasutajatelt armastatud v\u00f5imalust koodi adminpaneelilt parandada. L\u00f5ppkokkuv\u00f5ttes on see valik, koodi muutmise \u00fclesanne v\u00f5ib olla lahendatud ka teisiti.<\/p>\n<p><\/p>\n<h4 id=\"helm-chart\">Helm chart<\/h4>\n<p><\/p>\n<p>Kuberneteses rakenduste kogumiseks kasutame tavaliselt pakihaldurit Helm.<br \/>\nMeie Bitrixi lahenduse jaoks Kuberneteses kirjutas meie juhtiv s\u00fcsteemiadministraator Sergei Bondarev spetsiaalse Helm charti.<\/p>\n<p><\/p>\n<p>See teostab worker'ite, ugrade'i, cron pod'ide kokkupaneku, seadistab ingress'id, teenused ning edastab muutujad Kubernetes'i saladustest pod'idele.<\/p>\n<p><\/p>\n<p>Koodi hoiame Gitlabis, samuti k\u00e4ivitame Helm kogumise Gitlabist.<\/p>\n<p><\/p>\n<p>L\u00fchidalt \u00f6eldes, see n\u00e4eb v\u00e4lja selline<\/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 v\u00f5imaldab ka \"s\u00f5ltumatut\" tagasip\u00f6\u00f6rdumist, kui juhtub, et juurutamisel l\u00e4heb midagi valesti. On tore, et te ei pea \u00e4revuses \"koodi FTP kaudu parandama, sest tootmine kukkus\", vaid Kubernetes teeb seda automaatselt, ilma seisakuta.<\/p>\n<p><\/p>\n<h4 id=\"deploy\">Juhtimist\u00f6\u00f6<\/h4>\n<p><\/p>\n<p>Jah, me oleme Gitlabi ja GitLab CI f\u00e4nnid, kasutame seda \ud83d\ude42<br \/>\nGitlabi projektireposiitiumisse commitimisel k\u00e4ivitab GitLab torustiku, mis viib ellu keskkonna uue versiooni.<\/p>\n<p><\/p>\n<p>Etapid:<\/p>\n<p><\/p>\n<ul>\n<li>build (uus Docker pilt kokku monteerimine)<\/li>\n<li>test (testimine)<\/li>\n<li>clean up (testkeskkonna eemaldamine)<\/li>\n<li>push (kujundi saatmine Docker registrisse)<\/li>\n<li>deploy (rakenduse juurutamine Kuberneteses Helmi kaudu).<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge \u010celjabinskis ja Bitrix Kuberneteses\" src=\"\/wp-content\/uploads\/74e565a0793b90c3cc19b8c7dedaff34.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hurraa, valmis, juurutame!<br \/>\nV\u00f5i k\u00fcsime k\u00fcsimusi, kui neid on.<\/p>\n<p><\/p>\n<h2 id=\"itak-chto-my-sdelali\">Niisiis, mida me tegime<\/h2>\n<p><\/p>\n<p><strong>Tehnilisest vaatenurgast:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>dockeriseerisime Bitrixi;<\/li>\n<li>\"l\u00f5ikasime\" Bitrixi konteineriteks, millest iga\u00fcks t\u00e4idab minimaalset funktsiooni;<\/li>\n<li>saavutasime konteinerite state-less oleku;<\/li>\n<li>lahendasime Bitrixi uuendamise probleem Kuberneteses;<\/li>\n<li>k\u00f5ik Bitrixi funktsioonid t\u00f6\u00f6tasid edasi (peaaegu k\u00f5ik);<\/li>\n<li>kasutasime Kuberneteses juurutamist ja versioonide vahelist tagasip\u00f6\u00f6rdumist.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>\u00c4rivaatepunktist:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>rikketolerantsus;<\/li>\n<li>Kubernetesi t\u00f6\u00f6riistad (lihtne integratsioon Gitlab CI-ga, sujuv deploy, jne);<\/li>\n<li>salasonad salvestustes (n\u00e4htavad ainult neile, kellele on otseselt antud juurdep\u00e4\u00e4s salasonadele);<\/li>\n<li>t\u00e4iendavate keskkondade loomine (arenduseks, testimiseks jne) \u00fches infrastruktuuris on mugav.<\/li>\n<\/ul>\n<p>Allikas: <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 4.9.10 - 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 \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\" \/>\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\/et\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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 \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/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 T\u0161eljabinskis ja Bitrix Kubernetesis | ProHoster","description":"T\u0161eljabinskis toimuvad s\u00fcsteemiadministraatorite Sysadminka kohtumised, kus ma tegin ettekande meie lahendusest 1C-Bitrixi rakenduste t\u00f6\u00f6tamiseks Kubernetesis. Bitrix, Kubernetes, Ceph \u2014 suurep\u00e4rane segu? R\u00e4\u00e4gin, kuidas me sellest k\u00f5ik kokku panime t\u00f6\u00f6tava lahenduse. Alustame! Kohtumine toimus 18. aprillil T\u0161eljabinskis. Meie kohtumistest saab lugeda Timepadis ja vaadata","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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 \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","og:url":"https:\/\/prohoster.info\/et\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/35581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=35581"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/35581\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=35581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=35581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=35581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}