Southbridge zu Chelyabinsk a Bitrix zu Kubernetes

Sysadminka System Administrator Meetups sinn zu Chelyabinsk statt, an op der leschter hunn ech e Bericht iwwer eis Léisung ginn fir Uwendungen op 1C-Bitrix zu Kubernetes ze lafen.

Bitrix, Kubernetes, Ceph - eng super Mëschung?

Ech soen Iech wéi mir eng Aarbechtsléisung aus all deem zesummesetzen.

Kommt go!

Southbridge zu Chelyabinsk a Bitrix zu Kubernetes

De Meeting war den 18. Abrëll zu Chelyabinsk. Dir kënnt iwwer eis Meetups liesen op Zäitplang a kuckt op yutube.

Wann Dir wëllt mat engem Bericht oder als Nolauschterer bei eis kommen - wëllkomm, schreiwen un [Email geschützt] an op Telegram t.me/vadimisakanov.

Mäi Bericht

Southbridge zu Chelyabinsk a Bitrix zu Kubernetes

Rutschen

Léisung "Bitrix zu Kubernetes, Versioun Southbridge 1.0"

Ech wäert iwwer eis Léisung am Format "fir Dummies a Kubernetes" schwätzen, wéi et um Meetup gemaach gouf. Awer ech huelen un datt Dir d'Wierder Bitrix, Docker, Kubernetes, Ceph op d'mannst um Niveau vun den Artikelen op Wikipedia kennt.

Wat ass prett iwwer Bitrix zu Kubernetes?

Et gëtt ganz wéineg Informatioun um ganzen Internet iwwer d'Operatioun vu Bitrix Uwendungen a Kubernetes.
Ech hunn nëmmen dës Materialien fonnt:

Bericht vum Alexander Serbul, 1C-Bitrix, an Anton Tuzlukov vu Qsoft:

Ech recommandéieren et ze lauschteren.

Entwéckelt Är eege Léisung vum Benotzer serkyron op Habré.
Méi fonnt esou eng Entscheedung.

Aaand ... eigentlech, dat ass alles.

Ech warnen Iech, mir hunn d'Qualitéit vun de Léisungen an de Linken hei uewen net gepréift :)
Iwwregens, wann ech eis Léisung virbereeden, hunn ech mam Alexander Serbul geschwat, dann ass säi Bericht nach net erschéngt, also a menge Rutschen ass en Element "Bitrix benotzt Kubernetes net."

Awer et gi scho vill fäerdeg Docker Biller fir Bitrix am Docker ze lafen: https://hub.docker.com/search?q=bitrix&type=image

Ass dëst genuch fir eng komplett Léisung fir Bitrix zu Kubernetes ze kreéieren?
Nee. Et ginn eng grouss Zuel vu Problemer déi geléist musse ginn.

Wat sinn d'Problemer mat Bitrix zu Kubernetes?

Éischtens, fäerdeg Biller vum Dockerhub sinn net gëeegent fir Kubernetes

Wa mir eng Mikroservicearchitektur wëllen bauen (an a Kubernetes maache mir dat normalerweis), musse mir eis Kubernetes Applikatioun a Container trennen an all Container eng kleng Funktioun ausféieren (a gutt maachen). Firwat nëmmen een? Kuerz gesot, wat méi einfach, wat méi zouverlässeg.
Fir méi spezifesch ze sinn, kuckt dësen Artikel a Video, w.e.g.: https://habr.com/ru/company/southbridge/blog/426637/

Docker-Biller am Dockerhub sinn haaptsächlech op dem All-in-One-Prinzip gebaut, also hu mir nach ëmmer eisen eegene Vëlo missen maachen a souguer Biller vun Null erstellen.

Zweetens - de Site Code gëtt vum Admin Panel geännert

Mir hunn eng nei Rubrik um Site erstallt - de Code gouf aktualiséiert (e Verzeichnis mam Numm vun der neier Rubrik gouf bäigefüügt).

Wann Dir d'Eegeschafte vun engem Komponent vun der Admin Panel geännert hutt, huet de Code geännert.

Kubernetes "par défaut" kann net mat dësem schaffen; Container mussen stateless sinn.

Grond: All Container (Pod) am Cluster veraarbecht nëmmen en Deel vum Traffic. Wann Dir de Code an nëmmen engem Container (Pod) ännert, da wäert de Code a verschiddene Pods anescht sinn, de Site funktionnéiert anescht, a verschidde Versioune vum Site ginn u verschiddene Benotzer gewisen. Dir kënnt net esou liewen.

