Southbridge ma Chelyabinsk a me Bitrix ma Kubernetes

ʻO Sysadminka nā hui luna hoʻomalu pūnaewele e hana nei ma Chelyabinsk, a ma ka hope loa ua hāʻawi wau i kahi hōʻike e pili ana i kā mākou hopena no ka holo ʻana i nā noi ma 1C-Bitrix ma Kubernetes.

Bitrix, Kubernetes, Ceph - kahi hui nui?

E haʻi wau iā ʻoe pehea mākou e hui pū ai i kahi hopena hana mai kēia mau mea āpau.

E hele kākou!

Southbridge ma Chelyabinsk a me Bitrix ma Kubernetes

Ua mālama ʻia ka hui ma ka lā 18 ʻApelila ma Chelyabinsk. Hiki iā ʻoe ke heluhelu e pili ana i kā mākou hui ʻana ma Timepad a nana aku YouTube.

Inā makemake ʻoe e hele mai iā mākou me ka hōʻike a i ʻole ma ke ʻano he mea hoʻolohe - aloha, e kākau iā [pale ʻia ka leka uila] a ma Telegram t.me/vadimisakanov.

ʻO kaʻu hōʻike

Southbridge ma Chelyabinsk a me Bitrix ma Kubernetes

Pāheʻe

Hoʻonā "Bitrix ma Kubernetes, mana Southbridge 1.0"

E kamaʻilio wau e pili ana i kā mākou hoʻonā ma ke ʻano "no nā dummies i Kubernetes", e like me ka mea i hana ʻia ma ka hui. Akā ke manaʻo nei au ua ʻike ʻoe i nā huaʻōlelo Bitrix, Docker, Kubernetes, Ceph ma ka liʻiliʻi ma ka pae o nā ʻatikala ma Wikipedia.

He aha ka mea i mākaukau e pili ana iā Bitrix ma Kubernetes?

He liʻiliʻi ka ʻike ma ka Pūnaewele holoʻokoʻa e pili ana i ka hana ʻana o nā noi Bitrix ma Kubernetes.
Ua loaʻa wale iaʻu kēia mau mea:

Hōʻike ʻia e Alexander Serbul, 1C-Bitrix, a me Anton Tuzlukov mai Qsoft:

Paipai au i ka hoʻolohe ʻana iā ia.

Ke hoʻomohala nei i kāu hoʻonā ponoʻī mai ka mea hoʻohana serkyron ma Habré.
Loaʻa hou aku he olelo hooholo.

Aaand... ʻoiaʻiʻo, ʻo ia wale nō.

Ke ao aku nei au iā ʻoe, ʻaʻole mākou i nānā i ka maikaʻi o nā hoʻonā i nā loulou ma luna :)
Ma ke ala, i ka wā e hoʻomākaukau ai i kā mākou hoʻonā, ua kamaʻilio wau me Alexander Serbul, a laila ʻaʻole i ʻike ʻia kāna hōʻike, no laila aia i loko o kaʻu mau kiʻi kahi mea "ʻAʻole hoʻohana ʻo Bitrix iā Kubernetes."

Akā ua nui nā kiʻi Docker i mākaukau no ka holo ʻana iā Bitrix ma Docker: https://hub.docker.com/search?q=bitrix&type=image

Ua lawa anei kēia e hana i kahi hopena piha no Bitrix ma Kubernetes?
ʻAʻole. Nui nā pilikia e pono e hoʻoholo.

He aha nā pilikia me Bitrix ma Kubernetes?

ʻO ka mea mua, ʻaʻole kūpono nā kiʻi i hana ʻia mai Dockerhub no Kubernetes

Inā makemake mākou e kūkulu i kahi hoʻolālā microservices (a ma nā Kubernetes mākou e hana maʻamau ai), pono mākou e hoʻokaʻawale i kā mākou noi Kubernetes i loko o nā pahu a hana i kēlā me kēia pahu i hoʻokahi hana liʻiliʻi (a hana maikaʻi). No ke aha hoʻokahi wale nō? I ka pōkole, ʻoi aku ka maʻalahi o ka hilinaʻi.
No ka kikoʻī hou aku, e nānā i kēia ʻatikala a me ke wikiō, e ʻoluʻolu: https://habr.com/ru/company/southbridge/blog/426637/

