Postgres Tuesday No. 5: “PostgreSQL a me Kubernetes. CI/CD. E ho'āʻo i ka automation"

Postgres Tuesday No. 5: “PostgreSQL a me Kubernetes. CI/CD. E ho'āʻo i ka automation"

I ka hopena o ka makahiki i hala, ua hoʻolaha ʻia kahi hoʻolaha ola hou o ke kaiāulu Lūkini PostgreSQL #RuPostgres, i ka manawa i kamaʻilio ai kāna mea hoʻokumu ʻo Nikolai Samokhvalov me ka luna ʻenehana Flant ʻo Dmitry Stolyarov e pili ana i kēia DBMS ma ka pōʻaiapili o Kubernetes.

Ke paʻi nei mākou i kahi transcript o ka hapa nui o kēia kūkākūkā, a ma Kaila YouTube kaiaulu Hoʻopuka ʻia ka wikiō piha:

ʻIkepili a me nā Kubernetes

NS: ʻAʻole mākou e kamaʻilio e pili ana i ka VACUUM a me CHECKPOINTs i kēia lā. Makemake mākou e kamaʻilio e pili ana i nā Kubernetes. ʻIke wau he nui nā makahiki o kou ʻike. Ua nānā au i kāu mau wikiō a nānā hou i kekahi o lākou... E hele pololei kākou i ka helu: no ke aha ʻo Postgres a i ʻole MySQL ma K8s?

DC: ʻAʻohe a hiki ʻole ke pane maopopo i kēia nīnau. Akā ma ka laulā, ʻo kēia ka maʻalahi a me ka maʻalahi ... hiki. Makemake nā kānaka a pau i nā lawelawe mālama ʻia.

NS: Pehea RDS, ma ka hale wale no?

DC: ʻAe: e like me RDS, ma nā wahi āpau.

NS: "Ma nā wahi āpau" he wahi maikaʻi. Ma nā hui nui, aia nā mea a pau ma nā wahi likeʻole. No ke aha, inā he hui nui, ʻaʻole e lawe i kahi hoʻonā mākaukau? No ka laʻana, loaʻa iā Nutanix kāna mau hoʻomohala ponoʻī, ʻo nā hui ʻē aʻe (VMware ...) loaʻa ka "RDS, ma ka home wale nō."

DC: Akā ke kamaʻilio nei mākou e pili ana i kahi hoʻokō kaʻawale e hana wale ana ma lalo o kekahi mau kūlana. A inā mākou e kamaʻilio e pili ana i nā Kubernetes, a laila aia kahi ʻano nui o nā ʻōnaehana (hiki iā ia ma K8s). ʻO ka mea nui he maʻamau kēia no nā API i ke ao ...

NS: He manuahi nō hoʻi!

DC: ʻAʻole ia he mea nui loa. He mea nui ka kūʻokoʻa no ka hapa nui loa o ka mākeke. He mea nui kekahi mea ʻē aʻe... Hoʻomanaʻo paha ʻoe i ka hōʻike "ʻIkepili a me nā Kubernetes? Ala akula ka p?

NS: ʻAe.

DC: Ua maopopo iaʻu ua loaʻa mai i kahi kānalua loa. Ua manaʻo kekahi poʻe ke ʻōlelo nei au: "E nā kāne, e kiʻi kāua i nā ʻikepili āpau i Kubernetes!", a ʻo kekahi poʻe i hoʻoholo he mau paikikala weliweli kēia. Akā makemake wau e ʻōlelo i kahi mea ʻē aʻe: "E nānā i ka mea e hana nei, he aha nā pilikia a pehea e hoʻoponopono ai. Pono mākou e hoʻohana i nā ʻikepili Kubernetes i kēia manawa? Hana ʻia? ʻAe, inā makemake ʻoe ... e hana i kekahi mau mea. Akā no kahi dev, hiki iaʻu ke ʻōlelo e paipai wau. No kahi dev, he mea nui ka ikaika o ka hana ʻana a me ka holoi ʻana i nā kaiapuni.

NS: E ka dev, ke manaʻo nei ʻoe i nā kaiapuni a pau ʻaʻole prod? Kūlana, QA…

DC: Inā mākou e kamaʻilio e pili ana i ka perf stands, a laila ʻaʻole paha, no ka mea he kikoʻī nā koi. Inā mākou e kamaʻilio e pili ana i nā hihia kūikawā kahi e pono ai kahi waihona nui loa no ka staging, a laila ʻaʻole paha ... Inā he static kēia, lōʻihi ka noho ʻana, a laila he aha ka pōmaikaʻi o ka loaʻa ʻana o ka waihona ma K8s?

NS: ʻAʻole. Akā ma hea mākou e ʻike ai i nā kaiapuni static? E lilo ana kahi kaiapuni paʻa i ka lā ʻapōpō.

DC: Hiki ke hoʻopaʻa ʻia ke kūlana. Loaʻa iā mākou nā mea kūʻai aku ...

NS: ʻAe, loaʻa iaʻu kekahi. He pilikia nui inā loaʻa iā ʻoe kahi waihona 10 TB a me 200 GB staging ...

DC: He hihia maikaʻi loa kaʻu! Aia ma ka hoʻonohonoho ʻana i kahi waihona huahana kahi e hoʻololi ʻia ai. A aia kahi pihi: "roll out to production". Hoʻohui ʻia kēia mau hoʻololi - deltas (me he mea lā ua hoʻonohonoho ʻia lākou ma o ka API) i ka hana. He koho exotic loa keia.