Drëttens - Dir musst d'Thema mam Détachement léisen

Wa mir e Monolith an e "klassesche" Server hunn, ass alles ganz einfach: mir installéieren eng nei Codebasis, migréieren d'Datebank, wiesselen de Traffic op déi nei Versioun vum Code. Wiessel geschitt direkt.
Wa mir e Site zu Kubernetes hunn, a Mikroservicer geschnidden, et gi vill Container mat Code - oh. Dir musst Container mat enger neier Versioun vum Code sammelen, se ausrollen anstatt déi al, d'Datebank korrekt migréieren, an am Idealfall onnotéiert vu Besucher maachen. Glécklecherweis hëlleft Kubernetes eis mat dësem, ënnerstëtzt eng ganz Rëtsch vun verschiddenen Zorte vun Deployementer.

Véiert - Dir musst d'Thema vun der Statik späicheren léisen

Wann Äre Site "nëmmen" 10 Gigabyte ass an Dir se ganz a Container ofsetzt, wäert Dir mat 10 Gigabyte Container ophalen, déi fir ëmmer daueren fir z'installéieren.
Dir musst déi "schwéiersten" Deeler vum Site ausserhalb vu Container späicheren, an d'Fro stellt sech wéi Dir dëst richteg maacht

Wat feelt un eiser Léisung?

De ganze Bitrix Code ass net a Mikrofunktiounen/Mikroservicer opgedeelt (sou datt d'Registrierung getrennt ass, den Online Store Modul getrennt ass, etc.). Mir späicheren déi ganz Codebasis an all Container.

Mir späicheren d'Datebank och net an Kubernetes (ech hunn nach ëmmer Léisunge mat enger Datebank an Kubernetes fir Entwécklungsëmfeld ëmgesat, awer net fir d'Produktioun).

Et wäert nach ëmmer de Site Administrateuren bemierkbar sinn datt de Site op Kubernetes leeft. D'Funktioun "Systemprüfung" funktionnéiert net korrekt; fir de Sitecode vun der Admin Panel z'änneren, musst Dir als éischt op de Knäppchen "Ech wëll de Code änneren".

D'Problemer goufen identifizéiert, d'Bedierfnes fir Mikroservicer ëmzesetzen gouf festgeluecht, d'Zil ass kloer - e funktionnéierende System ze kréien fir Uwendungen op Bitrix zu Kubernetes ze lafen, souwuel d'Fähigkeiten vu Bitrix wéi och d'Virdeeler vu Kubernetes ze erhaalen. Loosst d'Ëmsetzung ufänken.

Architektur

Et gi vill "schaffen" Pods mat engem Webserver (Aarbechter).
Een ënner mat Cron Aufgaben (nëmmen een ass erfuerderlech).
Een Upgrade fir de Site Code vum Admin Panel z'änneren (och nëmmen een ass erfuerderlech).

Southbridge zu Chelyabinsk a Bitrix zu Kubernetes

Mir léisen Froen:

  • Wou Sessiounen ze späicheren?
  • Wou de Cache ze späicheren?
  • Wou Statik ze späicheren, net Gigabyte Statik an enger Rëtsch Container ze setzen?
  • Wéi wäert d'Datebank funktionnéieren?

Docker Bild

Mir fänken un mat engem Docker Bild ze bauen.

Déi ideal Optioun ass datt mir een universellt Bild hunn, op senger Basis kréien mir Aarbechter Pods, Pods mat Crontasks, an Upgrade Pods.

Mir hunn grad esou en Bild gemaach.

Et enthält nginx, Apache / php-fpm (kann während dem Bau ausgewielt ginn), msmtp fir Mail ze schécken, a Cron.

Wann Dir d'Bild zesummesetzt, gëtt de ganze Codebasis vum Site an de /app Verzeichnis kopéiert (mat Ausnam vun deenen Deeler déi mir op eng separat gemeinsame Späichere réckelen).

Mikroservicer, Servicer

Aarbechter Pods:

  • Container mat nginx + Container Apache/php-fpm + msmtp
  • Et huet net geschafft fir msmtp an e separaten Mikroservice ze plënneren, Bitrix fänkt un indignéiert ze ginn datt et net direkt E-Mail schécken kann
  • All Container huet eng komplett Codebase.
  • Verbuet op Ännerung Code am Container.