Kūkulu nui ʻia nā kiʻi Docker ma Dockerhub ma ke kumu hoʻokahi, no laila pono mākou e hana i kā mākou kaʻa ponoʻī a hana i nā kiʻi mai ka wā ʻōpala.

ʻO ka lua - ua hoʻoponopono ʻia ke code pūnaewele mai ka panel admin

Ua hana mākou i kahi ʻāpana hou ma ka pūnaewele - ua hoʻonui ʻia ke code (ua hoʻohui ʻia kahi papa kuhikuhi me ka inoa o ka ʻāpana hou).

Inā hoʻololi ʻoe i nā waiwai o kahi ʻāpana mai ka panel admin, ua hoʻololi ke code.

ʻAʻole hiki i nā Kubernetes "by default" ke hana me kēia; pono ʻole nā ​​pahu pahu.

Ke kumu: ʻO kēlā me kēia pahu (pod) i loko o ka hui pūʻulu kaʻina hana he hapa wale nō o ke kaʻa. Inā hoʻololi ʻoe i ke code i loko o hoʻokahi pahu (pod), a laila ʻokoʻa ke code i nā pods ʻokoʻa, ʻokoʻa ka hana o ka pūnaewele, a hōʻike ʻia nā ʻano like ʻole o ka pūnaewele i nā mea hoʻohana like ʻole. ʻAʻole hiki iā ʻoe ke ola pēlā.

ʻO ke kolu - pono ʻoe e hoʻoponopono i ka pilikia me ka hoʻolaha

Inā loaʻa iā mākou kahi kikowaena monolith a hoʻokahi "maʻamau", maʻalahi nā mea a pau: hoʻonohonoho mākou i kahi waihona code hou, neʻe i ka waihona, hoʻololi i ke kaʻa i ka mana hou o ke code. Hiki ke hoʻololi koke.
Inā loaʻa iā mākou kahi pūnaewele ma Kubernetes, ʻoki ʻia i loko o nā microservices, nui nā pahu me ke code - ʻo. Pono ʻoe e hōʻiliʻili i nā pahu me kahi mana hou o ke code, e ʻōwili iā lākou ma waho o nā mea kahiko, e neʻe pololei i ka waihona, a hana maikaʻi i kēia me ka ʻike ʻole ʻia e nā malihini. ʻO ka mea pōmaikaʻi, kōkua ʻo Kubernetes iā mākou me kēia, e kākoʻo ana i kahi pūʻulu holoʻokoʻa o nā ʻano hoʻolālā like ʻole.

ʻEhā - pono ʻoe e hoʻoponopono i ka pilikia o ka mālama ʻana i nā statics

Inā he 10 gigabytes "wale nō" kāu pūnaewele a kau ʻoe iā ia i loko o nā pahu, e hoʻopau ʻoe me 10 mau pahu gigabyte e lawe mau loa ana e kau.
Pono ʻoe e mālama i nā ʻāpana "kaumaha" o ka pūnaewele ma waho o nā pahu, a kū mai ka nīnau pehea e hana pololei ai.

He aha ka hemahema o kā mākou hoʻonā?

ʻAʻole hoʻokaʻawale ʻia ka code Bitrix holoʻokoʻa i nā microfunctions/microservices (no laila ua kaʻawale ka hoʻopaʻa inoa, ʻokoʻa ka module hale kūʻai pūnaewele, etc.). Mālama mākou i ka waihona code holoʻokoʻa i kēlā me kēia pahu.

ʻAʻole hoʻi mākou e mālama i ka waihona ma Kubernetes (Ua hoʻokō au i nā hoʻonā me kahi waihona ma Kubernetes no nā kaiapuni hoʻomohala, akā ʻaʻole no ka hana).

E ʻike mau ʻia e nā luna hoʻomalu pūnaewele e holo ana ka pūnaewele ma nā Kubernetes. ʻAʻole hana pololei ka hana "system check"; no ka hoʻoponopono ʻana i ka code pūnaewele mai ka admin panel, pono ʻoe e kaomi mua i ka pihi "makemake wau e hoʻoponopono i ke code".

Ua ʻike ʻia nā pilikia, ua hoʻoholo ʻia ka pono e hoʻokō i nā microservices, ua maopopo ka pahuhopu - e kiʻi i kahi ʻōnaehana hana no ka holo ʻana i nā noi ma Bitrix ma Kubernetes, e mālama ana i nā mana o Bitrix a me nā pono o Kubernetes. E hoʻomaka kākou i ka hoʻokō.

