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!
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.
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:
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."
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).
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.
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:
A penei kona ano:
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.
ʻ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).
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.