cron ënner:

  • Container mat Apache, php, Cron
  • komplett Code Basis abegraff
  • Verbuet fir de Code an de Container z'änneren

Upgrade ënner:

  • nginx Container + Apache/php-fpm Container + msmtp
  • Et gëtt kee Verbuet fir de Code an de Container z'änneren

Sëtzung Stockage

Bitrix Cache Stockage

Eng aner wichteg Saach: mir späichere Passwierder fir mat alles ze verbannen, vun der Datebank bis op d'Mail, a kubernetes Geheimnisser. Mir kréien e Bonus: Passwierder sinn nëmme sichtbar fir déi, déi mir Zougang zu de Geheimnisse ginn, an net fir jiddereen, deen Zougang zu der Codebasis vum Projet huet.

Stockage fir Statik

Dir kënnt alles benotzen: ceph, nfs (awer mir recommandéieren net nfs fir d'Produktioun), Netzwierkspeicher vu Cloud Provider, etc.

D'Späichere muss a Container mat dem /upload/ Verzeechnes vum Site an aner Verzeichnisser mat statesche Inhalt verbonne sinn.

Datebank

Fir Einfachheet empfeelen mir d'Datebank ausserhalb vu Kubernetes ze réckelen. D'Basis zu Kubernetes ass eng separat komplex Aufgab; et wäert d'Schema eng Uerdnung vun der Gréisst méi komplex maachen.

Sëtzung Stockage

Mir benotzen memcached :)

Et geréiert Sessiounsspeicher gutt, ass clusteréiert a gëtt "natively" als session.save_path an php ënnerstëtzt. Esou e System gouf vill Mol an der klassescher monolithescher Architektur getest, wa mir Cluster mat enger grousser Zuel vu Webserver gebaut hunn. Fir Ofbau benotze mir Helm.

$ helm install stable/memcached --name session

php.ini - hei enthält d'Bild Astellunge fir Sessiounen am memcached ze späicheren

Mir hunn Ëmweltvariablen benotzt fir Daten iwwer Hosten mat memcached ze passéieren https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/.
Dëst erlaabt Iech dee selwechte Code an den Dev, Bühn, Test, Prod Ëmfeld ze benotzen (déi memcached Host Nimm an hinnen wäerten ënnerschiddlech sinn, also musse mir en eenzegaartegen Hostnumm fir Sessiounen un all Ëmfeld passéieren).
Bitrix Cache Stockage

Mir brauche Feeler-tolerant Lagerung, op déi all Pods kënne schreiwen a liesen.

Mir benotzen och memcached.
Dës Léisung gëtt vu Bitrix selwer recommandéiert.

$ helm install stable/memcached --name cache

bitrix/.settings_extra.php - hei am Bitrix gëtt uginn wou de Cache gespäichert ass

Mir benotzen och Ëmweltvariablen.

Krontaski

Et gi verschidde Approche fir Crontasks a Kubernetes ze lafen.

  • separat Deployment mat engem Pod fir Crontasks ze lafen
  • cronjob fir Crontasks auszeféieren (wann dëst eng Webapp ass - mat wget https://$host$cronjobname, oder kubectl exec bannent engem vun den Aarbechter Pods, etc.)
  • etc.

Dir kënnt iwwer déi richteg streiden, awer an dësem Fall hu mir d'Optioun gewielt "Separat Deployment mat Pods fir Crontasks"

Wéi et gemaach gëtt:

  • cron Aufgaben iwwer ConfigMap oder iwwer d'Config/addcron Datei addéieren
  • an enger Instanz lancéiere mir e Container identesch mam Worker Pod + erlaben d'Ausféierung vu Krountask dran
  • déi selwecht Code Basis gëtt benotzt, dank Unificatioun, Container Assemblée ass einfach

Wat gutt mir kréien:

  • mir schaffen Crontasks an engem Ëmfeld identesch mam Entwéckler Ëmfeld (Docker)
  • Crontasks brauchen net fir Kubernetes "nei geschriwwe" ze ginn, si schaffen an der selwechter Form an an der selwechter Codebasis wéi virdrun
  • cron Aufgaben kënne vun all Teammembere mat Verpflichtungsrechter fir d'Produktiounszweig bäigefüügt ginn, net nëmmen Admins

Southbridge K8SDeploy Modul a Code Redaktioun vum Admin Panel

Mir schwätzen iwwer Upgrade ënner?
Wéi Dir de Verkéier dohinner leet?
Hurra, mir hunn e Modul dofir an PHP geschriwwen :) Dëst ass e klenge klassesche Modul fir Bitrix. Et ass nach net ëffentlech verfügbar, awer mir plangen et opzemaachen.
De Modul ass wéi e reguläre Modul an Bitrix installéiert:

Southbridge zu Chelyabinsk a Bitrix zu Kubernetes

An et gesäit esou aus:

Southbridge zu Chelyabinsk a Bitrix zu Kubernetes

Et erlaabt Iech e Cookie ze setzen deen de Site Administrateur identifizéiert an erlaabt Kubernetes Traffic op den Upgrade Pod ze schécken.

Wann d'Ännerunge fäerdeg sinn, musst Dir op git Push klickt, d'Codeännerunge ginn op git geschéckt, da baut de System e Bild mat enger neier Versioun vum Code an "rollt" et iwwer de Cluster, ersetzt déi al Pods .

Jo, et ass e bësse vun enger Krut, awer gläichzäiteg behalen mir d'Mikroservicearchitektur an huelen d'Bitrix Benotzer net hir Liiblingsméiglechkeet ewech fir de Code vum Admin Panel ze korrigéieren. Um Enn ass dëst eng Optioun; Dir kënnt de Problem vum Code änneren op eng aner Manéier léisen.

Helm Chart

Fir Uwendungen op Kubernetes ze bauen, benotze mir normalerweis den Helm Package Manager.
Fir eis Bitrix-Léisung zu Kubernetes huet de Sergey Bondarev, eise féierende Systemadministrator, eng speziell Helm-Chart geschriwwen.

Et baut Aarbechter, Ugrade, Cron Pods, konfiguréiert Ingressen, Servicer, a transferéiert Variablen vu Kubernetes Geheimnisser op Pods.

Mir späicheren de Code am Gitlab, a mir lafen och den Helm Build vu Gitlab.

Kuerz gesot, et gesäit esou aus

$ helm upgrade --install project .helm --set image=registrygitlab.local/k8s/bitrix -f .helm/values.yaml --wait --timeout 300 --debug --tiller-namespace=production

Helm erlaabt Iech och eng "nahtlos" Rollback ze maachen, wann op eemol eppes falsch geet während der Deployment. Et ass flott wann Dir net an enger Panik sidd "de Code iwwer ftp fixéieren well de Prod gefall ass", awer Kubernetes mécht et automatesch, an ouni Ënnerbriechung.

Deploy

Jo, mir si Fans vu Gitlab & Gitlab CI, mir benotzen et :)
Wann Dir am Gitlab an de Projet Repository engagéiert, lancéiert Gitlab eng Pipeline déi eng nei Versioun vun der Ëmwelt ofsetzt.

Etappen:

  • bauen (bauen en neit Docker Bild)
  • Test (Test)
  • botzen (d'Testëmfeld ewechhuelen)
  • push (mir schécken et an den Docker Registry)
  • deploy (mir setzen d'Applikatioun op Kubernetes iwwer Helm aus).

Southbridge zu Chelyabinsk a Bitrix zu Kubernetes

Hurra, et ass prett, loosst eis et ëmsetzen!
Gutt, oder froen Froen wann et sinn.

Also wat hu mir gemaach

Aus enger technescher Siicht:

  • dockerized Bitrix;
  • "Schnëtt" Bitrix an Containeren, déi jidderee e Minimum vu Funktiounen ausféiert;
  • erreecht stateless Zoustand vun Container;
  • geléist de Problem mam Update Bitrix zu Kubernetes;
  • all Bitrix Funktiounen weider ze schaffen (bal all);
  • Mir hunn un der Deployment op Kubernetes geschafft an zréck tëscht Versiounen.

Aus enger geschäftlecher Siicht:

  • Feeler Toleranz;
  • Kubernetes Tools (einfach Integratioun mat Gitlab CI, nahtlos Deployment, etc);
  • geheime Passwierder (siichtbar nëmme fir déi, déi direkt Zougang zu de Passwierder kréien);
  • Et ass bequem fir zousätzlech Ëmfeld ze kreéieren (fir Entwécklung, Tester, etc.) bannent enger eenzeger Infrastruktur.

Source: will.com

Setzt e Commentaire