Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

ʻO ka hana mua o ka hoʻouna ʻana iā Kubernetes ke kau ʻana i kāu noi i loko o kahi pahu. Ma kēia pūʻulu, e nānā mākou pehea ʻoe e hana ai i kahi kiʻi pahu liʻiliʻi a paʻa.
Mahalo iā Docker, ʻaʻole i maʻalahi ka hana ʻana i nā kiʻi pahu. E kuhikuhi i kahi kiʻi kumu, hoʻohui i kāu mau hoʻololi, a hana i kahi pahu.

Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

ʻOiai maikaʻi kēia ʻenehana no ka hoʻomaka ʻana, hiki i ka hoʻohana ʻana i nā kiʻi kumu paʻamau ke alakaʻi i ka hana palekana me nā kiʻi nui piha i nā nāwaliwali.

Eia kekahi, ʻo ka hapa nui o nā kiʻi ma Docker e hoʻohana iā Debian a i ʻole ʻo Ubuntu no ke kiʻi kumu, a ʻoiai e hāʻawi ana kēia i ka hoʻohālikelike maikaʻi a me ka maʻalahi maʻalahi (ʻo kahi faila Docker e lawe wale i ʻelua laina o ke code), hiki i nā kiʻi kumu ke hoʻohui i nā haneli megabytes o ka ukana hou i kāu pahu. No ka laʻana, ʻo kahi faila node.js maʻalahi no kahi noi "hello-world" ma kahi o 700 megabytes, ʻoiai kāu noi maoli he mau megabytes wale nō ka nui.

Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

No laila, ʻo kēia mau haʻahaʻa hana ʻē aʻe he mea ʻino ia o ka wahi kikohoʻe a he wahi hūnā maikaʻi no nā nāwaliwali palekana a me nā pōpoki. No laila, e nānā kākou i ʻelua ala e hoʻemi ai i ka nui o ke kiʻi ipu.

ʻO ka mua ka hoʻohana ʻana i nā kiʻi kumu liʻiliʻi, ʻo ka lua ka hoʻohana ʻana i ke ʻano Builder Pattern. ʻO ka hoʻohana ʻana i nā kiʻi kumu liʻiliʻi ke ala maʻalahi loa e hōʻemi i ka nui o kāu ipu. ʻO ka mea maʻamau, ʻo ka ʻōlelo a i ʻole ka waihona āu e hoʻohana nei e hāʻawi i kahi kiʻi noi kumu i ʻoi aku ka liʻiliʻi ma mua o ke kiʻi paʻamau. E nānā i kā mākou pahu node.js.

Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

Ma ka paʻamau ma Docker, ʻo ka node: 8 ka nui o ke kiʻi kumu he 670 MB, a ʻo ka node: 8-alpine kiʻi nui he 65 MB wale nō, ʻo ia hoʻi, 10 mau manawa liʻiliʻi. Ma ka hoʻohana ʻana i ke kiʻi kumu Alpine liʻiliʻi, e hōʻemi nui ʻoe i ka nui o kāu pahu. ʻO Alpine kahi mahele Linux liʻiliʻi a maʻalahi i kaulana loa i waena o nā mea hoʻohana Docker no ka mea kūpono ia me nā noi he nui ʻoiai e mālama ana i nā ipu liʻiliʻi. ʻAʻole like me ke kiʻi "node" Docker maʻamau, "node: alpine" e wehe i ka nui o nā faila lawelawe a me nā papahana, waiho wale i nā mea i lawa e holo i kāu noi.

No ka neʻe ʻana i kahi kiʻi kumu liʻiliʻi, e hoʻohou i ka Dockerfile e hoʻomaka e hana me ke kiʻi kumu hou:

Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

I kēia manawa, ʻaʻole like me ke kiʻi kahiko onbuild, pono ʻoe e kope i kāu code i loko o ka pahu a hoʻokomo i nā mea hilinaʻi. Ma kahi Dockerfile hou, hoʻomaka ka pahu me kahi kiʻi node: alpine, a laila hana i kahi papa kuhikuhi no ke code, hoʻokomo i nā mea hilinaʻi me ka hoʻohana ʻana i ka luna pūʻolo NPM, a hope loa e holo server.js.

Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

Loaʻa kēia hoʻonui i kahi pahu i ʻoi aku ka liʻiliʻi o 10 mau manawa. Inā ʻaʻohe hana hoʻoemi kiʻi kumu o kāu ʻōlelo hoʻolālā, e hoʻohana iā Alpine Linux. E hāʻawi pū ia i ka hiki ke hoʻokele piha i nā mea o ka ipu. ʻO ka hoʻohana ʻana i nā kiʻi kumu liʻiliʻi he ala maikaʻi loa ia e hana wikiwiki i nā ipu liʻiliʻi. Akā ʻoi aku ka nui o ka hōʻemi hiki ke hoʻokō me ka hoʻohana ʻana i ka Builder Pattern.

Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

