Nā faila kūloko i ka neʻe ʻana i kahi noi i Kubernetes
I ke kūkulu ʻana i kahi kaʻina hana CI/CD me ka hoʻohana ʻana i nā Kubernetes, i kekahi manawa e kū mai ka pilikia o ka like ʻole ma waena o nā koi o ka ʻōnaehana hou a me ka noi e hoʻoili ʻia iā ia. ʻO ka mea nui, ma ke kahua kūkulu noi he mea nui e loaʻa hoʻokahi kiʻi e hoʻohana ʻia ma o nā mea a pau nā kaiapuni papahana a me nā pūʻulu. Hoʻokumu kēia kumumanaʻo i ka pololei e like me Google mālama ipu (ʻoi aku ma mua o hoʻokahi e pili ana i kēia ʻlelo a me kā mākou ʻoihana ʻenehana).
Eia naʻe, ʻaʻole ʻoe e ʻike i kekahi i nā kūlana kahi e hoʻohana ai ke code o ka pūnaewele i kahi hoʻolālā i mākaukau ʻia, ʻo ka hoʻohana ʻana i ka mea e kau ai i nā palena i kona hoʻohana hou ʻana. A ʻoiai i loko o kahi "kaiapuni maʻamau" maʻalahi kēia e hana ai, ma Kubernetes hiki ke lilo kēia ʻano i pilikia, ʻoi aku hoʻi inā ʻoe e hālāwai me ia no ka manawa mua. ʻOiai hiki i ka noʻonoʻo noʻonoʻo ke loaʻa i nā hoʻonā ʻenehana i ʻike ʻia a maikaʻi paha i ka nānā mua ʻana ... he mea nui e hoʻomanaʻo i ka hapa nui o nā kūlana hiki a pono. e hoʻoponopono ʻia ma ke ʻano o ka hale.
E nānā kākou i nā ʻoluʻolu workaround kaulana no ka mālama ʻana i nā faila i hiki ke alakaʻi i nā hopena maikaʻi ʻole i ka wā e hana ai i kahi puʻupuʻu, a kuhikuhi pū i kahi ala pololei.
Waihona kūmau
No ka hōʻike ʻana, e noʻonoʻo i kahi palapala noi pūnaewele e hoʻohana ana i kekahi ʻano mea hoʻoheheʻe static e kiʻi i kahi kiʻi, nā ʻano, a me nā mea ʻē aʻe. No ka laʻana, loaʻa i ka Yii PHP framework kahi mana waiwai i kūkulu ʻia e hana i nā inoa papa kuhikuhi kū hoʻokahi. No laila, ʻo ka hoʻopuka he mau ala no ka pūnaewele paʻa ʻaʻole i hui pū kekahi me kekahi (ua hana ʻia kēia no nā kumu he nui - no ka laʻana, e hoʻopau i nā kope ke hoʻohana ʻia nā mea he nui i ka waiwai like). No laila, ma waho o ka pahu, ʻo ka manawa mua ʻoe e komo ai i kahi module punawelewele, nā faila static (ʻoiaʻiʻo, ʻo nā symlinks pinepine, akā ʻoi aku ka nui ma hope) ua hoʻokumu ʻia a waiho ʻia me kahi papa kuhikuhi kumu maʻamau no kēia kau ʻana:
webroot/assets/2072c2df/css/…
webroot/assets/2072c2df/images/…
webroot/assets/2072c2df/js/…
He aha ke ʻano o kēia ma ke ʻano o ka pūʻulu?
ʻO ka laʻana maʻalahi
E lawe kākou i kahi hihia maʻamau, ke hoʻomaka mua ʻia ʻo PHP e nginx e puʻunaue i ka ʻikepili static a hana i nā noi maʻalahi. ʻO ke ala maʻalahi loa - kuhikuhi i ka hana me ʻelua pahu:
Ke komo mua ʻoe i ka pūnaewele, ʻike ʻia nā waiwai i ka pahu PHP. Akā i ka hihia o ʻelua pahu i loko o hoʻokahi pod, ʻaʻole ʻike ʻo nginx i kēia mau faila static, e hāʻawi ʻia iā lākou (e like me ka hoʻonohonoho). ʻO ka hopena, e ʻike ka mea kūʻai aku i kahi hewa 404 no nā noi āpau i nā faila CSS a me JS. ʻO ka hopena maʻalahi ma aneʻi ʻo ka hoʻonohonoho ʻana i kahi papa kuhikuhi maʻamau no nā ipu. Koho mua - maʻamau emptyDir:
I kēia manawa, lawelawe ʻia nā faila static i hana ʻia e ka nginx. Akā e hoʻomanaʻo wau iā ʻoe he hopena primitive kēia, ʻo ia ka mea mamao loa mai ka maikaʻi a loaʻa iā ia nā nuances a me nā hemahema, i kūkākūkā ʻia ma lalo nei.
ʻOi aku ka nui o ka mālama ʻana
E noʻonoʻo ʻoe i kahi kūlana kahi i kipa aku ai kahi mea hoʻohana i ka pūnaewele, hoʻouka i kahi ʻaoʻao me nā ʻano i loaʻa i loko o ka ipu, a ʻoiai ʻo ia e heluhelu ana i kēia ʻaoʻao, ua hoʻomoe hou mākou i ka ipu. Ua nele ka waihona waiwai a koi ʻia kahi noi iā PHP e hoʻomaka e hana i nā mea hou. Eia naʻe, ʻoiai ma hope o kēia, ʻaʻole pili nā loulou i nā statics kahiko, e alakaʻi i nā hewa i ka hōʻike ʻana i nā statics.
Eia hou, loaʻa iā mākou kahi papahana i hoʻouka ʻia, ʻo ia hoʻi ʻaʻole lawa hoʻokahi kope o ka noi:
E hoʻonui kākou kuhikuhi i ka hana a hiki i ʻelua kope.
I ka wā i komo mua ʻia ai ka pūnaewele, ua hana ʻia nā waiwai i hoʻokahi kope.
I kekahi manawa, ua hoʻoholo ʻo ingress (no ka hoʻohālikelike ʻana i ka ukana) e hoʻouna i kahi noi i ka kope lua, a ʻaʻole i loaʻa kēia mau waiwai. A i ʻole ʻaʻole lākou ma laila no ka mea hoʻohana mākou RollingUpdate a i kēia manawa ke hana nei mākou i ka hoʻolaha.
Ma keʻano laulā, he hewa hou ka hopena.
I mea e pale ai i ka lilo ʻana o nā waiwai kahiko, hiki iā ʻoe ke hoʻololi emptyDir maluna o hostPath, hoʻohui ʻana i ke kino i kahi puʻupuʻu puʻupuʻu. He hewa kēia ala no ka mea pono mākou hoʻopaʻa i kahi puʻupuʻu puʻupuʻu kikoʻī kāu noi, no ka mea - inā e neʻe i nā nodes ʻē aʻe - ʻaʻole e loaʻa i ka papa kuhikuhi nā faila pono. A i ʻole e koi ʻia kekahi ʻano o ka hoʻonohonoho papa kuhikuhi ma waena o nā nodes.
He aha nā hoʻonā?
Inā ʻae ka lako a me nā kumuwaiwai, hiki iā ʻoe ke hoʻohana nā mea hoʻopaʻapaʻa e hoʻonohonoho i kahi papa kuhikuhi i hiki ke loaʻa like no nā pono static. Palapala kūhelu paipai ʻo SSD, ʻoi aku ka liʻiliʻi o ʻekolu mau paʻi hou ʻana a me kahi pilina paʻa "mānoanoa" ma waena o nā nodes cluster.
ʻO kahi koho liʻiliʻi e hoʻonohonoho i kahi kikowaena NFS. Eia naʻe, pono ʻoe e noʻonoʻo i ka hiki ke hoʻonui i ka manawa pane no ka hoʻoponopono ʻana i nā noi e ka pūnaewele pūnaewele, a ʻo ka hoʻomanawanui hewa e waiho nui i ka makemake. He pōʻino nā hopena o ka hāʻule ʻole: ʻo ka nalo ʻana o ka mauna e hoʻopau i ka hui i ka make ma lalo o ke kaomi o ka ukana LA e holo wikiwiki ana i ka lewa.
Ma waena o nā mea ʻē aʻe, pono nā koho āpau no ka hoʻokumu ʻana i kahi mālama hoʻomau hoʻomaʻemaʻe hope nā pūʻulu o nā faila i hōʻiliʻili ʻia i kekahi manawa. Ma mua o nā ipu me PHP hiki iā ʻoe ke kau DaemonSet mai ka caching nginx, ka mea e mālama i nā kope o nā waiwai no ka manawa palena. Hiki ke hoʻonohonoho maʻalahi kēia ʻano me ka hoʻohana ʻana proxy_cache me ka hohonu o ka mālama ʻana i nā lā a i ʻole gigabytes o kahi diski.
ʻO ka hoʻohui ʻana i kēia ʻano me nā ʻōnaehana faila i ʻōlelo ʻia ma luna nei e hāʻawi i kahi kahua nui no ka noʻonoʻo ʻana, i kaupalena ʻia e ka waihona kālā a me ka ʻenehana o ka poʻe e hoʻokō a kākoʻo. Mai ka ʻike, hiki iā mākou ke ʻōlelo i ka maʻalahi o ka ʻōnaehana, ʻoi aku ka paʻa o ka hana. Ke hoʻohui ʻia ia mau papa, ʻoi aku ka paʻakikī o ka mālama ʻana i ka ʻōnaehana, a ma ka manawa like e hoʻonui ʻia ka manawa i ka ʻike ʻana a me ka hoʻihoʻi ʻana mai nā hemahema.
Manaʻo
Inā ʻaʻole pono ʻoe i ka hoʻokō ʻana i nā koho mālama i manaʻo ʻia (paʻakikī, kumukūʻai ...), a laila pono ke nānā i ke kūlana mai kēlā ʻaoʻao. ʻO ia hoʻi, e ʻeli i ka hoʻolālā papahana a hoʻoponopono i ka pilikia ma ke code, i hoʻopaʻa ʻia i kekahi ʻano ʻikepili paʻa i ke kiʻi, kahi wehewehe maopopo ʻole o ka ʻike a i ʻole ke kaʻina hana no ka "hoʻomaʻamaʻa" a / a i ʻole ka hoʻopili mua ʻana i nā waiwai ma ke kahua o ka hui kiʻi. Ma kēia ala e loaʻa ai iā mākou ke ʻano hiki ke wānana a me ka hoʻonohonoho like o nā faila no nā kaiapuni āpau a me nā kope o ka noi holo.
Inā hoʻi mākou i ka hiʻohiʻona kikoʻī me ka Yii framework a ʻaʻole e komo i loko o kona ʻano (ʻaʻole ia ke kumu o ka ʻatikala), lawa ia e kuhikuhi i ʻelua mau ala kaulana:
E hoʻololi i ke kaʻina hana kūkulu kiʻi e hoʻokomo i nā waiwai ma kahi hiki ke wānana. Manaʻo ʻia kēia / hoʻokō ʻia i nā hoʻonui like yii2-static-waiwai.
E wehewehe i nā hashes kikoʻī no nā papa kuhikuhi waiwai, e like me ka mea i kūkākūkā ʻia ma ka laʻana. keia hoikeike (e hoʻomaka ana mai ka paheʻe Helu 35). Ma ke ala, ʻo ka mea kākau o ka hōʻike hope loa (a ʻaʻole me ke kumu ʻole!) Ke aʻo nei ma hope o ka hui ʻana i nā waiwai ma ke kikowaena kūkulu, e hoʻouka iā lākou i kahi waihona kikowaena (e like me S3), i mua o kahi kahi CDN.
Hiki ke hoʻoiho ʻia nā faila
ʻO kekahi hihia ʻē aʻe e hiki mai ana i ka wā e neʻe ana i kahi noi i kahi pūʻulu Kubernetes e mālama ana i nā faila mea hoʻohana ma ka ʻōnaehana faila. No ka laʻana, loaʻa hou iā mākou kahi palapala PHP e ʻae i nā faila ma o kahi palapala hoʻouka, hana i kekahi mea me lākou i ka wā e hana ai, a hoʻihoʻi iā lākou.
Ma Kubernetes, ʻo ka wahi e waiho ʻia ai kēia mau faila he mea maʻamau i nā kope a pau o ka noi. Ma muli o ka paʻakikī o ka noi a me ka pono e hoʻonohonoho i ka hoʻomau ʻana o kēia mau faila, ʻo nā koho i ʻōlelo ʻia ma luna nei he wahi ia, akā, e like me kā mākou e ʻike ai, loaʻa iā lākou nā drawbacks.
Manaʻo
ʻO kahi hoʻonā me ka hoʻohana ʻana i kahi waihona S3-kūpono (ʻoiai inā he ʻano ʻano ʻano hoʻokipa ponoʻī e like me ka minio). Pono e hoʻololi i ka S3 ma ka pae code, a pehea e hāʻawi ʻia ai ka ʻike ma ka ʻaoʻao mua, ua loaʻa iā mākou palapalaʻo ia.
Nā kau mea hoʻohana
Ma kahi kaʻawale, pono e hoʻomaopopo i ka hoʻonohonoho ʻana o ka mālama ʻana i nā kau mea hoʻohana. ʻO ka manawa pinepine, he mau faila kēia ma ka disk, i loko o ka pōʻaiapili o Kubernetes e alakaʻi i nā noi ʻae mau mai ka mea hoʻohana inā pau kāna noi i kahi pahu ʻē aʻe.
Hoʻopau ʻia ka pilikia ma ka hoʻā ʻana stickySessions ma ke komo ana (kākoʻo ʻia ka hiʻohiʻona i nā mea hoʻokele komo kaulana - no nā kikoʻī hou aku, ʻike kā mākou loiloi)e hoʻopaʻa i ka mea hoʻohana i kahi pod kikoʻī me ka noi:
Akā ʻaʻole kēia e hoʻopau i nā pilikia me ka hoʻokau pinepine ʻana.
Manaʻo
ʻO ke ala pololei ʻoi aku ka hoʻoili ʻana i ka palapala noi i ka mālama ʻana i nā manawa ma memcached, Redis a me nā hoʻonā like - ma ka laulā, haʻalele loa i nā koho faila.
hopena
ʻO nā haʻina hana i kūkākūkā ʻia i loko o ka kikokikona e pono ke hoʻohana wale ʻia ma ke ʻano o nā "crutches" pōkole (ʻoi aku ka nani ma ka ʻōlelo Pelekania ma ke ʻano he workaround). Pili paha lākou i nā pae mua o ka neʻe ʻana i kahi palapala noi i Kubernetes, akā ʻaʻole pono ke aʻa.
ʻO ke ala maʻamau i ʻōlelo ʻia ʻo ka hoʻopau ʻana iā lākou no ka hoʻololi ʻana i ke kūkulu hale o ka noi e like me ka mea i ʻike mua ʻia e nā mea he nui. 12-Factor App. Eia nō naʻe, ʻo kēia - ka lawe ʻana i ka palapala noi i kahi ʻano stateless - ʻo ia ka mea e koi ʻia nā loli i ke code, a eia ka mea nui e ʻike i kahi kaulike ma waena o nā hiki / koi o ka ʻoihana a me nā manaʻo no ka hoʻokō a mālama ʻana i ke ala i koho ʻia. .