kuhikuhipuʻuone

Nui nā pods "hana" me kahi kikowaena pūnaewele (nā limahana).
Hoʻokahi ma lalo me nā hana cron (hoʻokahi wale nō e koi ʻia).
Hoʻokahi hoʻomaikaʻi no ka hoʻoponopono ʻana i ke code pūnaewele mai ka panel admin (pono hoʻokahi wale nō e koi ʻia).

Southbridge ma Chelyabinsk a me Bitrix ma Kubernetes

Hoʻoponopono mākou i nā nīnau:

  • Ma hea e mālama ai i nā kau?
  • Ma hea kahi e mālama ai i ka huna huna?
  • Ma hea e mālama ai i nā statics, ʻaʻole e waiho i nā gigabytes o nā statics i loko o kahi pūʻulu pahu?
  • Pehea e hana ai ka waihona?

Kiʻi Docker

Hoʻomaka mākou ma ke kūkulu ʻana i kahi kiʻi Docker.

ʻO ka koho maikaʻi loa he hoʻokahi kiʻi honua mākou, ma ke kumu e loaʻa iā mākou nā pods limahana, nā pods me Crontasks, a me nā pods hoʻonui.

Hana mākou i ke kiʻi like ʻole.

Loaʻa iā ia ka nginx, apache/php-fpm (hiki ke koho ʻia i ka wā kūkulu), msmtp no ka hoʻouna ʻana i ka leka uila, a me cron.

I ka hui ʻana i ke kiʻi, ua kope ʻia ke kumu helu holoʻokoʻa o ka pūnaewele i ka papa kuhikuhi / app (koe naʻe nā ʻāpana a mākou e neʻe ai i kahi waihona kaʻawale).

Microservices, lawelawe

nā papa hana:

  • ʻO ka pahu me ka nginx + pahu apache/php-fpm + msmtp
  • ʻAʻole hiki ke hoʻoneʻe i ka msmtp i kahi microservice kaʻawale, ke hoʻomaka nei ʻo Bitrix e huhū no ka hiki ʻole ke hoʻouna pololei i ka leka uila.
  • Loaʻa i kēlā me kēia pahu kahi codebase piha.
  • Ka pāpā ʻana i ka hoʻololi ʻana i ke code i loko o nā pahu.

cron ma lalo o:

  • pahu me apache, php, cron
  • hoʻokomo pū ʻia ka waihona code piha
  • pāpā i ka hoʻololi code i loko o nā pahu

hoʻonui ma lalo o:

  • pahu nginx + pahu apache/php-fpm + msmtp
  • ʻAʻohe pāpā i ka hoʻololi ʻana i ke code i loko o nā pahu

mālama kau

Waihona huna huna Bitrix

ʻO kekahi mea nui: mālama mākou i nā ʻōlelo huna no ka hoʻopili ʻana i nā mea āpau, mai ka waihona i ka leka uila, ma nā mea huna kubernetes. Loaʻa iā mākou kahi bonus: ʻike ʻia nā ʻōlelo huna i ka poʻe a mākou e hāʻawi ai i ke komo ʻana i nā mea huna, ʻaʻole i ka poʻe a pau i loaʻa i ke kumu code o ka papahana.

Waihona no nā statics

Hiki iā ʻoe ke hoʻohana i kekahi mea: ceph, nfs (akā ʻaʻole mākou e ʻōlelo i ka nfs no ka hana ʻana), mālama pūnaewele mai nā mea hāʻawi kapuaʻi, etc.

Pono e hoʻopili ʻia ka waihona i loko o nā pahu i ka papa kuhikuhi /upload/ o ka pūnaewele a me nā papa kuhikuhi ʻē aʻe me ka ʻike paʻa.

Database

No ka maʻalahi, manaʻo mākou e neʻe i ka waihona ma waho o Kubernetes. ʻO ke kumu ma Kubernetes he hana paʻakikī ʻokoʻa; e hoʻolilo ʻo ia i ke ʻano o ka nui o ka paʻakikī.

Waihona kau

Hoʻohana mākou i ka memcached :)