Ma nā ʻōlelo i unuhi ʻia, hāʻawi mua ʻia ke kumu kumu i ka unuhi ʻōlelo a laila hoʻokō pololei ʻia. Ma nā ʻōlelo i hōʻuluʻulu ʻia, ua hoʻololi mua ʻia ke code kumu i ke code i hui ʻia. Eia naʻe, hoʻohana pinepine ka hui ʻana i nā mea hana pono ʻole e holo i ke code. ʻO ia ke ʻano hiki iā ʻoe ke wehe loa i kēia mau mea hana mai ka pahu hope. Hiki iā ʻoe ke hoʻohana i ka Builder Pattern no kēia.

Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

Hana ʻia ke code i loko o ka pahu mua a hoʻohui ʻia. Hoʻopili ʻia ka code i hōʻuluʻulu ʻia i loko o kahi pahu hope me ka ʻole o nā mea hoʻohui a me nā mea hana e pono ai e hōʻuluʻulu i kēlā code. E holo kāua i kahi noi Go ma o kēia kaʻina hana. ʻO ka mea mua, e neʻe mākou mai ke kiʻi onbuild i Alpine Linux.

Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

Ma ka Dockerfile hou, hoʻomaka ka ipu me kahi kiʻi golang: alpine. A laila hana ia i papa kuhikuhi no ke code, kope ia i loko o ke code kumu, kūkulu i kēlā kumu kumu, a holo i ka noi. ʻOi aku ka liʻiliʻi o kēia pahu ma mua o ka ipu onbuild, akā aia nō i loko o ka compiler a me nā mea hana Go ʻē aʻe a mākou e pono ʻole ai. No laila, e unuhi wale kākou i ka papahana i hoʻohui ʻia a waiho i loko o kāna pahu ponoʻī.

Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

Hiki iā ʻoe ke ʻike i kahi mea ʻē aʻe i kēia faila Docker: aia ʻelua laina FROM. ʻO ka ʻāpana laina 4 mua e like me ka Dockerfile ma mua koe wale nō ka hoʻohana ʻana i ka huaʻōlelo AS e kapa i kēia pae. He laina FROM hou ka ʻāpana aʻe e hoʻomaka ai i kiʻi hou, kahi e hoʻohana ai mākou i ka Raw alpine ma kahi o ke kiʻi golang: alpine.

ʻAʻole i hoʻokomo ʻia nā palapala SSL Raw Alpine Linux, kahi e hoʻopau ʻole ai ka hapa nui o nā kelepona API ma HTTPS, no laila e hoʻokomo i kekahi mau palapala kumu CA.

Ke hele mai nei ka ʻāpana leʻaleʻa: e kope i ke code i hōʻuluʻulu ʻia mai ka pahu mua a i ka lua, hiki iā ʻoe ke hoʻohana i ke kauoha COPY aia ma ka laina 5 o ka ʻāpana ʻelua. E kope wale ia i hoʻokahi faila noi a ʻaʻole e hoʻopilikia i nā mea hana pono Go. E loaʻa i ka faila Docker multi-stage hou kahi kiʻi pahu he 12 megabytes wale nō ka nui, ke hoʻohālikelike ʻia me ke kiʻi pahu mua he 700 megabytes, he ʻokoʻa nui!
No laila, ʻo ka hoʻohana ʻana i nā kiʻi kumu liʻiliʻi a me Builder Pattern he ala maikaʻi loa ia e hana ai i nā ipu liʻiliʻi liʻiliʻi me ka ʻole o ka hana.
Hiki paha ma muli o ka waihona noi, aia kekahi mau ala hou e hōʻemi i ke kiʻi a me ka nui o ka ipu, akā loaʻa anei i nā ipu liʻiliʻi ka pōmaikaʻi hiki ke ana? E nānā kākou i ʻelua mau wahi i ʻoi aku ka maikaʻi o nā ipu liʻiliʻi - ka hana a me ka palekana.

No ka loiloi ʻana i ka piʻi ʻana o ka hana, e noʻonoʻo i ka lōʻihi o ke kaʻina hana o ka hana ʻana i kahi pahu, hoʻokomo iā ia i loko o ke kākau inoa (push), a laila kiʻi mai ia mai laila (huki). Hiki iā ʻoe ke ʻike he ʻoi aku ka maikaʻi o ka ipu liʻiliʻi ma mua o ka ipu nui.

Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

