{"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\/en\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes","title":{"rendered":"Southbridge in Chelyabinsk and Bitrix in Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>In Chelyabinsk, Sysadminka system administrator meetups are taking place, and at the last one, I presented our solution for running applications on 1C-Bitrix in Kubernetes.<\/p>\n<p><\/p>\n<p>Bitrix, Kubernetes, Ceph \u2014 a great mix?<\/p>\n<p><\/p>\n<p>I'll explain how we assembled a working solution from all this.<\/p>\n<p><\/p>\n<p>Let's go!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge in Chelyabinsk and 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>The meetup took place on April 18 in Chelyabinsk. You can read about our meetups on <noindex><a rel=\"nofollow\" href=\"https:\/\/sysadminka.timepad.ru\">Timepad<\/a><\/noindex> and watch on <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/channel\/UCMblNgU0Gt-TXb9GdVeeinw\/\">YouTube.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>If you want to come and present or attend as a listener \u2014 you are welcome, write to vadim.isakanov@gmail.com and on Telegram t.me\/vadimisakanov. <\/p>\n<p><\/p>\n<h2 id=\"moy-doklad\">My presentation<\/h2>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MZqPNMUjr_M\" title=\"Report on Bitrix in Kubernetes\"><img decoding=\"async\" alt=\"Southbridge in Chelyabinsk and 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\">The solution \"Bitrix in Kubernetes, version Southbridge 1.0\"<\/h2>\n<p><\/p>\n<p>I will talk about our solution in a \"for beginners in Kubernetes\" format, as it was done at the meetup. But I assume you are at least familiar with the terms Bitrix, Docker, Kubernetes, and Ceph at the level of Wikipedia articles.<\/p>\n<p><\/p>\n<h4 id=\"chto-voobsche-est-gotovogo-pro-bitriks-v-kubernetes\">What is available about Bitrix in Kubernetes?<\/h4>\n<p><\/p>\n<p>There is very little information on the internet about running applications on Bitrix in Kubernetes.<br \/>\nI only found the following materials:<\/p>\n<p><\/p>\n<p>Presentation by Alexander Serbul, 1C-Bitrix, and Anton Tuzlukov from Qsoft: <\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"lHK4eOvLbRM\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/lHK4eOvLbRM\/hqdefault.jpg\" alt=\"Play video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p>I recommend listening to it.<\/p>\n<p><\/p>\n<p>Development of a custom solution from the user <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/serkyron\/\" class=\"user_link\">serkyron<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/351286\/\">On Habr\u00e9<\/a><\/noindex>.<br \/>\nI also found <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ESSch\/kubernetes\">such a solution<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>And... that's all.<\/p>\n<p><\/p>\n<p>I warn you, we haven't verified the quality of the solutions linked above \ud83d\ude42<br \/>\nBy the way, during the preparation of our solution, I spoke with Alexander Serbul, and at that time his presentation was not available yet, so my slides include a point saying \"Bitrix does not use Kubernetes.\"<\/p>\n<p><\/p>\n<p>But there are already many ready-made Docker images for running Bitrix in Docker: <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/search?q=bitrix&amp;type=image\">https:\/\/hub.docker.com\/search?q=bitrix&amp;type=image<\/a><\/noindex> <\/p>\n<p><\/p>\n<p>Is this enough to create a full-fledged solution for Bitrix in Kubernetes?<br \/>\nNo. There are many problems that need to be solved.<\/p>\n<p><\/p>\n<h4 id=\"v-chem-problemy-s-bitriks-v-kubernetes\">What are the problems with Bitrix in Kubernetes?<\/h4>\n<p><\/p>\n<p><strong>The first \u2014 ready-made images from Dockerhub are not suitable for Kubernetes.<\/strong><\/p>\n<p><\/p>\n<p>If we want to build a microservices architecture (and usually we do in Kubernetes), the application in Kubernetes needs to be split into containers, and we must ensure that each container performs one small function (and does it well). Why only one? In short \u2014 the simpler, the more reliable.<br \/>\nIf you want more details \u2014 please check this article and video: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/426637\/\">https:\/\/habr.com\/ru\/company\/southbridge\/blog\/426637\/<\/a><\/noindex> <\/p>\n<p><\/p>\n<p>Docker images in Dockerhub are mainly built on the principle of \"everything in one,\" so we had to create our bicycle and even build images from scratch.<\/p>\n<p><\/p>\n<p><strong>The second \u2014 the site code is adjusted from the admin panel.<\/strong><\/p>\n<p><\/p>\n<p>A new section has been created on the site \u2014 the code has been updated (a directory with the name of the new section has been added).<\/p>\n<p><\/p>\n<p>The properties of the component were changed from the admin panel \u2014 the code has been modified.<\/p>\n<p><\/p>\n<p>Kubernetes does not support this by default; containers must be immutable (Stateless).<\/p>\n<p><\/p>\n<p>The reason: each container (pod) in the cluster processes only part of the traffic. If the code is changed in just one container (pod), different pods will have different code, the site will function inconsistently, and different users will see different versions of the site. This is not sustainable.<\/p>\n<p><\/p>\n<p><strong>Third \u2014 we need to address the deployment issue.<\/strong><\/p>\n<p><\/p>\n<p>If we have a monolith and a single 'classic' server, it's straightforward: we deploy a new codebase, perform a database migration, and switch the traffic to the new version of the code. The switch happens instantaneously.<br \/>\nIf our site is on Kubernetes, split into microservices, and has many containers with code \u2014 then it gets complicated. We need to build containers with the new version of the code, deploy them instead of the old ones, perform the database migration correctly, and ideally do this unnoticed by visitors. Fortunately, Kubernetes helps us with this, supporting a whole array of different types of deployment.<\/p>\n<p><\/p>\n<p><strong>Fourth \u2014 we need to address the static storage issue.<\/strong><\/p>\n<p><\/p>\n<p>If your site weighs 'only' 10 gigabytes and you deploy it entirely in containers, you will end up with containers weighing 10 gigabytes that take an eternity to deploy.<br \/>\nWe need to store the 'heaviest' parts of the site outside of containers, and the question arises of how to do this properly.<\/p>\n<p><\/p>\n<h4 id=\"chego-net-v-nashem-reshenii\">What is not in our solution.<\/h4>\n<p><\/p>\n<p>The entire Bitrix code is not broken down into microservices\/microfunctions (so that registration is separate, the online store module is separate, etc.). We store the entire codebase in each container.<\/p>\n<p><\/p>\n<p>We also do not store the database in Kubernetes (I have implemented solutions with a database in Kubernetes for development environments, but not for production).<\/p>\n<p><\/p>\n<p>Site administrators will still notice that the site operates in Kubernetes. The 'system check' function does not work correctly, and to edit the site's code from the admin panel, you first have to click the 'I want to edit the code' button.<\/p>\n<p><\/p>\n<p>We have resolved the issues, determined the necessity of implementing microservices, and our objective is clear \u2014 to create a functioning system for running Bitrix applications on Kubernetes while preserving both Bitrix capabilities and Kubernetes advantages. We are beginning the implementation.<\/p>\n<p><\/p>\n<h4 id=\"arhitektura\">Architecture<\/h4>\n<p><\/p>\n<p>Many \"worker\" pods with a web server.<br \/>\nOne pod with cron jobs (definitely only one).<br \/>\nOne upgrade pod for editing the site code from the admin panel (again, definitely only one).<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge in Chelyabinsk and Bitrix in Kubernetes\" src=\"\/wp-content\/uploads\/e26a787c11f78811b15a89f597331ef1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>We are addressing the questions:<\/p>\n<p><\/p>\n<ul>\n<li>Where to store sessions?<\/li>\n<li>Where to store 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 work?<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"docker-obraz\">Docker image<\/h4>\n<p><\/p>\n<p>We begin with building the Docker image.<\/p>\n<p><\/p>\n<p>The ideal option is to have one universal image from which we derive both worker pods, pods with cron jobs, and upgrade pods.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/centosadmin\/bitrixenv\">We have created precisely such an image.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>It includes nginx, apache\/php-fpm (you can choose during the build), msmtp for sending mail, and cron.<\/p>\n<p><\/p>\n<p>During the image build, the complete code base of the site is copied into the \/app directory (with the exception of those parts that we will place in 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>We couldn't separate msmtp into a distinct microservice; Bitrix starts to complain that it cannot send mail directly.<\/li>\n<li>Each container has the full code base.<\/li>\n<li>No changes to the code are allowed in the containers.<\/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>no changes to the code are allowed in the containers<\/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 are no restrictions on changing the code in the 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>It's also important: the passwords for accessing everything from the database to email are stored in Kubernetes secrets. We get the bonus that the passwords are visible only to those we grant access to the secrets, not to everyone who has access to the project\u2019s code base.<\/p>\n<p><\/p>\n<h4 id=\"hranilische-dlya-statiki\">Static file storage<\/h4>\n<p><\/p>\n<p>You can use anything: ceph, nfs (but we don't recommend nfs for production), network storage from 'cloud' providers, etc.<\/p>\n<p><\/p>\n<p>The storage will need 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 Kubernetes. The database in Kubernetes is a complex challenge that will make the architecture 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>It handles session storage well, clusters, and is natively supported as session.save_path in PHP. This system has been proven many times in the classic monolithic architecture, when we built clusters with a large number of web servers. For deployment, we use 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 this image specifies configurations for storing sessions in memcached<\/p>\n<p><\/p>\n<p>We used Environment Variables to pass information about the hosts with 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 \/>\nThis allows the same code to be used in dev, stage, test, and prod environments (the host names for memcached will differ in each, so we need to pass unique host names for sessions to each environment).<br \/>\nBitrix cache storage<\/p>\n<p><\/p>\n<p>We need a resilient storage where all pods can write and read from.<\/p>\n<p><\/p>\n<p>We also use memcached.<br \/>\nThis solution is recommended by Bitrix itself.<\/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 this is where Bitrix specifies where our cache is stored<\/p>\n<p><\/p>\n<p>We also use Environment Variables.<\/p>\n<p><\/p>\n<h3 id=\"krontaski\">Cron jobs<\/h3>\n<p><\/p>\n<p>There are different approaches to executing cron jobs in Kubernetes.<\/p>\n<p><\/p>\n<ul>\n<li>a separate deployment with a pod for executing cron jobs<\/li>\n<li>cron job for executing cron jobs (if it's a web app \u2014 with wget <noindex>https:\/\/$host$cronjobname<\/noindex>, or kubectl exec into one of the worker pods, etc.)<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p><\/p>\n<p>There can be debates about the best approach, but in this case, we chose the option of \"separate deployment with pods for cron tasks.\"<\/p>\n<p><\/p>\n<p>How it's done:<\/p>\n<p><\/p>\n<ul>\n<li>we add cron jobs through ConfigMap or via the config\/addcron file<\/li>\n<li>we run a single instance of a container identical to the worker pod + allow cron jobs to run in it<\/li>\n<li>the same codebase is used, enabling simple container builds due to standardization<\/li>\n<\/ul>\n<p><\/p>\n<p>What are the positives:<\/p>\n<p><\/p>\n<ul>\n<li>we have working cron jobs in an environment identical to that of developers (docker)<\/li>\n<li>Cron tasks do not need to be \"rewritten\" for Kubernetes; they function in the same way and within the same codebase as before.<\/li>\n<li>all team members with commit rights to the production branch can add cron jobs, not just admins<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"modul-southbridge-k8sdeploy-i-redaktirovanie-koda-iz-admin-paneli\">The Southbridge K8SDeploy module and code editing from the admin panel<\/h3>\n<p><\/p>\n<p>Did we mention the pod upgrade?<br \/>\nHow do we direct traffic there?<br \/>\nHooray, we wrote a module for this in PHP \ud83d\ude42 This is a small classic module for Bitrix. It is not yet publicly available, but we plan to release it.<br \/>\nThe module is installed like a regular module in Bitrix:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge in Chelyabinsk and Bitrix in Kubernetes\" src=\"\/wp-content\/uploads\/ba9f895ce645862c7ba003d523cd5656.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>And it looks like this:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge in Chelyabinsk and Bitrix in Kubernetes\" src=\"\/wp-content\/uploads\/916ae9243fae9f6405cc68174ec5bb2b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>It allows you to set a cookie that identifies the website administrator and enables Kubernetes to route traffic to the upgrade pod.<\/p>\n<p><\/p>\n<p>Once the changes are complete, you need to hit git push; the code changes will be sent to git, after which the system will build an image with the new version of the code and 'roll it out' across the cluster, replacing the old pods.<\/p>\n<p><\/p>\n<p>Yes, it's somewhat of a workaround, but this way we maintain the microservice architecture without taking away the favorite ability for Bitrix users to edit code from the admin panel. After all, it's an option; the task of editing code can be approached differently.<\/p>\n<p><\/p>\n<h4 id=\"helm-chart\">Helm chart<\/h4>\n<p><\/p>\n<p>For building applications in Kubernetes, we typically use the Helm package manager.<br \/>\nFor our Bitrix solution in Kubernetes, Sergey Bondarev, our lead system administrator, wrote a special Helm chart.<\/p>\n<p><\/p>\n<p>It builds the worker, upgrades the cron pods, configures ingresses, services, and passes variables from Kubernetes secrets to the pods.<\/p>\n<p><\/p>\n<p>We store the code in Gitlab, and we also trigger the Helm build from Gitlab.<\/p>\n<p><\/p>\n<p>In brief, it looks like this<\/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 also allows for a 'seamless' rollback if something goes wrong during deployment. It's nice when you are not panicking, 'fixing the code via FTP because production is down', but Kubernetes does it automatically without any downtime.<\/p>\n<p><\/p>\n<h4 id=\"deploy\">Deploy<\/h4>\n<p><\/p>\n<p>Yes, we are fans of Gitlab &amp; Gitlab CI, we use it \ud83d\ude42<br \/>\nWhen you commit to Gitlab in the project repository, Gitlab triggers a pipeline that deploys the new version of the environment.<\/p>\n<p><\/p>\n<p>Stages:<\/p>\n<p><\/p>\n<ul>\n<li>build (creating a new Docker image)<\/li>\n<li>test (testing)<\/li>\n<li>clean up (removing the test environment)<\/li>\n<li>push (sending it to the Docker registry)<\/li>\n<li>deploy (deploying the application in Kubernetes via Helm).<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge in Chelyabinsk and Bitrix in Kubernetes\" src=\"\/wp-content\/uploads\/74e565a0793b90c3cc19b8c7dedaff34.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hooray, it's ready, let's implement it!<br \/>\nOr we can ask questions if there are any.<\/p>\n<p><\/p>\n<h2 id=\"itak-chto-my-sdelali\">So, what did we do<\/h2>\n<p><\/p>\n<p><strong>From a technical perspective:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>we dockerized Bitrix;<\/li>\n<li>we 'sliced' Bitrix into containers, each performing minimal functions;<\/li>\n<li>we achieved a stateless state for the containers;<\/li>\n<li>we resolved the issue of updating Bitrix in Kubernetes;<\/li>\n<li>all Bitrix functions continued to work (almost all);<\/li>\n<li>we perfected deployment in Kubernetes and rollback between versions.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>From a business perspective:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>fault tolerance;<\/li>\n<li>Kubernetes tools (easy integration with Gitlab CI, seamless deployment, etc);<\/li>\n<li>passwords in secrets (visible only to those who have direct access to the passwords);<\/li>\n<li>It is convenient to create additional environments (for development, testing, etc.) within a unified infrastructure.<\/li>\n<\/ul>\n<p>Source: <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.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u0427\u0435\u043b\u044f\u0431\u0438\u043d\u0441\u043a\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u043c\u0438\u0442\u0430\u043f\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u0432 Sysadminka, \u0438 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0438\u0437 \u043d\u0438\u0445 \u044f \u0434\u0435\u043b\u0430\u043b \u0434\u043e\u043a\u043b\u0430\u0434 \u043e \u043d\u0430\u0448\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 1\u0421-\u0411\u0438\u0442\u0440\u0438\u043a\u0441 \u0432 Kubernetes. \u0411\u0438\u0442\u0440\u0438\u043a\u0441, Kubernetes, \u0421eph \u2014.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\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\/en\/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 Chelyabinsk and Bitrix in Kubernetes | ProHoster","description":"In Chelyabinsk, meetups for system administrators called Sysadminka are taking place, and at the last one, I presented our solution for running applications on 1C-Bitrix in Kubernetes. Bitrix, Kubernetes, Ceph \u2014.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","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\/en\/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\/en\/wp-json\/wp\/v2\/posts\/35581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=35581"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/35581\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=35581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=35581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=35581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}