NS: Ua ʻike au i nā mea hoʻomaka ma ke awāwa e noho ana ma RDS a i ʻole ma Heroku - he mau moʻolelo kēia mai 2-3 mau makahiki i hala aku nei - a hoʻoiho lākou i ka dump i kā lākou kamepiula. No ka mea, he 80 GB wale nō ka waihona, a he wahi ma ka pona. A laila kūʻai lākou i nā disks hou no kēlā me kēia mea i loaʻa iā lākou nā waihona 3 e hoʻokō i nā hanana like ʻole. Pela no hoi. Ua ʻike nō hoʻi au ʻaʻole makaʻu lākou e kope i ka prod i ka staging - hilinaʻi nui ia i ka ʻoihana. Aka, ua ike no hoi au ua makau loa lakou, a ua lawa ole ko lakou manawa a me na lima. Akā ma mua o ko mākou neʻe ʻana i kēia kumuhana, makemake wau e lohe e pili ana iā Kubernetes. Ua maopopo iaʻu ʻaʻohe mea i prod?

DC: Loaʻa iā mākou nā waihona liʻiliʻi ma prod. Ke kamaʻilio nei mākou e pili ana i ka nui o nā ʻumi gigabytes a me nā lawelawe koʻikoʻi ʻole a mākou i palaualelo ai e hana i nā kope (a ʻaʻohe pono). A inā he mālama maʻamau ma lalo o Kubernetes. Ua hana kēia waihona i loko o kahi mīkini virtual - kūlana ma VMware, ma luna o ka ʻōnaehana mālama. Hoʻokomo mākou i loko PV a i kēia manawa hiki iā mākou ke hoʻololi iā ia mai ka mīkini i ka mīkini.

NS: Hiki ke ʻōwili ʻia nā waihona ʻikepili o kēia nui, a hiki i 100 GB, i loko o kekahi mau minuke ma nā disks maikaʻi a me kahi pūnaewele maikaʻi, pololei? ʻAʻole exotic ka wikiwiki o 1 GB i kekona.

DC: ʻAe, no ka hana linear ʻaʻole kēia pilikia.

NS: ʻAe, pono mākou e noʻonoʻo e pili ana i ka prod. A inā mākou e noʻonoʻo nei i nā Kubernetes no nā kaiapuni non-prod, he aha kā mākou e hana ai? ʻIke wau i kēlā ma Zalando hana mea hoʻohana, ma Crunchy ʻili ʻili, aia kekahi mau koho ʻē aʻe. A aia OnGres - ʻo kā mākou hoaaloha maikaʻi ʻo Alvaro mai Sepania: ʻaʻole wale ka mea a lākou e hana ai mea hoʻohana, a me ka puunaue holookoa (StackGres), kahi i hoʻohui ʻia me Postgres ponoʻī, ua hoʻoholo pū lākou e hoʻopili i kahi waihona, ka Envoy proxy ...

DC: Elele no ke aha? ʻO ke kaulike ʻana i nā kaʻa Postgres?

NS: ʻAe. ʻO ia hoʻi, ʻike lākou e like me: inā ʻoe e lawe i kahi hoʻohele Linux a me ka kernel, a laila ʻo PostgreSQL maʻamau ka kernel, a makemake lākou e hana i kahi puʻupuʻu e lilo i kapua-aloha a holo ma Kubernetes. Hoʻohui lākou i nā ʻāpana (backups, etc.) a debug iā lākou i hana maikaʻi lākou.

DC: Maikaʻi loa! ʻO ka mea nui he polokalamu kēia e hana i kāu Postgres hoʻokele ponoʻī.

NS: Loaʻa nā pilikia mau loa nā hāʻawi Linux: pehea e hana ai i nā mea hoʻokele i kākoʻo ʻia nā lako āpau. A loaʻa iā lākou ka manaʻo e hana lākou ma Kubernetes. ʻIke wau i ka mea hana Zalando ua ʻike mākou i kahi pilina me AWS a ʻaʻole maikaʻi loa kēia. ʻAʻole pono e hoʻopaʻa ʻia i kahi ʻōnaehana kikoʻī - he aha ke kumu?

DC: ʻAʻole maopopo iaʻu i ke kūlana i komo ai ʻo Zalando, akā ma ka mālama ʻana o Kubernetes i kēia manawa i hiki ʻole ke lawe i kahi hoʻihoʻi disk me ka hoʻohana ʻana i ke ʻano generic. I kēia manawa ma ke kūlana - i ka mana hou loa Nā kikoʻī CSI - Ua hana mākou i nā kiʻi paʻi, akā ma hea kahi e hoʻokō ʻia ai? ʻO kaʻoiaʻiʻo, ʻo nā mea a pau ke ʻano maʻamau ... Ke hoʻāʻo nei mākou i ka CSI ma luna o AWS, GCE, Azure, vSphere, akā i ka wā e hoʻomaka ai ʻoe e hoʻohana, ʻike ʻoe ʻaʻole i mākaukau.

NS: ʻO ia ke kumu e hilinaʻi ai mākou i kekahi manawa i ka ʻoihana. Manaʻo wau he wā mua kēia - e ulu ana nā ʻeha. Nīnau: He aha kāu ʻōlelo aʻo e hāʻawi ai i nā poʻe hou e makemake e hoʻāʻo iā PgSQL ma K8s? He aha paha ka mea hoʻohana?

