{"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\/de\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes","title":{"rendered":"Southbridge in Tscheljabinsk und Bitrix in Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>In Tscheljabinsk finden die Sysadmin-Meetups von Sysadminka statt, und bei der letzten Veranstaltung habe ich \u00fcber unsere L\u00f6sung f\u00fcr die Implementierung von 1C-Bitrix-Anwendungen in Kubernetes gesprochen.<\/p>\n<p><\/p>\n<p>Bitrix, Kubernetes, Ceph \u2013 eine perfekte Kombination?<\/p>\n<p><\/p>\n<p>Ich erkl\u00e4re Ihnen, wie wir aus all dem eine funktionierende L\u00f6sung entwickelt haben.<\/p>\n<p><\/p>\n<p>Los geht's!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge in Tscheljabinsk und 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>Das Meetup fand am 18. April in Tscheljabinsk statt. Informationen \u00fcber unsere Meetups k\u00f6nnen Sie nachlesen unter <noindex><a rel=\"nofollow\" href=\"https:\/\/sysadminka.timepad.ru\">Timepad<\/a><\/noindex> und anschauen auf <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/channel\/UCMblNgU0Gt-TXb9GdVeeinw\/\">YouTube<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Wenn Sie uns einen Vortrag halten oder als Zuh\u00f6rer teilnehmen m\u00f6chten \u2013 herzlich willkommen, schreiben Sie an vadim.isakanov@gmail.com oder \u00fcber Telegram t.me\/vadimisakanov. <\/p>\n<p><\/p>\n<h2 id=\"moy-doklad\">Mein Vortrag<\/h2>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MZqPNMUjr_M\" title=\"Pr\u00e4sentation \u00fcber Bitrix in Kubernetes\"><img decoding=\"async\" alt=\"Southbridge in Tscheljabinsk und 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\">Folien<\/a><\/noindex><\/p>\n<p><\/p>\n<h2 id=\"reshenie-bitriks-v-kubernetes-versiya-southbridge-10\">L\u00f6sung \u201eBitrix in Kubernetes, Version Southbridge 1.0\u201c<\/h2>\n<p><\/p>\n<p>Ich werde Ihnen unsere L\u00f6sung im Format \u201ef\u00fcr Einsteiger in Kubernetes\u201c vorstellen, wie es beim Meetup gezeigt wurde. Ich gehe davon aus, dass Ihnen die Begriffe Bitrix, Docker, Kubernetes und Ceph zumindest auf Wikipedia-Ebene bekannt sind.<\/p>\n<p><\/p>\n<h4 id=\"chto-voobsche-est-gotovogo-pro-bitriks-v-kubernetes\">Was gibt es bereits an Informationen \u00fcber Bitrix in Kubernetes?<\/h4>\n<p><\/p>\n<p>Im Internet gibt es sehr wenig Informationen zur Nutzung von Bitrix-Anwendungen in Kubernetes.<br \/>\nIch habe nur folgende Materialien gefunden:<\/p>\n<p><\/p>\n<p>Der Vortrag von Alexander Serbul, 1C-Bitrix, und Anton Tuzlukov von 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 abspielen\" 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>Ich empfehle, ihn anzuh\u00f6ren.<\/p>\n<p><\/p>\n<p>Entwicklung einer eigenen L\u00f6sung vom Nutzer <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\/\">auf Habr\u00e9<\/a><\/noindex>.<br \/>\nIch habe noch <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ESSch\/kubernetes\">eine solche L\u00f6sung gefunden<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Und\u2026 das ist eigentlich alles.<\/p>\n<p><\/p>\n<p>Ich weise darauf hin, dass wir die Qualit\u00e4t der Arbeiten zu den oben genannten L\u00f6sungen nicht \u00fcberpr\u00fcft haben \ud83d\ude42<br \/>\n\u00dcbrigens, w\u00e4hrend der Vorbereitung unserer L\u00f6sung habe ich mit Alexander Serbul kommuniziert; zu diesem Zeitpunkt gab es seinen Vortrag noch nicht, weshalb in meinen Folien steht: \u201eBitrix verwendet kein Kubernetes\u201c.<\/p>\n<p><\/p>\n<p>Aber es gibt bereits viele fertige Docker-Images f\u00fcr Bitrix, die in Docker funktionieren: <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>Reicht das f\u00fcr die Erstellung einer vollst\u00e4ndigen L\u00f6sung f\u00fcr Bitrix in Kubernetes aus?<br \/>\nNein. Es gibt eine Vielzahl von Problemen, die gel\u00f6st werden m\u00fcssen.<\/p>\n<p><\/p>\n<h4 id=\"v-chem-problemy-s-bitriks-v-kubernetes\">Was sind die Probleme mit Bitrix in Kubernetes?<\/h4>\n<p><\/p>\n<p><strong>Das erste \u2014 die fertigen Images aus Dockerhub sind nicht f\u00fcr Kubernetes geeignet.<\/strong><\/p>\n<p><\/p>\n<p>Wenn wir eine Mikroservice-Architektur aufbauen wollen (was wir in Kubernetes normalerweise wollen), muss die Anwendung in Kubernetes in Container aufgeteilt werden, und es muss sichergestellt werden, dass jeder Container eine kleine Funktion erf\u00fcllt (und das gut macht). Warum nur eine? Kurz gesagt: Je einfacher, desto zuverl\u00e4ssiger.<br \/>\nWenn Sie mehr erfahren m\u00f6chten \u2014 schauen Sie sich bitte diesen Artikel und das Video an: <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 sind haupts\u00e4chlich nach dem Prinzip \u201ealles in einem\u201c erstellt, weshalb wir tats\u00e4chlich unser eigenes Rad erfinden mussten und sogar die Images von Grund auf neu erstellen mussten.<\/p>\n<p><\/p>\n<p><strong>Das zweite \u2014 der Code der Website wird \u00fcber das Admin-Panel bearbeitet.<\/strong><\/p>\n<p><\/p>\n<p>Ein neuer Abschnitt auf der Website wurde erstellt \u2013 der Code wurde aktualisiert (ein Verzeichnis mit dem Namen des neuen Abschnitts wurde hinzugef\u00fcgt).<\/p>\n<p><\/p>\n<p>Die Eigenschaften der Komponente im Administrationsbereich wurden ge\u00e4ndert \u2013 der Code hat sich ge\u00e4ndert.<\/p>\n<p><\/p>\n<p>Kubernetes kann standardm\u00e4\u00dfig nicht damit arbeiten, Container m\u00fcssen unver\u00e4nderlich (Stateless) sein.<\/p>\n<p><\/p>\n<p>Grund: Jeder Container (Pod) im Cluster verarbeitet nur einen Teil des Traffics. Wenn der Code nur in einem Container (Pod) ge\u00e4ndert wird, ist der Code in verschiedenen Pods unterschiedlich, die Website funktioniert unterschiedlich, und verschiedene Benutzer sehen unterschiedliche Versionen der Website. So kann man nicht arbeiten.<\/p>\n<p><\/p>\n<p><strong>Das Dritte \u2013 wir m\u00fcssen das Deployment-Problem l\u00f6sen.<\/strong><\/p>\n<p><\/p>\n<p>Wenn wir ein Monolith sind und einen \u201eklassischen\u201c Server haben, ist alles ganz einfach: Wir setzen die neue Codebasis auf, f\u00fchren die Datenbankmigration durch und schalten den Traffic auf die neue Version des Codes um. Der Umschaltung erfolgt sofort.<br \/>\nWenn wir eine Website in Kubernetes haben, die in Mikrodienste aufgeteilt ist und viele Container mit Code hat \u2013 oh je. Wir m\u00fcssen Container mit der neuen Version des Codes erstellen, sie statt der alten ausrollen, die Datenbankmigration korrekt durchf\u00fchren und idealerweise dies unbemerkt f\u00fcr die Besucher tun. Gl\u00fccklicherweise unterst\u00fctzt uns Kubernetes dabei mit verschiedenen Arten des Deployments.<\/p>\n<p><\/p>\n<p><strong>Der vierte Punkt \u2013 wir m\u00fcssen das Problem mit der Speicherung von statischen Inhalten angehen.<\/strong><\/p>\n<p><\/p>\n<p>Wenn Ihre Website \"nur\" 10 Gigabyte gro\u00df ist und Sie sie vollst\u00e4ndig in Containern bereitstellen, erhalten Sie Container mit einem Gewicht von 10 Gigabyte, die ewig deployt werden.<br \/>\nDie schwersten Teile der Website m\u00fcssen au\u00dferhalb der Container gespeichert werden, und es stellt sich die Frage, wie man das richtig macht.<\/p>\n<p><\/p>\n<h4 id=\"chego-net-v-nashem-reshenii\">Was in unserer L\u00f6sung nicht enthalten ist.<\/h4>\n<p><\/p>\n<p>Der gesamte Bitrix-Code ist nicht in Mikrofunktionen\/Mikroservices aufgeteilt (z. B. Registrierung separat, Online-Shop-Modul separat usw.). Den gesamten Code-Basis speichern wir in jedem Container vollst\u00e4ndig.<\/p>\n<p><\/p>\n<p>Die Datenbank wird ebenfalls nicht in Kubernetes gespeichert (ich habe zwar L\u00f6sungen mit einer Datenbank in Kubernetes f\u00fcr Entwicklerumgebungen umgesetzt, aber nicht f\u00fcr die Produktion).<\/p>\n<p><\/p>\n<p>Administratoren der Website werden dennoch bemerken, dass die Website in Kubernetes l\u00e4uft. Die Funktion \u201eSystempr\u00fcfung\u201c funktioniert nicht korrekt, um den Code der Website aus dem Admin-Panel zu bearbeiten, muss zuerst die Schaltfl\u00e4che \u201eIch m\u00f6chte den Code bearbeiten\u201c gedr\u00fcckt werden.<\/p>\n<p><\/p>\n<p>Wir haben die Probleme gel\u00f6st, die Notwendigkeit von Microservices erkannt, und das Ziel ist klar \u2013 ein funktionierendes System f\u00fcr die Ausf\u00fchrung von Anwendungen auf Bitrix in Kubernetes zu schaffen, dabei sowohl die M\u00f6glichkeiten von Bitrix als auch die Vorteile von Kubernetes zu erhalten. Wir beginnen mit der Umsetzung.<\/p>\n<p><\/p>\n<h4 id=\"arhitektura\">Architektur von<\/h4>\n<p><\/p>\n<p>Eine Vielzahl von \u201eWorkern\u201c mit Webservern.<br \/>\nEin Pod mit Cron-Tasks (unbedingt nur einer).<br \/>\nEin Upgrade-Pod f\u00fcr die Bearbeitung des Website-Codes aus dem Admin-Panel (auch hier unbedingt nur einer).<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge in Tscheljabinsk und Bitrix in Kubernetes\" src=\"\/wp-content\/uploads\/e26a787c11f78811b15a89f597331ef1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir kl\u00e4ren die Fragen:<\/p>\n<p><\/p>\n<ul>\n<li>Wo sollen die Sitzungen gespeichert werden?<\/li>\n<li>Wo soll der Cache gespeichert werden?<\/li>\n<li>Wo soll die statische Datei gespeichert werden, sollen wir wirklich Gigabytes an Statik in zahlreichen Containern ablegen?<\/li>\n<li>Wie wird die Datenbank funktionieren?<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"docker-obraz\">Docker-Image<\/h4>\n<p><\/p>\n<p>Wir beginnen mit dem Aufbau des Docker-Images.<\/p>\n<p><\/p>\n<p>Die ideale L\u00f6sung \u2013 wir haben ein universelles Image, darauf basierend erhalten wir sowohl Worker-Pods, als auch Pods mit Cron-Tasks und Upgrade-Pods.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/centosadmin\/bitrixenv\">Genau so ein Image haben wir erstellt.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Es enth\u00e4lt Nginx, Apache\/PHP-FPM (w\u00e4hlbar beim Aufbau), msmtp zum Versenden von E-Mails und Cron.<\/p>\n<p><\/p>\n<p>Beim Aufbau des Images wird die vollst\u00e4ndige Codebasis der Website in das Verzeichnis \/app kopiert (au\u00dfer den Teilen, die wir in einen separaten Shared Storage auslagern).<\/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 mit Nginx + Container Apache\/PHP-FPM + msmtp<\/li>\n<li>msmtp konnte nicht in einen separaten Microservice ausgelagert werden, Bitrix beschwert sich, dass es keine E-Mails direkt senden kann.<\/li>\n<li>In jedem Container ist der vollst\u00e4ndige Code vorhanden.<\/li>\n<li>\u00c4nderungen am Code in Containern sind nicht erlaubt.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Cron l\u00e4uft unter:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>Container mit Apache, PHP, Cron.<\/li>\n<li>Im Lieferumfang enthalten ist der vollst\u00e4ndige Code.<\/li>\n<li>\u00c4nderungen am Code in Containern sind verboten.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Upgrade erfolgt unter:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>Container mit Nginx + Container Apache\/PHP-FPM + msmtp.<\/li>\n<li>Es gibt keine Einschr\u00e4nkungen f\u00fcr \u00c4nderungen am Code in den Containern.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Sessionspeicher.<\/strong><\/p>\n<p><\/p>\n<p><strong>Cache-Speicher f\u00fcr Bitrix.<\/strong><\/p>\n<p><\/p>\n<p>Au\u00dferdem wichtig: Die Passw\u00f6rter f\u00fcr den Zugriff auf alles, von der Datenbank bis zur E-Mail, speichern wir in Kubernetes-Secrets. Der Vorteil ist, dass Passw\u00f6rter nur von denjenigen eingesehen werden k\u00f6nnen, denen wir Zugang zu den Secrets gew\u00e4hren, nicht von allen, die Zugang zum Code des Projekts haben.<\/p>\n<p><\/p>\n<h4 id=\"hranilische-dlya-statiki\">Speicher f\u00fcr statische Dateien.<\/h4>\n<p><\/p>\n<p>Es kann alles M\u00f6gliche verwendet werden: Ceph, NFS (aber NFS empfehlen wir nicht f\u00fcr die Produktion), Netzwerkspeicher von \"Cloud\"-Anbietern usw.<\/p>\n<p><\/p>\n<p>Der Speicher muss in den Containern mit dem Verzeichnis \/upload\/ der Website und anderen Verzeichnissen f\u00fcr statische Dateien verbunden werden.<\/p>\n<p><\/p>\n<h4 id=\"baza-dannyh\">Datenbank<\/h4>\n<p><\/p>\n<p>Zur Vereinfachung empfehlen wir, die Datenbank au\u00dferhalb von Kubernetes auszulagern. Eine Datenbank in Kubernetes ist eine komplexe Aufgabe, die das Schema erheblich komplizierter macht.<\/p>\n<p><\/p>\n<h4 id=\"hranilische-sessiy\">Sessionspeicher.<\/h4>\n<p><\/p>\n<p>Wir verwenden memcached \ud83d\ude42<\/p>\n<p><\/p>\n<p>Es bew\u00e4ltigt die Speicherung von Sessions gut, kann clusterartig arbeiten und wird \"nativ\" als session.save_path in PHP unterst\u00fctzt. Solch ein System wurde schon vielfach in klassischen monolithischen Architekturen eingesetzt, als wir Cluster mit einer gro\u00dfen Anzahl von Webservern aufgebaut haben. F\u00fcr das Deployment verwenden wir 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 sind die Einstellungen f\u00fcr die Speicherung von Sessions in Memcached im Image festgelegt.<\/p>\n<p><\/p>\n<p>Wir verwendeten Umgebungsvariablen, um Informationen \u00fcber die Hosts mit Memcached zu \u00fcbermitteln. <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 \/>\nDadurch k\u00f6nnen wir denselben Code in den Umgebungen dev, stage, test, prod verwenden (die Namen der Memcached-Hosts werden unterschiedlich sein, daher m\u00fcssen wir f\u00fcr jede Umgebung die eindeutigen Hostnamen f\u00fcr die Sessions \u00fcbergeben).<br \/>\nCache-Speicher Bitrix<\/p>\n<p><\/p>\n<p>Wir ben\u00f6tigen einen fehlertoleranten Speicher, in den alle Pods schreiben und aus dem sie lesen k\u00f6nnen.<\/p>\n<p><\/p>\n<p>Au\u00dferdem verwenden wir Memcached.<br \/>\nDiese L\u00f6sung wird von Bitrix selbst empfohlen.<\/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 wird in Bitrix festgelegt, wo der Cache gespeichert ist.<\/p>\n<p><\/p>\n<p>Wir verwenden ebenfalls Umgebungsvariablen.<\/p>\n<p><\/p>\n<h3 id=\"krontaski\">Cronjobs<\/h3>\n<p><\/p>\n<p>Es gibt verschiedene Ans\u00e4tze zur Ausf\u00fchrung von Cronjobs in Kubernetes.<\/p>\n<p><\/p>\n<ul>\n<li>ein separater Deployment mit Pod f\u00fcr die Ausf\u00fchrung von Cronjobs<\/li>\n<li>Cronjob zur Ausf\u00fchrung von Cronjobs (wenn es sich um eine Web-App handelt \u2013 mit wget <noindex>https:\/\/$host$cronjobname<\/noindex>, oder kubectl exec in einen der Worker-Pods, usw.)<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p><\/p>\n<p>Es l\u00e4sst sich dar\u00fcber streiten, was die beste Vorgehensweise ist, aber in diesem Fall haben wir die Option \u201eseparate Deployments mit Pods f\u00fcr Cronjobs\u201c gew\u00e4hlt.<\/p>\n<p><\/p>\n<p>So wird es gemacht:<\/p>\n<p><\/p>\n<ul>\n<li>Wir f\u00fcgen die Cronjobs \u00fcber ConfigMap oder \u00fcber die Datei config\/addcron hinzu.<\/li>\n<li>Wir starten den Container einmal, der identisch zum Worker-Pod ist + erlauben die Ausf\u00fchrung der Cronjobs darin.<\/li>\n<li>Es wird die gleiche Codebasis verwendet, was die Containererstellung vereinfacht.<\/li>\n<\/ul>\n<p><\/p>\n<p>Was haben wir davon:<\/p>\n<p><\/p>\n<ul>\n<li>Wir haben funktionierende Cronjobs in einer Umgebung, die identisch mit der der Entwickler (Docker) ist.<\/li>\n<li>Cronjobs m\u00fcssen nicht f\u00fcr Kubernetes \u201eneu geschrieben\u201c werden; sie funktionieren weiterhin in derselben Form und mit demselben Code wie zuvor.<\/li>\n<li>Alle Teammitglieder mit Commit-Rechten im Produktionsbranch k\u00f6nnen Cronjobs hinzuf\u00fcgen, nicht nur die Administratoren.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"modul-southbridge-k8sdeploy-i-redaktirovanie-koda-iz-admin-paneli\">Das Southbridge K8SDeploy-Modul und das Bearbeiten von Code aus dem Admin-Panel.<\/h3>\n<p><\/p>\n<p>Wir haben doch \u00fcber das Upgrade der Pods gesprochen?<br \/>\nWie leiten wir den Traffic dorthin?<br \/>\nHurra, wir haben daf\u00fcr ein PHP-Modul geschrieben \ud83d\ude42 Es ist ein kleines klassisches Modul f\u00fcr Bitrix. Es ist noch nicht \u00f6ffentlich verf\u00fcgbar, aber wir planen, es zu ver\u00f6ffentlichen.<br \/>\nDas Modul wird wie ein regul\u00e4res Modul in Bitrix installiert:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge in Tscheljabinsk und Bitrix in Kubernetes\" src=\"\/wp-content\/uploads\/ba9f895ce645862c7ba003d523cd5656.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und sieht so aus:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge in Tscheljabinsk und Bitrix in Kubernetes\" src=\"\/wp-content\/uploads\/916ae9243fae9f6405cc68174ec5bb2b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es erm\u00f6glicht die Festlegung eines Cookies, das den Administrator der Website identifiziert und Kubernetes erm\u00f6glicht, den Traffic auf das Upgrade-Deployment zu leiten.<\/p>\n<p><\/p>\n<p>Sobald die \u00c4nderungen abgeschlossen sind, m\u00fcssen Sie git push dr\u00fccken; der Code wird an git gesendet, dann erstellt das System ein Image mit der neuen Version des Codes und verteilt es im Cluster, wobei die alten Pods ersetzt werden.<\/p>\n<p><\/p>\n<p>Ja, etwas umst\u00e4ndlich, aber dabei bewahren wir die Microservices-Architektur und nehmen den Bitrix-Nutzern nicht die M\u00f6glichkeit, den Code aus dem Admin-Bereich zu bearbeiten. Schlie\u00dflich ist es eine Option; man kann die Code\u00e4nderung auch anders angehen.<\/p>\n<p><\/p>\n<h4 id=\"helm-chart\">Helm Chart<\/h4>\n<p><\/p>\n<p>F\u00fcr den Aufbau von Anwendungen in Kubernetes verwenden wir in der Regel den Paketmanager Helm.<br \/>\nF\u00fcr unsere Bitrix-L\u00f6sung in Kubernetes hat Sergey Bondarev, unser leitender Systemadministrator, ein spezielles Helm Chart geschrieben.<\/p>\n<p><\/p>\n<p>Er f\u00fchrt die Erstellung von Workern, das Upgrade von Cron-Pods durch, konfiguriert Ingress- und Service-Ressourcen und \u00fcbertr\u00e4gt Variablen aus Kubernetes-Secrets in die Pods.<\/p>\n<p><\/p>\n<p>Wir speichern den Code in GitLab und starten auch den Helm-Bau aus GitLab.<\/p>\n<p><\/p>\n<p>Kurz gesagt, das sieht so aus:<\/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 erm\u00f6glicht auch einen nahtlosen Rollback, falls bei der Bereitstellung etwas schiefgeht. Es ist beruhigend zu wissen, dass nicht Sie in Panik den Code per FTP \u201efixen\u201c, weil die Produktion ausgefallen ist, sondern Kubernetes das automatisch und ohne Ausfallzeiten erledigt.<\/p>\n<p><\/p>\n<h4 id=\"deploy\">Deployment<\/h4>\n<p><\/p>\n<p>Ja, wir sind Fans von Gitlab &amp; Gitlab CI, wir nutzen es \ud83d\ude42<br \/>\nBeim Commit in Gitlab wird ein Pipeline im Projekt-Repository gestartet, die die Bereitstellung einer neuen Version der Umgebung durchf\u00fchrt.<\/p>\n<p><\/p>\n<p>Phasen:<\/p>\n<p><\/p>\n<ul>\n<li>build (wir erstellen ein neues Docker-Image)<\/li>\n<li>test (wir f\u00fchren Tests durch)<\/li>\n<li>clean up (wir l\u00f6schen die Testumgebung)<\/li>\n<li>push (wir senden es an das Docker-Registry)<\/li>\n<li>deploy (wir deployen die Anwendung in Kubernetes \u00fcber Helm).<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Southbridge in Tscheljabinsk und Bitrix in Kubernetes\" src=\"\/wp-content\/uploads\/74e565a0793b90c3cc19b8c7dedaff34.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hurra, alles bereit, wir setzen es um!<br \/>\nOder wir stellen Fragen, wenn es welche gibt.<\/p>\n<p><\/p>\n<h2 id=\"itak-chto-my-sdelali\">Also, was haben wir gemacht<\/h2>\n<p><\/p>\n<p><strong>Aus technischer Sicht:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>Wir haben Bitrix dockerisiert;<\/li>\n<li>Wir haben Bitrix in Container unterteilt, von denen jeder minimale Funktionen ausf\u00fchrt;<\/li>\n<li>Wir haben den stateless Zustand der Container erreicht;<\/li>\n<li>Wir haben das Problem mit der Aktualisierung von Bitrix in Kubernetes gel\u00f6st;<\/li>\n<li>Alle Funktionen von Bitrix funktionieren weiterhin (fast alle);<\/li>\n<li>Wir haben das Deployment in Kubernetes und Rollbacks zwischen Versionen erfolgreich umgesetzt.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Aus gesch\u00e4ftlicher Sicht:<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>Fehlertoleranz;<\/li>\n<li>Kubernetes-Tools (einfache Integration mit Gitlab CI, nahtloses Deployment usw.);<\/li>\n<li>Passw\u00f6rter in Geheimnissen (nur f\u00fcr Benutzer sichtbar, denen der Zugriff auf die Passw\u00f6rter direkt gew\u00e4hrt wurde);<\/li>\n<li>Zus\u00e4tzliche Umgebungen (f\u00fcr Entwicklung, Tests usw.) bequem innerhalb einer einheitlichen Infrastruktur erstellen.<\/li>\n<\/ul>\n<p>Quelle: <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\/de\/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=\"de_DE\" \/>\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\/de\/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 Tscheljabinsk und Bitrix in Kubernetes | ProHoster","description":"In Tscheljabinsk finden die Meetups f\u00fcr Systemadministratoren von Sysadminka statt, und auf dem letzten habe ich eine Pr\u00e4sentation \u00fcber unsere L\u00f6sung f\u00fcr die Ausf\u00fchrung von Anwendungen auf 1C-Bitrix in Kubernetes gehalten. Bitrix, Kubernetes, Ceph \u2013 eine gro\u00dfartige Mischung? Ich werde erkl\u00e4ren, wie wir all das zu einer funktionierenden L\u00f6sung zusammengef\u00fcgt haben. Los geht's! Das Meetup fand am 18. April in Tscheljabinsk statt. Informationen zu unseren Meetups finden Sie auf Timepad.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/southbridge-v-chelyabinske-i-bitriks-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/35581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=35581"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/35581\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=35581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=35581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=35581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}