Mālama maikaʻi ʻo ia i ka mālama ʻana i ka wā, hui pū ʻia, a kākoʻo ʻia "ma ke ʻano he session.save_path ma php. Ua hoʻāʻo ʻia kēlā ʻano ʻōnaehana i nā manawa he nui i ka papa hana monolithic maʻamau, i ka wā i kūkulu ai mākou i nā pūʻulu me ka nui o nā kikowaena pūnaewele. No ka hoʻolaha ʻana, hoʻohana mākou i ka helm.

$ helm install stable/memcached --name session

php.ini - aia ke kiʻi i nā hoʻonohonoho no ka mālama ʻana i nā kau ma memcached

Ua hoʻohana mākou i nā Environment Variables e hāʻawi i ka ʻikepili e pili ana i nā host me ka memcached https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/.
ʻAe kēia iā ʻoe e hoʻohana i ka code like ma ka dev, stage, test, prod environments (ʻokoʻa nā inoa host memcached i loko o lākou, no laila pono mākou e hāʻawi i kahi inoa host kūikawā no nā kau i kēlā me kēia kaiapuni).
Waihona huna huna Bitrix

Pono mākou e mālama i ka hewa e hiki ai i nā pods ke kākau a heluhelu mai.

Hoʻohana pū mākou i ka memcached.
Manaʻo ʻia kēia hoʻonā e Bitrix ponoʻī.

$ helm install stable/memcached --name cache

bitrix/.settings_extra.php - ma Bitrix ua kuhikuhi ʻia kahi i mālama ʻia ai ka cache

Hoʻohana pū mākou i nā ʻano hoʻololi Environment.

Krontaski

Aia nā ala like ʻole e holo ai i nā Crontasks ma Kubernetes.

  • ka hoʻokaʻawale ʻana me kahi pod no ka holo ʻana i nā Crontasks
  • cronjob no ka hoʻokō ʻana i nā crontasks (inā he polokalamu pūnaewele kēia - me wget https://$host$cronjobname, a i ʻole kubectl exec i loko o kekahi o nā pahu hana, etc.)
  • etc.

Hiki iā ʻoe ke hoʻopaʻapaʻa e pili ana i ka mea kūpono loa, akā i kēia hihia ua koho mākou i ke koho "hoʻokaʻawale hoʻokaʻawale me nā pods no Crontasks"

Pehea i hana ʻia ai:

  • hoʻohui i nā hana cron ma o ConfigMap a ma o ka faila config/addcron
  • i hoʻokahi manawa hoʻomaka mākou i kahi pahu e like me ka pod limahana + e ʻae i ka hoʻokō ʻana i nā hana lei aliʻi i loko.
  • hoʻohana ʻia ke kumu code like, mahalo i ka hui ʻana, maʻalahi ka hui pahu

He aha ka maikaʻi e loaʻa iā mākou:

  • ke hana nei mākou i nā Crontasks i kahi kaiapuni e like me ke kaiapuni o nā mea hoʻomohala (docker)
  • ʻAʻole pono nā Crontasks e "kākau hou ʻia" no nā Kubernetes, hana lākou ma ke ʻano like a ma ka waihona code like e like me ka wā ma mua.
  • Hiki ke hoʻohui ʻia nā hana cron e nā lālā o ka hui āpau me nā kuleana kuleana i ka lālā hana, ʻaʻole nā ​​mea hoʻokele wale nō

Southbridge K8SDeploy module a me ka hoʻoponopono code mai ka admin panel

Ua kamaʻilio mākou e pili ana i ka hoʻonui ʻana ma lalo?
Pehea e kuhikuhi ai i ke kalaiwa ma laila?
Hurray, ua kākau mākou i kahi module no kēia ma PHP :) He module liʻiliʻi liʻiliʻi kēia no Bitrix. ʻAʻole i loaʻa i ka lehulehu, akā hoʻolālā mākou e wehe.
Hoʻokomo ʻia ka module e like me kahi module maʻamau i Bitrix:

Southbridge ma Chelyabinsk a me Bitrix ma Kubernetes

A penei kona ano:

Southbridge ma Chelyabinsk a me Bitrix ma Kubernetes

Hiki iā ʻoe ke hoʻonohonoho i kahi kuki e ʻike ai i ka luna hoʻomalu o ka pūnaewele a hiki iā Kubernetes ke hoʻouna i nā kaʻa i ka pod upgrade.