E hūnā ʻo Docker i nā papa no laila e wikiwiki loa nā kūkulu hou ʻana. Eia nō naʻe, nui nā ʻōnaehana CI i hoʻohana ʻia no ke kūkulu ʻana a me ka hoʻāʻo ʻana i nā ipu ʻaʻole e hūnā i nā papa, no laila he nui ka mālama manawa. E like me kāu e ʻike ai, ʻo ka manawa e kūkulu ai i kahi pahu nui, e hilinaʻi ana i ka mana o kāu mīkini, mai 34 a 54 kekona, a i ka wā e hoʻohana ai i kahi pahu i hoʻemi ʻia me ka hoʻohana ʻana i ka Builder Pattern - mai 23 a 28 kekona. No nā hana o kēia ʻano, ʻo ka piʻi ʻana o ka huahana he 40-50%. No laila e noʻonoʻo e pili ana i ka nui o kāu kūkulu ʻana a hoʻāʻo i kāu code.

Ma hope o ke kūkulu ʻia ʻana o ka ipu, pono ʻoe e pana i kāna kiʻi (kiʻi pahu pahu) i loko o ka waihona waihona i hiki iā ʻoe ke hoʻohana iā ia i kāu hui Kubernetes. Manaʻo wau e hoʻohana i ka Google Container Registry.

Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

Me Google Container Registry (GCR), uku wale ʻoe no ka mālama ʻana a me ka pūnaewele, a ʻaʻohe uku hoʻokele waiwai. He pilikino, palekana a wikiwiki loa. Hoʻohana ʻo GCR i nā hoʻopunipuni he nui e wikiwiki i ka hana huki. E like me kāu e ʻike ai, ʻo ka hoʻokomo ʻana i kahi pahu kiʻi Docker Container me ka hoʻohana ʻana i go:onbuild e lawe ʻia mai 15 a 48 kekona, ma muli o ka hana kamepiula, a ʻo ka hana like me kahi pahu liʻiliʻi e lawe ʻia mai 14 a 16 kekona, a no nā mīkini ʻoi aku ka maikaʻi. piʻi ka pōmaikaʻi i ka wikiwiki o ka hana e 3 mau manawa. No nā mīkini ʻoi aʻe, ua like ka manawa, no ka mea, hoʻohana ʻo GCR i kahi huna honua no kahi waihona waihona o nā kiʻi, ʻo ia hoʻi ʻaʻole pono ʻoe e hoʻouka iā lākou. Ma kahi kamepiula haʻahaʻa, ʻo ka CPU ka bottleneck, no laila ʻoi aku ka maikaʻi o ka hoʻohana ʻana i nā ipu liʻiliʻi ma ʻaneʻi.

Inā ʻoe e hoʻohana nei iā GCR, makemake nui wau e hoʻohana i ka Google Container Builder (GCB) ma ke ʻano he ʻāpana o kāu ʻōnaehana kūkulu.

Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

E like me kāu e ʻike ai, hiki i ka hoʻohana ʻana iā ʻoe ke hoʻokō i nā hopena maikaʻi aʻe i ka hōʻemi ʻana i ka lōʻihi o ka hana Build + Push ma mua o kahi mīkini huahua - i kēia hihia, ʻo ke kaʻina hana o ke kūkulu ʻana a me ka hoʻouna ʻana i nā ipu i ka mea hoʻokipa e wikiwiki ʻia e aneane 2 mau manawa. . Hoʻohui, loaʻa iā ʻoe he 120 mau minuke hana manuahi i kēlā me kēia lā, e uhi ana i nā pono o ka hale pahu i ka nui o nā hihia.

A hiki mai ka metric hana nui loa - ka wikiwiki o ka hoʻihoʻi ʻana, a i ʻole ka hoʻoiho ʻana i nā pahu huki. A inā ʻaʻole ʻoe e noʻonoʻo nui i ka manawa i hoʻohana ʻia ma kahi hana paʻi, a laila ʻoi aku ka hopena o ka lōʻihi o ke kaʻina huki i ka hana holoʻokoʻa. E ʻōlelo kākou he pūʻulu o ʻekolu nodes a hāʻule kekahi o lākou. Inā ʻoe e hoʻohana nei i kahi ʻōnaehana hoʻokele e like me Google Kubernetes Engine, e hoʻololi koke ia i ka node make me kahi mea hou. Eia nō naʻe, e nele loa kēia node hou a pono ʻoe e kauo i kāu mau ipu i loko e hoʻomaka ai e hana. Inā lōʻihi ka hana huki, e holo ana kāu puʻupuʻu i ka hana haʻahaʻa i ka manawa holoʻokoʻa.

