{"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\/nl\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes","title":{"rendered":"Southbridge in Chelyabinsk en Bitrix in Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>In Tsjeljabinsk worden Sysadminka meetups voor systeembeheerders gehouden, en tijdens de laatste heb ik een presentatie gegeven over onze oplossing voor het draaien van applicaties op 1C-Bitrix in Kubernetes.<\/p>\n<p><\/p>\n<p>Bitrix, Kubernetes, Ceph \u2014 een geweldige combinatie?<\/p>\n<p><\/p>\n<p>Ik zal uitleggen hoe we dit alles hebben samengevoegd tot een werkende oplossing.<\/p>\n<p><\/p>\n<p>Laten we beginnen!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge in Chelyabinsk en Bitrix in 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>De meetup vond plaats op 18 april in Tsjeljabinsk. Over onze meetups kun je lezen op <noindex><a rel=\"nofollow\" href=\"https:\/\/sysadminka.timepad.ru\">Timepad<\/a><\/noindex> en kijken op <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/channel\/UCMblNgU0Gt-TXb9GdVeeinw\/\">YouTube<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Als je naar ons wilt komen met een presentatie of als luisteraar \u2014 welkom, schrijf naar vadim.isakanov@gmail.com en op Telegram t.me\/vadimisakanov. <\/p>\n<p><\/p>\n<h2 id=\"moy-doklad\">Mijn presentatie<\/h2>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MZqPNMUjr_M\" title=\"Presentatie over Bitrix in Kubernetes\"><img decoding=\"async\" alt=\"Southbridge in Chelyabinsk en Bitrix in 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\">Slides<\/a><\/noindex><\/p>\n<p><\/p>\n<h2 id=\"reshenie-bitriks-v-kubernetes-versiya-southbridge-10\">Oplossing \u2018Bitrix in Kubernetes, versie Southbridge 1.0\u2019<\/h2>\n<p><\/p>\n<p>Ik zal ons product bespreken in de stijl van \u2018voor leken in Kubernetes\u2019, zoals het tijdens de meetup werd gepresenteerd. Maar ik neem aan dat de woorden Bitrix, Docker, Kubernetes, Ceph wel tenminste op het niveau van Wikipedia-artikelen bij je bekend zijn.<\/p>\n<p><\/p>\n<h4 id=\"chto-voobsche-est-gotovogo-pro-bitriks-v-kubernetes\">Wat is er \u00fcberhaupt bekend over Bitrix in Kubernetes?<\/h4>\n<p><\/p>\n<p>Er is heel weinig informatie op het internet over het draaien van applicaties op Bitrix in Kubernetes.<br \/>\nIk heb alleen de volgende materialen gevonden:<\/p>\n<p><\/p>\n<p>De presentatie van Alexander Serbul, 1C-Bitrix, en Anton Tuzlukov van 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=\"Video afspelen\" 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>Ik raad aan om deze te beluisteren.<\/p>\n<p><\/p>\n<p>Ontwikkeling van een eigen oplossing door een gebruiker <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\/\">Mythen en realiteit<\/a><\/noindex>.<br \/>\nIk vond nog <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ESSch\/kubernetes\">zo'n oplossing<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Ennn... dat is eigenlijk alles.<\/p>\n<p><\/p>\n<p>Ik waarschuw je, we hebben de kwaliteit van de oplossingen in de bovenstaande links niet gecontroleerd \ud83d\ude42<br \/>\nOverigens sprak ik tijdens de voorbereiding van onze oplossing met Alexander Serbul, zijn presentatie was er toen nog niet, daarom zit er een punt in mijn slides dat zegt \u2018Bitrix maakt geen gebruik van Kubernetes\u2019.<\/p>\n<p><\/p>\n<p>Maar er zijn al veel kant-en-klare Docker-images voor het draaien van 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 dit voldoende voor het cre\u00ebren van een volledige oplossing voor Bitrix in Kubernetes?<br \/>\nNee. Er zijn een groot aantal problemen die opgelost moeten worden.<\/p>\n<p><\/p>\n<h4 id=\"v-chem-problemy-s-bitriks-v-kubernetes\">Wat zijn de problemen met Bitrix in Kubernetes?<\/h4>\n<p><\/p>\n<p><strong>De eerste \u2014 kant-en-klare images van Dockerhub zijn niet geschikt voor Kubernetes.<\/strong><\/p>\n<p><\/p>\n<p>Als we een microservices-architectuur willen bouwen (en dat willen we meestal in Kubernetes), moet de applicatie in Kubernetes worden opgesplitst in containers en moet ervoor worden gezorgd dat elke container \u00e9\u00e9n kleine functie uitvoert (en dit goed doet). Waarom maar \u00e9\u00e9n? Kort gezegd \u2014 hoe eenvoudiger, hoe betrouwbaarder.<br \/>\nAls je het langer wilt houden \u2014 kijk alstublieft naar dit artikel en de 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 op Dockerhub zijn meestal gebouwd volgens het \u2018alles-in-\u00e9\u00e9n\u2019 principe, dus we moesten toch onze eigen \u2018fiets\u2019 maken en zelfs de images vanaf nul bouwen.<\/p>\n<p><\/p>\n<p><strong>De tweede \u2014 de code van de site wordt aangepast vanuit het beheerpaneel.<\/strong><\/p>\n<p><\/p>\n<p>We hebben een nieuw deel op de website gecre\u00eberd - de code is bijgewerkt (er is een directory toegevoegd met de naam van het nieuwe deel).<\/p>\n<p><\/p>\n<p>We hebben de eigenschappen van de component vanuit het beheerderspaneel gewijzigd - de code is veranderd.<\/p>\n<p><\/p>\n<p>Kubernetes kan hier standaard niet mee omgaan, containers moeten onveranderlijk zijn (Stateless).<\/p>\n<p><\/p>\n<p>Reden: elke container (pod) in de cluster verwerkt slechts een deel van het verkeer. Als je de code in slechts \u00e9\u00e9n container (pod) wijzigt, zal de code in verschillende pods verschillend zijn, de website zal anders functioneren, en verschillende gebruikers zullen verschillende versies van de website zien. Zo kan het niet doorgaan.<\/p>\n<p><\/p>\n<p><strong>De derde - we moeten het probleem van de deployment oplossen<\/strong><\/p>\n<p><\/p>\n<p>Als we een monolithische structuur hebben en \u00e9\u00e9n 'klassieke' server, is alles heel eenvoudig: we zetten de nieuwe codebasis op, voeren de database-migratie uit, en schakelen het verkeer over naar de nieuwe codeversie. De overschakeling gebeurt onmiddellijk.<br \/>\nAls we een website in Kubernetes hebben, verdeeld in microservices, met veel containers met code - oeps. We moeten containers met de nieuwe codeversie bouwen, ze in plaats van oude uitrollen, de database-migratie correct uitvoeren, en idealiter moet dit onopgemerkt blijven voor bezoekers. Gelukkig helpt Kubernetes ons hierbij en ondersteunt het verschillende soorten deployments.<\/p>\n<p><\/p>\n<p><strong>De vierde - we moeten het probleem van de opslag van statische bestanden oplossen<\/strong><\/p>\n<p><\/p>\n<p>Als je website 'slechts' 10 gigabyte groot is en je het geheel in containers uitrolt, krijg je containers van 10 gigabyte die een eeuwigheid zullen worden gedeployed.<br \/>\nWe moeten de 'zwaarste' delen van de website buiten de containers opslaan, en de vraag is hoe we dit het beste kunnen doen.<\/p>\n<p><\/p>\n<h4 id=\"chego-net-v-nashem-reshenii\">Wat ontbreekt in onze oplossing<\/h4>\n<p><\/p>\n<p>De volledige Bitrix-code is niet opgesplitst in microfuncties\/microservices (dus, registratie apart, module voor de webwinkel apart, enz.). We bewaren de hele codebasis in elke container.<\/p>\n<p><\/p>\n<p>We bewaren de database in Kubernetes ook niet (ik heb wel oplossingen met een database in Kubernetes gerealiseerd voor ontwikkelomgevingen, maar niet voor productie).<\/p>\n<p><\/p>\n<p>Beheerders van de website zullen echter opmerken dat de website in Kubernetes draait. De functie 'systeemcontrole' werkt niet correct, om de code van de website vanuit het beheerderspaneel te bewerken, moet je eerst op de knop 'ik wil de code bewerken' drukken.<\/p>\n<p><\/p>\n<p>We have addressed the issues, clarified the need for microservices, and have a clear goal \u2014 to create a functioning system for running Bitrix applications on Kubernetes, preserving both Bitrix's capabilities and the advantages of Kubernetes. We are starting the implementation.<\/p>\n<p><\/p>\n<h4 id=\"arhitektura\">Architectuur<\/h4>\n<p><\/p>\n<p>Veel \u2018worker\u2019 pods met een webserver.<br \/>\nOne pod with cron tasks (only one is required).<br \/>\nOne upgrade pod for editing the site's code from the admin panel (also, only one is required).<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge in Chelyabinsk en Bitrix in Kubernetes\" src=\"\/wp-content\/uploads\/e26a787c11f78811b15a89f597331ef1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>We are solving the following issues:<\/p>\n<p><\/p>\n<ul>\n<li>Where to store sessions?<\/li>\n<li>Where to store the cache?<\/li>\n<li>Where to store static files? We can't place gigabytes of static files in a bunch of containers.<\/li>\n<li>How will the database operate?<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"docker-obraz\">Docker image<\/h4>\n<p><\/p>\n<p>We start by building the Docker image.<\/p>\n<p><\/p>\n<p>The ideal option is to have one universal image, which we use to obtain both worker pods and pods with cron tasks, as well as upgrade pods.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/centosadmin\/bitrixenv\">We have created exactly such an image.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>It includes nginx, apache\/php-fpm (which can be selected during the build), msmtp for sending emails, and cron.<\/p>\n<p><\/p>\n<p>During the image build, the complete code base of the site is copied to the \/app directory (except for those parts we will move to a separate shared storage).<\/p>\n<p><\/p>\n<h4 id=\"mikroservisnost-servisy\">Microservices, services<\/h4>\n<p><\/p>\n<p><strong>worker pods:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>Container with nginx + container apache\/php-fpm + msmtp<\/li>\n<li>msmtp could not be separated into its own microservice; Bitrix starts complaining that it cannot send emails directly.<\/li>\n<li>Each container has the complete code base.<\/li>\n<li>Modification of code in containers is prohibited.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>cron pod:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>container with apache, php, cron<\/li>\n<li>includes the complete code base<\/li>\n<li>modification of code in containers is prohibited<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>upgrade pod:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>container with nginx + container apache\/php-fpm + msmtp<\/li>\n<li>there is no prohibition on changing code in containers<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>session storage<\/strong><\/p>\n<p><\/p>\n<p><strong>Bitrix cache storage<\/strong><\/p>\n<p><\/p>\n<p>Additionally important: passwords for connecting to everything from the database to email are stored in Kubernetes secrets. We get the bonus that passwords are visible only to those we give access to the secrets, not to everyone who has access to the project's code base.<\/p>\n<p><\/p>\n<h4 id=\"hranilische-dlya-statiki\">Storage for static files<\/h4>\n<p><\/p>\n<p>Anything can be used: ceph, nfs (but we do not recommend nfs for production), network storage from 'cloud' providers, etc.<\/p>\n<p><\/p>\n<p>The storage needs to be connected in the containers to the \/upload\/ directory of the site and other directories with static files.<\/p>\n<p><\/p>\n<h4 id=\"baza-dannyh\">Database<\/h4>\n<p><\/p>\n<p>For simplicity, we recommend placing the database outside of Kubernetes. A database in Kubernetes is a separate complex task, which will make the schema significantly more complicated.<\/p>\n<p><\/p>\n<h4 id=\"hranilische-sessiy\">Session storage<\/h4>\n<p><\/p>\n<p>We use memcached \ud83d\ude42<\/p>\n<p><\/p>\n<p>Het beheert sessies goed, is geclusterd en wordt \u2018native\u2019 ondersteund als session.save_path in php. Dit systeem is talloze keren getest in de klassieke monolithische architectuur, toen we clusters bouwden met veel webservers. Voor de deployment gebruiken we 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 hier zijn de instellingen voor het opslaan van sessies in memcached ingesteld in de afbeelding<\/p>\n<p><\/p>\n<p>We gebruikten omgevingsvariabelen om gegevens over de hosts met memcached door te geven. <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 \/>\nDit stelt ons in staat dezelfde code te gebruiken in de omgevingen dev, stage, test, prod (de namen van de memcached hosts zullen verschillen, daarom moeten we voor elke omgeving een unieke naam voor de sessiehosts doorgeven).<br \/>\nCache opslag voor Bitrix<\/p>\n<p><\/p>\n<p>We hebben een fouttolerante opslag nodig waar alle pods naar kunnen schrijven en lezen.<\/p>\n<p><\/p>\n<p>We gebruiken ook memcached.<br \/>\nDeze oplossing wordt aanbevolen door Bitrix zelf.<\/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 hier wordt in Bitrix ingesteld waar onze cache is opgeslagen<\/p>\n<p><\/p>\n<p>We gebruiken ook omgevingsvariabelen.<\/p>\n<p><\/p>\n<h3 id=\"krontaski\">Cron-taken<\/h3>\n<p><\/p>\n<p>Er zijn verschillende benaderingen voor het uitvoeren van cron-taken in Kubernetes.<\/p>\n<p><\/p>\n<ul>\n<li>een aparte deployment met een pod voor het uitvoeren van cron-taken<\/li>\n<li>cronjob voor het uitvoeren van cron-taken (als het een webapp is \u2013 met wget <noindex>https:\/\/$host$cronjobname<\/noindex>, of kubectl exec binnen een van de worker pods, enz.)<\/li>\n<li>enz.<\/li>\n<\/ul>\n<p><\/p>\n<p>Er kan over het juiste gekozen alternatief gediscussieerd worden, maar in dit geval hebben we gekozen voor de optie \u2018afzonderlijke deployment met pods voor cronjobs\u2019<\/p>\n<p><\/p>\n<p>Hoe het is gedaan:<\/p>\n<p><\/p>\n<ul>\n<li>we voegen cron-taken toe via ConfigMap of via het bestand config\/addcron<\/li>\n<li>we starten \u00e9\u00e9n exemplaar van de container op, identiek aan de worker-pod + we staan het uitvoeren van cron-taken daarin toe<\/li>\n<li>dezelfde codebase wordt gebruikt, waardoor de containerbouw eenvoudig is<\/li>\n<\/ul>\n<p><\/p>\n<p>Wat goed is:<\/p>\n<p><\/p>\n<ul>\n<li>we hebben werkende cron-taken in een omgeving die identiek is aan die van de ontwikkelaars (docker)<\/li>\n<li>Cronjobs hoeven niet \u2018aangepast\u2019 te worden voor Kubernetes, ze werken in dezelfde vorm en dezelfde codebasis als voorheen.<\/li>\n<li>alle teamleden met commit-rechten in de production branch kunnen cron-taken toevoegen, niet alleen beheerders<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"modul-southbridge-k8sdeploy-i-redaktirovanie-koda-iz-admin-paneli\">Module Southbridge K8SDeploy en het bewerken van code vanuit de admin-interface<\/h3>\n<p><\/p>\n<p>We hadden het toch over de upgrade van de pod?<br \/>\nHoe leiden we daar het verkeer naartoe?<br \/>\nHoera, we hebben hiervoor een php-module geschreven \ud83d\ude42 Dit is een kleine klassieke module voor Bitrix. Deze is nog niet openbaar beschikbaar, maar we zijn van plan deze open te stellen.<br \/>\nDe module wordt ge\u00efnstalleerd als een gewone module in Bitrix:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge in Chelyabinsk en Bitrix in Kubernetes\" src=\"\/wp-content\/uploads\/ba9f895ce645862c7ba003d523cd5656.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En ziet er als volgt uit:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge in Chelyabinsk en Bitrix in Kubernetes\" src=\"\/wp-content\/uploads\/916ae9243fae9f6405cc68174ec5bb2b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Het stelt een cookie in die de site beheerder identificeert en stelt Kubernetes in staat om verkeer naar de upgrade pod te sturen.<\/p>\n<p><\/p>\n<p>Wanneer de wijzigingen voltooid zijn, moet je op git push drukken, de codewijzigingen worden naar git gestuurd, waarna het systeem een afbeelding met de nieuwe versie van de code zal verzamelen en deze over het cluster zal verspreiden, waarbij oude pods worden vervangen.<\/p>\n<p><\/p>\n<p>Ja, het is een beetje een omweg, maar we behouden de microservicesarchitectuur en ontnemen de gebruikers van Bitrix de mogelijkheid om de code vanuit de adminomgeving aan te passen. Tenslotte is dit een optie; de taak om de code te bewerken kan ook anders worden opgelost.<\/p>\n<p><\/p>\n<h4 id=\"helm-chart\">Helm chart<\/h4>\n<p><\/p>\n<p>Voor het bouwen van applicaties in Kubernetes gebruiken we doorgaans de pakketbeheerder Helm.<br \/>\nVoor onze Bitrix-oplossing in Kubernetes heeft Sergey Bondarev, onze hoofd systeembeheerder, een speciale Helm chart geschreven.<\/p>\n<p><\/p>\n<p>Hij maakt de worker-, upgrade- en cron pods aan, configureert ingress, services, en voert variabelen van Kubernetes secrets door naar de pods.<\/p>\n<p><\/p>\n<p>We slaan de code op in Gitlab en starten ook de Helm-bouw vanuit Gitlab.<\/p>\n<p><\/p>\n<p>Kort gezegd ziet het er zo uit<\/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 maakt ook een 'naadloze' rollback mogelijk als er tijdens de deployment iets misgaat. Het is fijn dat je niet in paniek de 'code via FTP moet fixen omdat de productie is gevallen', maar dat Kubernetes dit automatisch zonder downtime doet.<\/p>\n<p><\/p>\n<h4 id=\"deploy\">Deploy<\/h4>\n<p><\/p>\n<p>Ja, we zijn fan van Gitlab &amp; Gitlab CI, we maken er gebruik van \ud83d\ude42<br \/>\nBij een commit in Gitlab start Gitlab een pijplijn in de projectrepository die een nieuwe versie van de omgeving uitrolt.<\/p>\n<p><\/p>\n<p>Fasen:<\/p>\n<p><\/p>\n<ul>\n<li>build (we bouwen een nieuw Docker-image)<\/li>\n<li>test (we testen)<\/li>\n<li>clean up (we verwijderen de testomgeving)<\/li>\n<li>push (we sturen het naar de Docker-registry)<\/li>\n<li>deploy (we zetten de applicatie uit in Kubernetes via Helm).<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge in Chelyabinsk en Bitrix in Kubernetes\" src=\"\/wp-content\/uploads\/74e565a0793b90c3cc19b8c7dedaff34.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hoera, het is klaar, we implementeren!<br \/>\nOf we stellen vragen als die er zijn.<\/p>\n<p><\/p>\n<h2 id=\"itak-chto-my-sdelali\">Dus, wat hebben we gedaan<\/h2>\n<p><\/p>\n<p><strong>Technisch gezien:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>we hebben Bitrix gedockeriseerd;<\/li>\n<li>we hebben Bitrix 'in containers gesneden', die elk minimaal aan functies voldoen;<\/li>\n<li>we hebben een stateless status van de containers bereikt;<\/li>\n<li>we hebben het probleem met het updaten van Bitrix in Kubernetes opgelost;<\/li>\n<li>alle functies van Bitrix blijven werken (bijna allemaal);<\/li>\n<li>we hebben de uitrol in Kubernetes en de rollback tussen versies geoptimaliseerd.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Zicht op de business:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>betrouwbaarheid;<\/li>\n<li>Kubernetes-tools (eenvoudige integratie met Gitlab CI, naadloze uitrol, etc);<\/li>\n<li>wachtwoorden in secrets (alleen zichtbaar voor degenen die toegang tot de wachtwoorden hebben gehad);<\/li>\n<li>het is handig om extra omgevingen (voor ontwikkeling, tests enz.) binnen een enkele infrastructuur te maken.<\/li>\n<\/ul>\n<p>Bron: <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.3 - 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\/nl\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\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\/nl\/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 in Tsjeljabinsk en Bitrix in Kubernetes | ProHoster","description":"In Tsjeljabinsk vinden meetups plaats voor systeembeheerders Sysadminka, en op de laatste daarvan heb ik een presentatie gegeven over onze oplossing voor het draaien van applicaties op 1C-Bitrix in Kubernetes. Bitrix, Kubernetes, Ceph \u2014.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/35581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=35581"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/35581\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=35581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=35581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=35581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}