DC: ʻO ka pilikia ʻo Postgres ka 3% no mākou. Loaʻa iā mākou kahi papa inoa nui loa o nā polokalamu like ʻole ma Kubernetes, ʻaʻole wau e papa inoa i nā mea āpau. No ka laʻana, Elasticsearch. Nui nā mea hoʻohana: ke ulu ikaika nei kekahi, ʻaʻole kekahi. Ua kākau mākou i nā koi no mākou iho e pili ana i ka mea e pono ai ka mea hoʻohana i hiki iā mākou ke lawe koʻikoʻi. Ma kahi mea hoʻohana kūikawā no Kubernetes - ʻaʻole i loko o kahi "mea hana e hana i kekahi mea ma nā kūlana o Amazon" ... ʻOiaʻiʻo, hoʻohana nui mākou (= kokoke i nā mea kūʻai aku āpau) i hoʻokahi mea hoʻohana - no Redis (e hoʻopuka koke mākou i kahi ʻatikala e pili ana iā ia).

NS: ʻAʻole hoʻi no MySQL? ʻIke wau ʻo Percona ... ʻoiai lākou e hana nei ma MySQL, MongoDB, a me Postgres, pono lākou e hana i kekahi ʻano o ka hopena honua: no nā ʻikepili āpau, no nā mea hāʻawi kapuaʻi āpau.

DC: ʻAʻohe o mākou manawa e nānā i nā mea hoʻohana no MySQL. ʻAʻole kēia kā mākou mea nui i kēia manawa. Hana maikaʻi ʻo MySQL ma ke kaʻawale. No ke aha e hoʻohana ai i kahi mea hoʻohana inā hiki iā ʻoe ke hoʻomaka wale i kahi waihona ... Hiki iā ʻoe ke hoʻomaka i kahi pahu Docker me Postrges, a i ʻole hiki iā ʻoe ke hoʻomaka ma ke ala maʻalahi.

NS: Aia kekahi ninau e pili ana i keia. ʻAʻohe mea hoʻohana?

DC: ʻAe, 100% o mākou e holo nei ʻo PostgreSQL me ka ʻole o ka mea hoʻohana. A hiki i kēia manawa. Hoʻohana ikaika mākou i ka mea hoʻohana no Prometheus a me Redis. Loaʻa iā mākou nā manaʻo e ʻimi i kahi mea hoʻohana no Elasticsearch - ʻo ia ka mea i ʻoi loa "i ke ahi", no ka mea makemake mākou e hoʻokomo iā ia ma Kubernetes ma 100% o nā hihia. E like me kā mākou makemake e hōʻoia e hoʻokomo mau ʻia ʻo MongoDB ma Kubernetes. Eia kekahi mau makemake - aia ka manaʻo e hiki ke hana i kekahi mea. A ʻaʻole mākou i nānā iā Postgres. ʻOiaʻiʻo, ʻike mākou he mau koho like ʻole, akā ʻoiaʻiʻo he kūʻokoʻa kā mākou.

DB no ka hoʻāʻo ʻana ma Kubernetes

NS: E neʻe kākou i ke kumuhana o ka hoʻāʻo. Pehea e ʻōwili ai i nā loli i ka waihona - mai kahi hiʻohiʻona DevOps. Aia nā microservices, nui nā waihona, ke loli nei kekahi mea i nā manawa āpau. Pehea e hōʻoiaʻiʻo ai i ka CI / CD maʻamau i hoʻonohonoho pono nā mea āpau mai ka hiʻohiʻona DBMS. He aha kāu ala?

DC: ʻAʻole hiki ke loaʻa hoʻokahi pane. Nui nā koho. ʻO ka mua ka nui o ke kumu a mākou e makemake ai e ʻōwili i waho. Ua ʻōlelo ʻoe iā ʻoe iho he ʻano ʻokoʻa nā ʻoihana i ka loaʻa ʻana o kahi kope o ka waihona prod ma dev a me ke kahua.

NS: A ma lalo o nā kūlana o ka GDPR, ke manaʻo nei au e noʻonoʻo nui ana lākou ... hiki iaʻu ke ʻōlelo ma ʻEulopa ua hoʻomaka lākou e kau i nā uku.

DC: Akā pinepine hiki iā ʻoe ke kākau i nā polokalamu e lawe i kahi hoʻokuʻu mai ka hana ʻana a hoʻopololei iā ia. Loaʻa ka ʻikepili Prod (snapshot, dump, binary copy...), akā ʻaʻole inoa ʻia. Akā, hiki ke loaʻa nā moʻohelu hanauna: hiki i kēia ke hoʻopaʻa a i ʻole kahi palapala e hoʻopuka i kahi waihona nui. ʻO ka pilikia: pehea ka lōʻihi e hana ai i kahi kiʻi kumu? A pehea ka lōʻihi o ka hoʻolaha ʻana iā ia ma ka wahi i makemake ʻia?

Ua hele mākou i kahi papahana: inā loaʻa i ka mea kūʻai kahi hoʻonohonoho ʻikepili paʻa (ka liʻiliʻi liʻiliʻi o ka waihona), a laila hoʻohana mākou iā lākou ma ke ʻano maʻamau. Inā mākou e kamaʻilio e pili ana i nā kaiapuni loiloi, i ka wā i hana ai mākou i kahi lālā, ua kau mākou i kahi hiʻohiʻona o ka noi - ʻōwili mākou i kahi waihona liʻiliʻi ma laila. Akā ua maikaʻi ka hopena koho, ke lawe mākou i kahi pahu mai ka hana ʻana i hoʻokahi lā (i ka pō) a kūkulu i kahi pahu Docker me PostgreSQL a me MySQL me kēia ʻikepili i hoʻoili ʻia ma luna o ia. Inā pono ʻoe e hoʻonui i ka waihona 50 mau manawa mai kēia kiʻi, hana maʻalahi a wikiwiki kēia.

NS: Ma ke kope maʻalahi?

DC: Mālama pono ʻia ka ʻikepili ma ke kiʻi Docker. ʻO kēlā mau mea. Loaʻa iā mākou kahi kiʻi mākaukau, ʻoiai ʻo 100 GB. Mahalo i nā papa ma Docker, hiki iā mākou ke hoʻonohonoho wikiwiki i kēia kiʻi i nā manawa a mākou e pono ai. He naʻaupō ke ʻano, akā hana maikaʻi.

NS: A laila, ke hoʻāʻo ʻoe, hoʻololi pololei i loko o Docker, pololei? Kopi-ma-kākau i loko o Docker - hoʻolei a hele hou, maikaʻi nā mea a pau. Papa! A ke hoʻohana nei ʻoe iā ia i ka piha loa?

DC: No ka manawa loihi.

NS: Hana mākou i nā mea like loa. ʻAʻole wale mākou e hoʻohana i kā Docker's copy-on-write, akā kekahi.

DC: ʻAʻole ia maʻamau. A hana ʻo Docker ma nā wahi āpau.

NS: Ma ka manaʻo, ʻae. Akā, loaʻa iā mākou nā modula ma laila, hiki iā ʻoe ke hana i nā modula like ʻole a hana pū me nā ʻōnaehana faila ʻē aʻe. He manawa kēia. Mai ka ʻaoʻao Postgres, ʻokoʻa kā mākou nānā ʻana i kēia. I kēia manawa ua nānā au mai ka ʻaoʻao Docker a ʻike ua hana nā mea āpau iā ʻoe. Akā inā nui ka waihona, no ka laʻana, 1 TB, a laila lōʻihi kēia mau mea: nā hana i ka pō, a hoʻokomo i nā mea āpau i Docker ... A inā hoʻokomo ʻia ʻo 5 TB i Docker ... A maikaʻi paha nā mea āpau?

DC: He aha ka ʻokoʻa: he mau pōpō kēia, nā bits a me nā bytes wale nō.

NS: ʻO ka ʻokoʻa kēia: ke hana nei ʻoe ma o ka dump a hoʻihoʻi?

DC: ʻAʻole pono. Hiki ke ʻokoʻa ke ʻano o ka hana ʻana i kēia kiʻi.

NS: No kekahi mau mea kūʻai, ua hana mākou i mea ma kahi o ka hana mau ʻana i kahi kiʻi kumu, mālama mau mākou iā ia i kēia lā. He kope maoli ia, akā loaʻa iā ia ka ʻikepili ʻaʻole pololei mai ka haku, akā ma o kahi waihona. ʻO kahi waihona binary kahi e hoʻoiho ʻia ai nā WAL i kēlā me kēia lā, kahi e lawe ʻia ai nā waihona ... A laila hiki kēia mau WAL i ke kiʻi kumu me kahi lohi iki (ʻoiaʻiʻo 1-2 kekona). Hoʻopili mākou iā ia ma kekahi ʻano - i kēia manawa ua loaʻa iā ZFS ma ke ʻano maʻamau.

DC: Akā me ZFS ua palena ʻoe i hoʻokahi node.

NS: ʻAe. Akā, loaʻa iā ZFS kahi kilokilo hoouna aku: me ia hiki iā ʻoe ke hoʻouna i kahi paʻi kiʻi a ʻoiai (ʻaʻole wau i hoʻāʻo maoli i kēia, akā ...) hiki iā ʻoe ke hoʻouna i kahi delta ma waena o ʻelua PGDATA. ʻOiaʻiʻo, loaʻa iā mākou kahi mea hana ʻē aʻe a mākou i noʻonoʻo ʻole ai no ia mau hana. Ua loaʻa iā PostgreSQL pg_rewind, e hana ana e like me ka rsync "akamai", e hoʻolei i ka nui o nā mea āu e nānā ʻole ai, no ka mea, ʻaʻohe mea i loli ma laila. Hiki iā mākou ke hana i kahi hoʻonohonoho wikiwiki ma waena o nā kikowaena ʻelua a hoʻihoʻi i ke ala like.

No laila, mai kēia, ʻoi aku ka ʻaoʻao DBA, ke hoʻāʻo nei mākou e hana i kahi mea hana e hiki ai iā mākou ke hana i ka mea āu i ʻōlelo ai: hoʻokahi kā mākou waihona, akā makemake mākou e hoʻāʻo i kahi mea 50 mau manawa, kokoke i ka manawa like.

DC: 50 mau manawa pono ʻoe e kauoha i nā manawa 50 Spot.

NS: ʻAʻole, hana mākou i nā mea a pau ma ka mīkini hoʻokahi.

DC: Akā pehea ʻoe e hoʻonui ai i nā manawa 50 inā ʻo kēia waihona hoʻokahi, e ʻōlelo, terabyte. Pono paha ʻo ia i kahi conditional 256 GB o RAM?

NS: ʻAe, i kekahi manawa pono ʻoe i ka hoʻomanaʻo nui - he mea maʻamau. Akā he laʻana kēia mai ke ola. ʻO ka mīkini hana he 96 cores a me 600 GB. Ma ka manawa like, hoʻohana ʻia nā cores 32 (ʻoiai ʻo 16 cores i kēia manawa) a me 100-120 GB o ka hoʻomanaʻo no ka waihona.

DC: A he 50 kope i komo i laila?

NS: No laila hoʻokahi kope wale nō, a laila hana kope-ma-kākau (ZFS) ... E haʻi aku wau iā ʻoe i nā kikoʻī hou aku.

No ka laʻana, loaʻa iā mākou kahi waihona 10 TB. Ua hana lākou i kahi diski no ia, ua hoʻopili pū ʻo ZFS i kona nui e 30-40 pakeneka. No ka mea ʻaʻole mākou e hana i ka hoʻāʻo hoʻouka ʻana, ʻaʻole koʻikoʻi ka manawa pane pololei iā mākou: e hoʻonui i ka 2 mau manawa lohi - ua maikaʻi.

Hāʻawi mākou i ka manawa i nā mea polokalamu, QA, DBA, etc. e hana i ka hoʻokolohua ma 1-2 mau kaula. No ka laʻana, holo lākou i kekahi ʻano neʻe. ʻAʻole ia e koi i 10 cores i ka manawa hoʻokahi - pono ia i 1 Postgres backend, 1 core. E hoʻomaka ana ka neʻe ʻana - malia paha autovacuum e hoʻomaka ana, a laila e hoʻohana ʻia ke kumu lua. Loaʻa iā mākou he 16-32 cores i hoʻokaʻawale ʻia, no laila hiki i nā kānaka 10 ke hana i ka manawa like, ʻaʻohe pilikia.

No ke kino PGDATA ʻo ia hoʻi, ua hoʻohuli ʻia mākou e hoʻopunipuni maoli nei iā Postgres. ʻO ka hoʻopunipuni kēia: no ka laʻana, 10 Postgres i hoʻokuʻu ʻia i ka manawa like. He aha ka pilikia maʻamau? Hoʻokomo lākou shared_buffers, e ʻōlelo kākou he 25%. No laila, ʻo 200 GB kēia. ʻAʻole hiki iā ʻoe ke hoʻomaka ma mua o ʻekolu o kēia mau mea, no ka mea e pau ka hoʻomanaʻo.

Akā i kekahi manawa ua ʻike mākou ʻaʻole pono kēia: ua hoʻonoho mākou i shared_buffers i 2 GB. Ua loaʻa iā PostgreSQL kaha_cache_size, a ʻo ka ʻoiaʻiʻo ʻo ia wale nō ka mea e hoʻoikaika ai nā hoʻolālā. Hoʻonoho mākou iā 0,5 TB. A ʻaʻole ia he mea nui ʻaʻole lākou maoli: hana ʻo ia i nā hoʻolālā me he mea lā aia lākou.

No laila, ke hoʻāʻo mākou i kekahi ʻano o ka neʻe ʻana, hiki iā mākou ke hōʻiliʻili i nā hoʻolālā āpau - e ʻike mākou i ke ʻano o ka hana ʻana. ʻOkoʻa nā kekona ma laila (ʻoi aku ka lohi), akā ʻo ka ʻikepili a mākou i heluhelu maoli ai, a me nā hoʻolālā ponoʻī (he aha nā JOIN ma laila, a me nā mea ʻē aʻe) e like me ka hana ʻana. A hiki iā ʻoe ke holo i nā loiloi like ʻole ma ka mīkini hoʻokahi.

DC: ʻAʻole anei ʻoe i manaʻo he mau pilikia ma ʻaneʻi? ʻO ka mea mua he hopena e hana wale ana ma PostgreSQL. He kūʻokoʻa loa kēia ala, ʻaʻole ia maʻamau. ʻO ka lua, ʻo Kubernetes (a me nā mea a pau a nā ʻenehana kapua e hele nei i kēia manawa) e pili ana i nā nodes he nui, a he ephemeral kēia mau nodes. A i kou hihia, he node stateful, hoʻomau. Hoʻopilikia kēia mau mea iaʻu.

NS: ʻO ka mua, ʻae wau, he moʻolelo Postgres maʻemaʻe kēia. Manaʻo wau inā loaʻa iā mākou kekahi ʻano IO pololei a me kahi wai paʻa no ka hoʻomanaʻo āpau, ʻaʻole e holo kēia ala - ʻokoʻa nā hoʻolālā. Akā i kēia manawa hana wale mākou me Postgres, ʻaʻole mākou e noʻonoʻo i nā mea ʻē aʻe.

No Kubernetes. ʻO ʻoe iho e haʻi mai iā mākou ma nā wahi a pau e loaʻa iā mākou kahi waihona hoʻomau. Inā hāʻule ka hihia, ʻo ka mea nui e mālama i ka disk. Eia nō hoʻi iā mākou ke kahua holoʻokoʻa ma Kubernetes, a ʻokoʻa ka ʻāpana me Postgres (ʻoiai aia ma laila i kekahi lā). No laila, ua like nā mea a pau: ua hāʻule ka instance, akā ua mālama mākou i kāna PV a hoʻopili wale iā ia i kahi mea hou (hou), me he mea lā ʻaʻohe mea.

DC: Mai koʻu manaʻo, hana mākou i nā pods ma Kubernetes. K8s - elastic: kauoha ʻia nā knots e like me ka mea e pono ai. ʻO ka hana, ʻo ka hana ʻana i kahi pod a ʻōlelo ʻo ia e pono ai ka nui o nā kumuwaiwai, a laila e noʻonoʻo ʻo K8s iā ia iho. Akā ʻaʻole paʻa ke kākoʻo mālama i Kubernetes: 1.16, i loko 1.17 (Ua hoʻokuʻu ʻia kēia hoʻokuʻu недели aku nei) lilo kēia mau hiʻohiʻona i ka beta wale nō.

E hala ana nā mahina ʻeono a hiki i ka makahiki - e lilo a ʻoi aku ka paʻa, a i ʻole e haʻi ʻia e like me ia. A laila hiki i ka hiki ke paʻi kiʻi a hoʻololi i kāu pilikia. No ka mea, he kumu kou. ʻAe, ʻaʻole paha e wikiwiki loa, akā pili ka wikiwiki i ka mea "ma lalo o ka puʻupuʻu", no ka mea hiki i kekahi mau hoʻokō ke kope a kope-ma-kākau ma ka pae disk subsystem.

NS: Pono nō hoʻi i nā ʻenekini a pau (Amazon, Google...) e hoʻomaka i ke kākoʻo ʻana i kēia mana - ʻo ia hoʻi kekahi manawa.

DC: ʻAʻole mākou e hoʻohana iā lākou. Hoʻohana mākou i kā mākou.

Hoʻomohala kūloko no nā Kubernetes

NS: Ua ʻike paha ʻoe i kahi makemake i ka wā e pono ai ʻoe e hoʻokomo i nā pods āpau ma ka mīkini hoʻokahi a hana i kahi hoʻokolohua liʻiliʻi. No ka loaʻa koke ʻana o kahi hōʻoia o ka manaʻo, e ʻike i ka holo ʻana o ka noi ma Kubernetes, me ka ʻole o ka hoʻolaʻa ʻana i nā mīkini no ia. Aia ʻo Minikube, ʻeā?

DC: Me he mea lā iaʻu kēia hihia - i kau ʻia ma hoʻokahi node - pili wale i ka hoʻomohala kūloko. A i ʻole kekahi mau hōʻike o ia ʻano. ʻAi ʻO Minikube, Aia k3 mau, KIKAI. Ke neʻe nei mākou i ka hoʻohana ʻana iā Kubernetes IN Docker. I kēia manawa ua hoʻomaka mākou e hana me ia no nā hoʻokolohua.

NS: Ua noʻonoʻo wau he hoʻāʻo kēia e hoʻopili i nā pods āpau i hoʻokahi kiʻi Docker. Akā ua ʻike ʻia he mea ʻokoʻa loa kēia. Eia nō naʻe, aia nā pahu ʻokoʻa, nā pods ʻokoʻa - ma Docker wale nō.

DC: ʻAe. A aia kahi hoʻohālike ʻakaʻaka i hana ʻia, akā ʻo ke ʻano kēia ... He pono kā mākou no ka hoʻolaha ʻana - werf. Makemake mākou e hana i ke ʻano kūlana werf up: "E kiʻi iaʻu i nā Kubernetes kūloko." A laila holo i ka conditional ma laila werf follow. A laila hiki i ka mea hoʻomohala ke hoʻoponopono i ka IDE, a e hoʻomaka ʻia kahi kaʻina hana i ka ʻōnaehana e ʻike i nā hoʻololi a kūkulu hou i nā kiʻi, e kau hou ana iā lākou i nā K8 kūloko. ʻO kēia kā mākou makemake e hoʻāʻo e hoʻoponopono i ka pilikia o ka hoʻomohala kūloko.

Nā kiʻi paʻi kiʻi a me ka hoʻopili ʻana i ka waihona ma K8s ʻoiaʻiʻo

NS: Inā hoʻi mākou i kope-ma-kākau. Ua ʻike au he mau kiʻi paʻi ko nā ao. He ʻokoʻa kā lākou hana. No ka laʻana, ma GCP: loaʻa iā ʻoe kahi laʻana multi-terabyte ma ke kahakai hikina o ʻAmelika Hui Pū ʻIa. Lawe ʻoe i nā kiʻi paʻi i kēlā me kēia manawa. 'Oe ke ki'i i kope o ka diski ma ke komohana 'ākau mai kahi ki'i pa'i - i loko o kekahi mau minuke ua mākaukau nā mea a pau, hana wikiwiki loa ia, pono e ho'opiha 'ia ka huna huna. Akā ʻo kēia mau clones (snapshots) i mea e 'hoʻolako' i kahi leo hou. He ʻoluʻolu kēia inā pono ʻoe e hana i nā manawa he nui.

Akā no nā ho'āʻo, ʻike wau i nā snapshots, āu e kamaʻilio nei ma Docker a i ʻole wau e kamaʻilio e pili ana i ZFS, btrfs a me LVM hoʻi ... - ʻae lākou iā ʻoe ʻaʻole e hana i ka ʻikepili hou ma ka mīkini hoʻokahi. Ma ke ao, e uku mau ʻoe iā lākou i kēlā me kēia manawa a kali ʻaʻole kekona, akā mau minuke (a i ka hihia haawe palaualelo, he wati paha).

Akā, hiki iā ʻoe ke kiʻi i kēia ʻikepili i hoʻokahi kekona a ʻelua paha, holo i ka hoʻāʻo a hoʻolei aku. Hoʻoponopono kēia mau paʻi kiʻi i nā pilikia like ʻole. I ka hihia mua - e hoʻonui a loaʻa i nā replicas hou, a i ka lua - no nā hoʻokolohua.

DC: ʻAʻole wau ʻae. ʻO ka hana pono ʻana o ka leo cloning ka hana a ke ao. ʻAʻole wau i nānā i kā lākou hoʻokō ʻana, akā ʻike wau pehea mākou e hana ai ma ka ʻenehana. Loaʻa iā mākou ʻo Ceph, ʻae ia i kekahi leo kino (RBD) ʻōlelo clone a loaʻa i ka lua o ka leo me nā ʻano like i loko o ʻumi mau milliseconds, IOPS'ami, etc. Pono ʻoe e hoʻomaopopo aia aia kahi kope paʻakikī i loko. No ke aha ʻaʻole pono e hana like ke ao? Manaʻo wau e hoʻāʻo nei lākou e hana i kēia ʻano a i ʻole kekahi.

NS: Akā, e mau kekona kekona, he ʻumi kekona e hoʻāla ai i kahi hihia, lawe mai iā Docker i laila, etc.

DC: No ke aha e pono ai e hoʻāla i kahi hihia holoʻokoʻa? Loaʻa iā mākou kahi laʻana me 32 cores, 16 ... a hiki ke komo i loko - no ka laʻana, ʻehā. Ke kauoha mākou i ka lima, e hoʻāla ʻia ke kumu, a laila e holoi ʻia.

NS: ʻAe, hoihoi, ua lilo ʻo Kubernetes i moʻolelo ʻokoʻa. ʻAʻole kā mākou waihona ma K8s, a loaʻa iā mākou hoʻokahi manawa. Akā ʻaʻole ʻoi aku ma mua o ʻelua kekona ke cloning i kahi waihona multi-terabyte.

DC: Maikaʻi loa kēia. Akā ʻo kaʻu kumu mua ʻaʻole kēia he hopena maʻamau. ʻAe, ʻoluʻolu, akā kūpono wale ia no Postgres a ma kahi node wale nō.

NS: He kūpono ia ʻaʻole wale no Postgres: ʻo kēia mau hoʻolālā, e like me kaʻu i wehewehe ai, e hana wale i loko. Akā inā ʻaʻole mākou hopohopo e pili ana i nā hoʻolālā, a pono mākou i nā ʻikepili āpau no ka hoʻāʻo hana, a laila kūpono kēia no kekahi DBMS.

DC: He mau makahiki i hala aku nei ua hana mākou i kekahi mea like ma nā kiʻi paʻi kiʻi LVM. He mea maʻamau kēia. Ua hoʻohana ikaika ʻia kēia ʻano hana. He ʻeha wale nō nā node stateful. No ka mea, ʻaʻole pono ʻoe e haʻalele iā lākou, e hoʻomanaʻo mau ʻoe iā lākou ...

NS: Ke ʻike nei ʻoe i kahi hiki ke hoʻohui ʻia ma aneʻi? E ʻōlelo kākou ʻo stateful kekahi ʻano pod, hana ia no kekahi poʻe (he nui nā mea hoʻāʻo). Loaʻa iā mākou hoʻokahi leo, akā hoʻomaikaʻi i ka ʻōnaehana faila, he kūloko nā clones. Inā hāʻule ka pod, akā mau ka disk, e piʻi aʻe ka pod, e helu i ka ʻike e pili ana i nā clones a pau, e ʻohi hou i nā mea āpau a ʻōlelo: "Eia kāu mau clones e holo ana ma kēia mau awa, e hoʻomau i ka hana me lākou."

DC: Ma ke ʻano ʻenehana, ʻo ia hoʻi i loko o Kubernetes kahi pod i loko o kahi e holo ai mākou i nā Postgres he nui.

NS: ʻAe. He palena kona: ʻaʻole e ʻoi aku ma mua o 10 mau kānaka e hana pū me ia i ka manawa like. Inā makemake ʻoe i 20, e hoʻomaka mākou i ka lua o ia pod. E hoʻopili piha mākou iā ia, i ka loaʻa ʻana o ka lua piha piha, e loaʻa iā ia nā clones 10 "thin". ʻAʻole ʻoe i ʻike i kēia manawa kūpono?

DC: Pono mākou e hoʻohui i nā pilikia palekana ma aneʻi. Keia 'ano o ka hui implies i keia pod i kiʻekiʻe pono (hiki), no ka mea, hiki ke hana maʻamau hana ma ka waihona'ōnaehana ... Akā, au e hai hou aku: Ke manaʻoʻiʻo nei au i ka manawa waena e hoʻoponopono lākou i ka waiho ʻana ma Kubernetes, a ma nā ao e hoʻoponopono lākou i ka moʻolelo holoʻokoʻa me nā puke - e "hana wale nā ​​​​mea āpau". E hoʻololi hou ʻia, cloning ... Aia kahi leo - ʻōlelo mākou: "E hana i kahi mea hou e pili ana i kēlā," a ma hope o kekona a me ka hapa e loaʻa iā mākou ka mea e pono ai.

NS: ʻAʻole wau i manaʻoʻiʻo i hoʻokahi a me ka hapa kekona no nā terabytes he nui. Ma Ceph e hana ʻoe iā ʻoe iho, akā kamaʻilio ʻoe e pili ana i nā ao. E hele i ke ao, e hana i kahi clone o ka leo EBS multi-terabyte ma EC2 a ʻike i ke ʻano o ka hana. ʻAʻole e lawe i kekahi mau kekona. Nui koʻu hoihoi i ka wā e hiki ai lākou i kēia pae. Ua maopopo iaʻu kāu e ʻōlelo nei, akā ke noi aku nei au e ʻokoʻa.

DC: ʻAe, akā ua ʻōlelo wau i ka manawa waena, ʻaʻole pōkole. No kekahi mau makahiki.

E pili ana i ka mea hoʻohana no PostgreSQL mai Zalando

Ma waenakonu o kēia hālāwai, ua hui pū ʻo Alexey Klyukin, kahi mea hoʻomohala mua mai Zalando, a kamaʻilio e pili ana i ka mōʻaukala o ka mea hoʻohana PostgreSQL:

He mea maikaʻi ke pili ʻia kēia kumuhana ma ka laulā: Postgres a me Kubernetes. I ka wā i hoʻomaka ai mākou e hana ma Zalando ma 2017, he kumuhana ia e makemake ai nā mea a pau e hana, akā ʻaʻohe mea i hana. Ua loaʻa i nā kānaka a pau nā Kubernetes, akā i ka nīnau ʻana i ka mea e hana ai me nā ʻikepili, makemake nā poʻe Kelsey Hightower, nāna i haʻi aku i nā K8, i ʻōlelo penei:

"E hele i nā lawelawe hoʻokele a hoʻohana iā lākou, mai holo i ka waihona ma Kubernetes. A i ʻole, e hoʻoholo kāu mau K8, no ka laʻana, e hana i kahi hoʻonui, hoʻopau i nā node a pau, a lele kāu ʻikepili i kahi mamao loa.

Ua hoʻoholo mākou e hana i kahi mea hoʻohana, e kūʻē i kēia ʻōlelo aʻo, e hoʻomaka i kahi waihona Postgres ma Kubernetes. A he kumu maikaʻi kā mākou - Patroni. ʻO kēia kahi failover maʻalahi no PostgreSQL, hana pololei, ʻo ia. e hoʻohana ana i etcd, consul a i ʻole ZooKeeper ma ke ʻano he waihona ʻike e pili ana i ka hui. ʻO ia kahi waihona e hāʻawi i ka poʻe a pau e nīnau, no ka laʻana, he aha ke alakaʻi o kēia manawa, ka ʻike like - ʻoiai ʻo ka mea i hāʻawi ʻia iā mākou nā mea āpau - i ʻole ka lolo. Hoʻohui i loaʻa iā mākou Kiʻi Docker nona.

Ma keʻano laulā, ʻike ʻia ka pono o ka ʻoihana no ka failover auto ma hope o ka neʻe ʻana mai kahi kikowaena ʻikepili kūloko i ke ao. Hoʻokumu ʻia ke ao ma kahi hoʻonā PaaS (Platform-as-a-Service) ponoʻī. ʻO Open Source ia, akā ua nui ka hana e hoʻāla a holo. Ua kapa ʻia STUPS.

I ka wā mua, ʻaʻohe Kubernetes. ʻOi aku ka pololei, i ka wā i kau ʻia ai kā mākou hoʻonā ponoʻī, ua noho mua nā K8, akā ʻaʻole ia i kūpono no ka hana ʻana. ʻO ia, i koʻu manaʻo, 2015 a i ʻole 2016. Ma ka makahiki 2017, ua lilo ʻo Kubernetes i mea ʻoi aʻe a liʻiliʻi paha - pono e neʻe i laila.

A ua loaʻa iā mākou kahi pahu Docker. Aia kahi PaaS i hoʻohana iā Docker. No ke aha ʻaʻole e hoʻāʻo iā K8? No ke aha e kākau ʻole ai i kāu mea hoʻohana ponoʻī? ʻO Murat Kabilov, ka mea i hele mai iā mākou mai Avito, ua hoʻomaka i kēia ma ke ʻano he papahana ma kāna hana ponoʻī - "e pāʻani" - a "hoʻomaka ka papahana."

Akā ma ka laulā, makemake wau e kamaʻilio e pili ana iā AWS. No ke aha i loaʻa ai ke code pili AWS...

Ke holo ʻoe i kekahi mea ma Kubernetes, pono ʻoe e hoʻomaopopo he hana ʻo K8 i ka holomua. Ke hoʻomohala mau nei, hoʻomaikaʻi a hiki i ka haki ʻana i kēlā me kēia manawa. Pono ʻoe e nānā pono i nā hoʻololi a pau o Kubernetes, pono ʻoe e mākaukau e luʻu i loko inā loaʻa kekahi mea a aʻo pehea e hana ai i nā kikoʻī - ʻoi aku paha ma mua o kou makemake. ʻO kēia, ma ke kumu, pili i kēlā me kēia kahua āu e holo ai i kāu ʻikepili ...

No laila, i ka wā i hana ai mākou i ka ʻōlelo, ua holo mākou i Postgres ma kahi leo waho (EBS i kēia hihia, ʻoiai mākou e hana ana ma AWS). Ua ulu ka waihona, i kekahi manawa pono e hoʻololi i ka nui: no ka laʻana, ʻo ka nui mua o EBS ʻo 100 TB, ua ulu ka waihona i laila, makemake mākou e hana i ka EBS 200 TB. Pehea? E ʻōlelo mākou hiki iā ʻoe ke hana i kahi dump/restore i kahi manawa hou, akā lōʻihi kēia a hoʻokomo i ka downtime.

No laila, makemake au i ka nui e hoʻonui i ka ʻāpana EBS a laila e haʻi i ka ʻōnaehana faila e hoʻohana i ka wahi hou. A hana mākou, akā i kēlā manawa ʻaʻohe API no Kubernetes no ka hana hoʻololi. Ma muli o kā mākou hana ʻana ma AWS, ua kākau mākou i ke code no kāna API.

ʻAʻohe mea e kāohi iā ʻoe mai ka hana like ʻana no nā paepae ʻē aʻe. ʻAʻohe mea hōʻike i ka ʻōlelo e hiki ke holo wale ʻia ma AWS, a ʻaʻole ia e hana ma nā mea āpau. Ma ka laulā, he papahana Open Source kēia: inā makemake kekahi e wikiwiki i ka puka ʻana mai o ka hoʻohana ʻana i ka API hou, ʻoluʻolu ʻoe. ʻAi GitHub, huki noi - ho'āʻo ka hui Zalando e pane koke iā lākou a hoʻolaha i ka mea hoʻokele. I koʻu ʻike, ʻo ka papahana komo ma Google Summer of Code a me kekahi mau hana like. Ke hana ikaika nei ʻo Zalando ma ia mea.

PS Bonus!

Inā makemake ʻoe i ke kumuhana o PostgreSQL a me Kubernetes, a laila e ʻoluʻolu hoʻi e hoʻomaopopo ʻoe ua hana ʻia ka Poalua Postgres aʻe i ka pule i hala, kahi aʻu i kamaʻilio ai me Nikolai. ʻO Alexander Kukushkin mai Zalando. Loaʻa ka wikiō mai ia mea maanei.

PPS

E heluhelu pū ma kā mākou blog:

Source: www.habr.com

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