Nui nā hihia kahi e hiki ai kēia: hoʻohui i kahi node hou i kahi hui, hoʻomaikaʻi i nā nodes, a i ʻole ke hoʻololi ʻana i kahi pahu hou no ka waiho ʻana. No laila, ʻo ka hoʻemi ʻana i ka manawa huki huki e lilo i kumu nui. ʻAʻole hiki ke hōʻole ʻia ʻoi aku ka wikiwiki o ka hoʻoiho ʻana o kahi pahu liʻiliʻi ma mua o ka pahu nui. Inā ʻoe e holo ana i nā pahu he nui i loko o kahi pūʻulu Kubernetes, ʻoi aku ka nui o ka mālama manawa.

Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

E nānā i kēia hoʻohālikelike: ʻo ka hana huki ʻana ma nā pahu liʻiliʻi he 4-9 mau manawa liʻiliʻi, ma muli o ka mana o ka mīkini, ma mua o ka hana like me ka hoʻohana ʻana i ka go:onbuild. ʻO ka hoʻohana ʻana i nā kiʻi waihona liʻiliʻi kaʻana like me ka wikiwiki i ka manawa a me ka wikiwiki e hiki ai ke kau ʻia nā node Kubernetes hou a hele mai ma ka pūnaewele.

E nānā kākou i ka pilikia o ka palekana. ʻOi aku ka palekana o nā ipu liʻiliʻi ma mua o nā ipu nui no ka mea ʻoi aku ka liʻiliʻi o ka hoʻouka kaua. He oiaio anei? ʻO kekahi o nā hiʻohiʻona maikaʻi loa o Google Container Registry ʻo ia ka hiki ke nānā pono i kāu mau ipu no nā nāwaliwali. I kekahi mau mahina i hala aku nei, ua hana au i nā ipu onbuild a me multistage, no laila e ʻike kākou inā he mau nāwaliwali ma laila.

Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

He mea kupaianaha ka hopena: ʻo 3 wale nō nā mea palupalu i ʻike ʻia i loko o kahi pahu liʻiliʻi, a ʻo 16 koʻikoʻi a me 376 mau mea nāwaliwali i loaʻa i loko o kahi pahu nui. Inā mākou e nānā i nā mea i loko o kahi pahu nui, hiki iā mākou ke ʻike i ka hapa nui o nā pilikia palekana ʻaʻohe mea pili i kā mākou noi, akā pili i nā polokalamu a mākou e hoʻohana ʻole ai. No laila, ke kamaʻilio ka poʻe e pili ana i kahi hoʻouka kaua nui, ʻo ia kā lākou manaʻo.

Nā hana maikaʻi loa o Kubernetes. Ke hana ʻana i nā pahu liʻiliʻi

Akaka ka lawe ʻana: kūkulu i nā ipu liʻiliʻi no ka mea hāʻawi lākou i ka hana maoli a me nā pono palekana i kāu ʻōnaehana.

Nā hana maikaʻi loa o Kubernetes. Hoʻonohonoho i nā Kubernetes me ka inoa inoa

Kekahi mau hoʻolaha 🙂

Mahalo no kou noho pū ʻana me mākou. Makemake ʻoe i kā mākou ʻatikala? Makemake ʻoe e ʻike i nā mea hoihoi hou aʻe? E kākoʻo iā mākou ma ke kau ʻana i kahi kauoha a i ʻole ka ʻōlelo ʻana i nā hoaaloha, cloud VPS no nā mea hoʻomohala mai $4.99, he analogue kū hoʻokahi o nā kikowaena hoʻokomo-level, i hana ʻia e mākou no ʻoe: ʻO ka ʻoiaʻiʻo holoʻokoʻa e pili ana iā VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps mai $ 19 a pehea e kaʻana like ai i kahi kikowaena? (loaʻa me RAID1 a me RAID10, a hiki i 24 cores a hiki i 40GB DDR4).

ʻO Dell R730xd 2 mau manawa maʻalahi ma Equinix Tier IV kikowaena data ma Amsterdam? Eia wale nō 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV mai $199 ma Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - mai $99! Heluhelu e pili ana Pehea e kūkulu ai i ka ʻoihana ʻoihana. papa me ka hoʻohana 'ana o Dell R730xd E5-2650 v4 kikowaena waiwai 9000 euros no ka peni?

Source: www.habr.com

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