Ke hoʻopau ʻia nā hoʻololi, pono ʻoe e kaomi i ka git push, e hoʻouna ʻia nā hoʻololi code i git, a laila e kūkulu ka ʻōnaehana i kahi kiʻi me kahi mana hou o ke code a "roll out" ia ma waena o ka pūpū, e hoʻololi i nā pods kahiko. .

ʻAe, he mea koʻikoʻi ia, akā i ka manawa like mākou e mālama ai i ka microservice architecture a ʻaʻole e lawe i nā mea hoʻohana Bitrix i kā lākou manawa punahele e hoʻoponopono i ke code mai ka papa admin. I ka hopena, he koho kēia; hiki iā ʻoe ke hoʻoponopono i ka pilikia o ka hoʻoponopono ʻana i ke code ma kahi ʻano ʻē aʻe.

Papa kuhi helm

No ke kūkulu ʻana i nā noi ma nā Kubernetes, hoʻohana maʻamau mākou i ka luna pūʻolo Helm.
No kā mākou hoʻonā Bitrix ma Kubernetes, ua kākau ʻo Sergey Bondarev, ko mākou luna hoʻonohonoho alakaʻi, i kahi palapala Helm kūikawā.

Hoʻokumu ʻo ia i ka mea hana, ugrade, cron pods, hoʻonohonoho i nā komo, nā lawelawe, a me ka hoʻololi ʻana mai nā mea huna Kubernetes i nā pods.

Mālama mākou i ke code ma Gitlab, a ke holo pū nei mākou i ka hale Helm mai Gitlab.

I ka pōkole, ua like ia me kēia

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

ʻAe ʻo Helm iā ʻoe e hana i kahi rollback "seamless" inā hiki koke mai kekahi mea i ka wā o ka hoʻolālā ʻana. He mea maikaʻi inā ʻaʻole ʻoe i loko o ka panic "hoʻoponopono i ke code ma o ftp no ka mea ua hāʻule ka prod," akā hana ʻo Kubernetes me ka ʻole o ka downtime.

Hoʻopili

ʻAe, he poʻe mākou o Gitlab & Gitlab CI, hoʻohana mākou iā ia :)
Ke hoʻokomo nei ʻo Gitlab i ka waihona o ka papahana, hoʻomaka ʻo Gitlab i kahi pipeline e kau ana i kahi mana hou o ke kaiapuni.

Kūlana:

  • kūkulu (kūkulu i kahi kiʻi Docker hou)
  • ho'āʻo
  • hoʻomaʻemaʻe (wehe i ke kaiapuni hoʻāʻo)
  • pana (hoʻouna mākou iā ia i ka papa inoa Docker)
  • deploy (hoʻoili mākou i ka noi iā Kubernetes ma o Helm).

Southbridge ma Chelyabinsk a me Bitrix ma Kubernetes

Hurray, ua mākaukau, e hoʻokō kāua!
ʻAe, a nīnau paha inā he mau nīnau.

No laila he aha kā mākou i hana ai

Mai ka ʻike loea:

  • ʻo Bitrix i hoʻopaʻa ʻia;
  • "ʻoki" i ka Bitrix i loko o nā pahu, e hana ana kēlā me kēia mea i ka liʻiliʻi o nā hana;
  • loaʻa ka mokuʻāina ʻole o nā ipu;
  • hoʻoponopono i ka pilikia me ka hoʻonui ʻana iā Bitrix ma Kubernetes;
  • ua hoʻomau nā hana Bitrix a pau (kokoke i nā mea āpau);
  • Ua hana mākou i ka hoʻolaha ʻana i nā Kubernetes a me ka rollback ma waena o nā mana.

Mai kahi ʻoihana ʻoihana:

  • hoʻomanawanui hewa;
  • ʻO nā mea hana Kubernetes (hoʻohui maʻalahi me Gitlab CI, hoʻonohonoho pono ʻole, etc.);
  • nā ʻōlelo huna huna (ʻike wale ʻia e ka poʻe i hāʻawi pololei ʻia i ka ʻōlelo huna);
  • He mea maʻalahi ka hana ʻana i nā kaiapuni ʻē aʻe (no ka hoʻomohala ʻana, nā hoʻāʻo, a me nā mea ʻē aʻe) i loko o kahi ʻōnaehana hoʻokahi.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka