Kondisyon pou devlope yon aplikasyon nan Kubernetes

Jodi a mwen planifye pou pale sou fason pou ekri aplikasyon yo ak ki kondisyon yo genyen pou aplikasyon w lan travay byen nan Kubernetes. Se konsa, pa gen okenn tèt fè mal ak aplikasyon an, pou ke ou pa bezwen envante ak bati nenpòt "cratches" alantou li - ak tout bagay ap travay nan fason Kubernetes li menm gen entansyon.

Konferans sa a fè pati "Slurm Night School sou Kubernetes" Ou ka wè konferans teyorik ki louvri nan Lekòl Aswè a sou Youtube, gwoupe nan yon playlist. Pou moun ki pito tèks olye ke videyo, nou te prepare atik sa a.

Non mwen se Pavel Selivanov, kounye a mwen se dirijan enjenyè DevOps nan Mail.ru Cloud Solutions, nou fè nwaj, nou fè jesyon kubernetes ak sou sa. Travay mwen kounye a gen ladan asistans nan devlopman, woule nyaj sa yo, woule aplikasyon ke nou ekri yo ak dirèkteman devlope zouti ke nou bay itilizatè nou yo.

Kondisyon pou devlope yon aplikasyon nan Kubernetes

Mwen te fè DevOps, mwen panse ke pou dènye, pwobableman, twa ane yo. Men, nan prensip, mwen te fè sa DevOps fè pou pwobableman apeprè senk ane kounye a. Anvan sa, mwen te sitou patisipe nan bagay admin. Mwen te kòmanse travay ak Kubernetes yon bon bout tan de sa - pwobableman apeprè kat ane te pase depi mwen te kòmanse travay ak li.

An jeneral, mwen te kòmanse lè Kubernetes te vèsyon 1.3, pwobableman, e petèt 1.2 - lè li te toujou nan anfans li. Koulye a, li pa nan anfans li - epi li evidan ke gen yon demann gwo nan mache a pou enjenyè ki ta renmen kapab fè Kubernetes. Ak konpayi yo gen yon demann trè wo pou moun sa yo. Se poutèt sa, an reyalite, konferans sa a te parèt.

Si nou pale dapre plan sa m pral pale a, li sanble sa a, nan parantèz yo ekri (TL;DR) - "twò long; pa li". Prezantasyon mwen jodi a pral konpoze de lis kontinuèl.

Kondisyon pou devlope yon aplikasyon nan Kubernetes

An reyalite, mwen menm mwen pa renmen prezantasyon sa yo lè yo fè yo, men sa a se yon sijè konsa ke lè mwen t ap prepare prezantasyon sa a, mwen tou senpleman pa t reyèlman konnen ki jan yo òganize enfòmasyon sa a yon fason diferan.

Paske, an jeneral, enfòmasyon sa a se "ctrl+c, ctrl+v", ki soti nan, pami lòt bagay, Wiki nou an nan seksyon DevOps, kote nou te ekri egzijans pou devlopè yo: "Mesye, pou nou lanse aplikasyon w lan nan Kubernetes, li ta dwe tankou sa a."

Se poutèt sa prezantasyon an te tounen yon lis gwo. Padon. Mwen pral eseye di otank posib pou ke li pa raz si sa posib.

Ki sa nou pral gade kounye a:

  • sa yo se, premyèman, mòso bwa (mòso bwa aplikasyon?), ki sa yo dwe fè ak yo nan Kubernetes, ki sa yo dwe fè ak yo, ki sa yo ta dwe;
  • kisa pou fè ak konfigirasyon nan Kubernetes, ki pi bon ak pi move fason yo konfigirasyon yon aplikasyon pou Kubernetes;
  • Ann pale sou ki sa chèk aksè yo ye an jeneral, ki jan yo ta dwe sanble;
  • ann pale sou sa yon fèmen grasyeuz ye;
  • ann pale de resous ankò;
  • Ann manyen sijè a nan depo done yon lòt fwa ankò;
  • epi nan fen a mwen pral di ou ki tèm aplikasyon sa a misterye nwaj natif natal. Cloudnativeness, kòm yon adjektif tèm sa a.

Logs

Mwen sijere kòmanse ak mòso bwa yo - ak kote mòso bwa sa yo bezwen pouse nan Kubernetes. Koulye a, ou te lanse yon aplikasyon nan Kubernetes. Dapre klasik yo, aplikasyon deja te toujou ekri mòso bwa yon kote nan yon dosye. Move aplikasyon yo te ekri mòso bwa nan yon dosye nan anyè lakay pwomotè ki te lanse aplikasyon an. Aplikasyon bon te ekri mòso bwa nan yon dosye yon kote nan /var/log.

Kondisyon pou devlope yon aplikasyon nan Kubernetes

An konsekans, pi lwen, bon administratè yo te gen kèk bagay configuré nan enfrastrikti yo ke mòso bwa sa yo ka vire - menm rsyslog la, ki gade nan mòso bwa sa yo epi lè yon bagay rive yo, gen anpil nan yo, li kreye kopi backup , mete mòso bwa la. , efase dosye fin vye granmoun, plis pase yon semèn, sis mwa ak kèk plis. Nan teyori, nou ta dwe gen dispozisyon pou tou senpleman paske aplikasyon an ekri mòso bwa, espas ki sou serveurs pwodiksyon yo (sèvè konba?) pa fini. Epi, kòmsadwa, pwodiksyon an tout antye pa t 'sispann paske nan mòso bwa yo.

Lè nou deplase nan mond lan nan Kubernetes epi kouri menm bagay la la, premye bagay ou ka peye atansyon a se lefèt ke moun, menm jan yo te ekri mòso bwa nan yon dosye, kontinye ekri yo.

Li sanble ke si nou pale sou Kubernetes, bon kote pou ekri mòso bwa yon kote nan yon veso Docker se tou senpleman ekri yo soti nan aplikasyon an nan sa yo rele Stdout/Stderr, se sa ki, kouran pwodiksyon estanda nan sistèm opere a, pwodiksyon erè estanda a. Sa a se fason ki pi kòrèk, ki pi senp ak ki pi lojik pou mete mòso bwa nan prensip nan Docker ak espesyalman nan Kubernetis. Paske si aplikasyon w lan ekri mòso bwa nan Stdout/Stderr, Lè sa a, li nan jiska Docker ak Kubernetes add-on pou deside kisa pou fè ak mòso bwa sa yo. Docker pral pa default bati dosye espesyal li yo nan fòma JSON.

Isit la kesyon an rive, ki sa ou pral fè pwochen ak mòso bwa sa yo? Fason ki pi fasil la klè, nou gen kapasite pou fè kubectl logs epi gade mòso bwa sa yo nan "gous" sa yo. Men, pwobableman, sa a se pa yon opsyon trè bon - yon lòt bagay bezwen fè ak mòso bwa yo.

Pou kounye a, ann pale an menm tan an, depi nou manyen sijè a nan mòso bwa, sou yon bagay tankou mòso bwa yo ta dwe sanble. Sa vle di, sa a pa aplike dirèkteman nan Kubernetes, men lè nou kòmanse reflechi sou sa yo dwe fè ak mòso bwa, li ta bon pou panse sou sa a tou.

Nou bezwen yon kalite zouti, nan yon fason amikal, ki pral pran mòso bwa sa yo ke docker nou an mete nan dosye li yo epi voye yo yon kote. An jeneral, nou anjeneral lanse kèk kalite ajan andedan Kubernetes nan fòm lan nan yon DaemonSet - yon pèseptè boutèy demi lit, ki se tou senpleman di ki kote mòso bwa ke Docker kolekte yo ye. Ak ajan kolekte sa a tou senpleman pran yo, petèt menm yon jan kanmenm analiz yo sou wout la, petèt anrichi yo ak kèk meta-enfòmasyon adisyonèl epi, finalman, voye yo pou depo yon kote. Varyasyon yo deja posib la. Ki pi komen an se pwobableman Elasticsearch, kote ou ka estoke mòso bwa epi ou ka fasilman rekipere yo soti nan la. Lè sa a, lè l sèvi avèk yon demann, lè l sèvi avèk Kibana, pou egzanp, bati graf ki baze sou yo, bati alèt ki baze sou yo, ak sou sa.

Lide ki pi enpòtan an, mwen vle repete l 'ankò, se ke andedan Docker, an patikilye andedan Kubernetes, estoke mòso bwa ou nan yon dosye se yon trè move lide.

Paske premyèman, li difisil pou jwenn mòso bwa yo andedan veso a nan yon dosye. Ou dwe premye antre nan veso a, egzekite la, ak Lè sa a, gade nan mòso bwa yo. Pwen kap vini an se ke si ou gen mòso bwa nan yon dosye, Lè sa a, resipyan yo anjeneral gen yon anviwònman minimalist epi pa gen okenn sèvis piblik ki anjeneral bezwen pou travay nòmal ak mòso bwa. Antere yo, gade yo, louvri yo nan yon editè tèks. Moman kap vini an se lè nou gen mòso bwa nan yon dosye andedan yon veso, si veso sa a efase, ou konprann, mòso bwa yo pral mouri ansanm ak li. An konsekans, nenpòt rekòmanse nan veso a vle di pa gen plis mòso bwa. Ankò, move opsyon.

Ak dènye pwen an se ke andedan kontenè ou anjeneral gen aplikasyon ou ak sa a li - li se nòmalman pwosesis la sèlman ap kouri. Pa gen okenn pale nan tout sou nenpòt pwosesis ki ta Thorne dosye ak mòso bwa ou yo. Le pli vit ke mòso bwa yo kòmanse ekri nan yon dosye, sa vle di ke, eskize m ', nou pral kòmanse pèdi sèvè pwodiksyon an. Paske, premyèman, yo difisil pou jwenn, pa gen moun ki swiv yo, plis pesonn pa kontwole yo - kòmsadwa, dosye a ap grandi san rete jiskaske espas ki la sou sèvè a tou senpleman fini. Se poutèt sa, mwen di ankò ke antre nan Docker, an patikilye nan Kubernetes, nan yon dosye se yon move lide.

Pwen nan pwochen, isit la mwen vle pale sou sa a ankò - depi nou ap manyen sou sijè a nan mòso bwa, li ta bon pou pale sou ki jan mòso bwa yo ta dwe gade yo nan lòd yo fè li pratik yo travay avèk yo. Kòm mwen te di, sijè a pa dirèkteman gen rapò ak Kubernetes, men li gen rapò trè byen ak sijè a nan DevOps. Sou sijè a nan kilti devlopman ak amitye ant de depatman sa yo diferan - Dev ak Ops, pou ke tout moun konfòtab.

Sa vle di ke depreferans, jodi a, mòso bwa yo ta dwe ekri nan fòma JSON. Si ou gen kèk aplikasyon enkonpreyansib pou pwòp ou a, ki ekri mòso bwa nan fòma enkonpreyansib paske ou mete kèk kalite enprime oswa yon bagay tankou sa, Lè sa a, li lè yo google kèk kalite kad, kèk kalite wrapper ki pèmèt ou aplike nòmal antre; pèmèt paramèt antre nan JSON la, paske JSON se yon fòma senp, analiz li se senp.

Si JSON ou a pa travay dapre kèk kritè, pèsonn pa konnen ki sa, Lè sa a, omwen ekri mòso bwa nan yon fòma ki ka analize. Isit la, pito, li vo reflechi sou lefèt ke, pou egzanp, si w ap kouri yon pakèt moun sou resipyan oswa jis pwosesis ak nginx, epi yo chak gen pwòp anviwònman antre li yo, Lè sa a, li pwobableman sanble ke li pral trè konvenyan pou ou. analize yo. Paske pou chak nouvo egzanp nginx ou bezwen ekri analizeur pwòp ou a, paske yo ekri mòso bwa yon fason diferan. Yon fwa ankò, li te pwobableman vo reflechi sou asire w ke tout sikonstans sa yo nginx te gen menm konfigirasyon anrejistreman an epi yo te ekri tout mòso bwa yo absoliman inifòm. Menm bagay la tou aplike nan absoliman tout aplikasyon yo.

Nan fen a, mwen vle tou ajoute gaz nan dife a ki, depreferans, mòso bwa fòma milti-liy yo ta dwe evite. Isit la nan bagay la, si ou te janm travay ak pèseptè boutèy demi lit, Lè sa a, gen plis chans ou te wè sa yo pwomèt ou, ke yo ka travay ak mòso bwa milti-liy, konnen ki jan yo kolekte yo, ak sou sa. An reyalite, nan opinyon mwen, pa yon sèl pèseptè jodi a ka kolekte mòso bwa milti-liy nòmalman, konplètman epi san erè. Nan yon fason imen, se konsa ke li se pratik ak erè-gratis.

Kondisyon pou devlope yon aplikasyon nan Kubernetes

Men, tras pile se toujou mòso bwa milti-liy ak ki jan pou fè pou evite yo. Kesyon an isit la se ke yon boutèy demi lit se yon dosye sou yon evènman, ak stactrace se pa aktyèlman yon boutèy demi lit. Si nou kolekte mòso bwa epi mete yo yon kote nan Elasticsearch ak Lè sa a, trase graf nan yo, bati kèk rapò sou aktivite itilizatè sou sit ou a, Lè sa a, lè ou jwenn yon tras pile, sa vle di ke yon sitiyasyon inatandi k ap pase nan aplikasyon w lan. Epi li fè sans otomatikman telechaje yon tras pil yon kote nan yon sistèm ki ka swiv yo.

Sa a se lojisyèl (menm Sentry la) ki fèt espesyalman pou travay ak tras pile. Li ka imedyatman kreye travay otomatik, bay yon moun, alèt lè stacttraces rive, gwoup stacttraces sa yo pa yon sèl kalite, ak sou sa. Nan prensip, li pa fè anpil sans pale sou stactraces lè nou pale sou mòso bwa, paske sa yo se, apre tout, bagay diferan ak objektif diferan.

Konfigirasyon

Apre sa, nou pale sou konfigirasyon nan Kubernetes: kisa pou fè ak li ak ki jan aplikasyon andedan Kubernetes yo ta dwe configuré. An jeneral, mwen anjeneral di ke Docker se pa sou resipyan. Tout moun konnen ke Docker se sou resipyan, menm moun ki pa te travay ak Docker anpil. Mwen repete, Docker se pa sou kontenè.

Docker, nan opinyon mwen, se sou estanda. Epi gen estanda pou prèske tout bagay: estanda pou bati aplikasyon w lan, estanda pou enstale aplikasyon w lan.

Kondisyon pou devlope yon aplikasyon nan Kubernetes

Ak bagay sa a - nou te itilize li anvan, li jis te vin espesyalman popilè ak avenman nan resipyan - bagay sa a yo rele ENV (anviwònman) varyab, se sa ki, varyab anviwònman ki nan sistèm opere ou a. Sa a se jeneralman yon fason ideyal yo konfigirasyon aplikasyon w lan, paske si ou gen aplikasyon nan JAVA, Python, Go, Perl, Bondye padon, epi yo tout ka li lame baz done a, itilizatè baz done, varyab modpas baz done, Lè sa a, li ideyal. Ou gen aplikasyon nan kat lang diferan konfigirasyon nan plan baz done a menm jan an. Pa gen plis konfigirasyon diferan.

Tout bagay ka konfigirasyon lè l sèvi avèk varyab ENV. Lè nou pale sou Kubernetes, gen yon bon fason pou deklare varyab ENV anndan Deployment. An konsekans, si nou ap pale de done sekrè, Lè sa a, nou ka imedyatman pouse done sekrè ki soti nan varyab ENV (modpas nan baz done, elatriye) nan yon sekrè, kreye yon gwoup sekrè epi endike nan deskripsyon an ENV nan Deplwaman ke nou pa dirèkteman deklare. valè varyab sa a, epi valè varyab modpas baz done sa a pral li nan sekrè a. Sa a se konpòtman estanda Kubernetes. Ak sa a se opsyon ki pi ideyal yo konfigirasyon aplikasyon ou yo. Jis nan nivo kòd, ankò sa a aplike a devlopè. Si ou se DevOps, ou ka mande: "Mesye, tanpri anseye aplikasyon w lan pou li varyab anviwònman an. Epi nou tout pral kontan."

Si tout moun nan konpayi an li menm varyab anviwònman yo te rele, Lè sa a, se gwo. Pou ke li pa rive ke kèk ap tann pou baz done a postgres, lòt moun ap tann non baz done a, lòt moun ap tann pou yon lòt bagay, lòt moun ap tann pou yon dbn nan kèk kalite, se konsa ke, kòmsadwa, gen inifòmite.

Pwoblèm nan vini lè ou gen anpil varyab anviwònman ke ou jis louvri Deplwaman - e gen senksan liy nan varyab anviwònman an. Nan ka sa a, ou te tou senpleman depase varyab anviwònman - epi ou pa bezwen tòti tèt ou ankò. Nan ka sa a, li ta gen sans yo kòmanse itilize konfigirasyon. Sa vle di, antrene aplikasyon w lan pou itilize konfigirasyon yo.

Sèl kesyon an se ke konfigirasyon yo pa sa ou panse. Config.pi se pa yon konfigirasyon ki pratik pou itilize. Oswa kèk konfigirasyon nan fòma pwòp ou a, altènativman ki gen don - sa a se pa konfigirasyon an mwen vle di.

Ki sa m ap pale de se konfigirasyon nan fòma akseptab, se sa ki, pa lwen estanda ki pi popilè se estanda a .yaml. Li klè ki jan yo li li, li se moun lizib, li klè ki jan yo li li nan aplikasyon an.

An konsekans, nan adisyon a YAML, ou ka tou, pou egzanp, sèvi ak JSON, parsing se apeprè osi pratik ke YAML an tèm de li konfigirasyon aplikasyon an soti nan la. Li se notables pi konvenyan pou moun yo li. Ou ka eseye fòma a, a la ini. Li trè pratik pou li, nan yon pwen de vi moun, men li ka enkonvenyan pou trete li otomatikman, nan sans ke si ou janm vle jenere pwòp konfigirasyon ou, fòma ini a ka deja enkonvenyan pou jenere.

Men, nan nenpòt ka, kèlkeswa fòma ou chwazi a, pwen an se ke soti nan yon pwen de vi Kubernetes li trè pratik. Ou ka mete tout konfigirasyon ou anndan Kubernetes, nan ConfigMap la. Lè sa a, pran konfigmap sa a epi mande pou l monte andedan gous ou a nan kèk anyè espesifik, kote aplikasyon w lan pral li konfigirasyon an nan konfigmap sa a kòm si li te jis yon dosye. Sa a, an reyalite, se sa ki bon fè lè ou gen anpil opsyon konfigirasyon nan aplikasyon w lan. Oswa li jis kèk kalite estrikti konplèks, gen nidifikasyon.

Si ou gen yon konfigmap, Lè sa a, ou ka trè byen anseye aplikasyon w lan, pou egzanp, otomatikman swiv chanjman nan dosye a kote konfigmap la monte, epi tou otomatikman rechaje aplikasyon w lan lè konfigirasyon yo chanje. Sa a ta jeneralman yon opsyon ideyal.

Ankò, mwen deja pale sou sa a - enfòmasyon sekrè se pa nan configmap la, enfòmasyon sekrè se pa nan varyab, enfòmasyon sekrè se pa nan sekrè. Soti nan la, konekte enfòmasyon sekrè sa a ak diplomasi. Anjeneral nou estoke tout deskripsyon objè Kubernetes, deplwaman, konfigmaps, sèvis nan git. An konsekans, mete modpas la nan baz done a nan git, menm si li se git ou, ke ou genyen anndan konpayi an, se yon move lide. Paske, nan yon minimòm, git sonje tout bagay epi tou senpleman retire modpas yo pa tèlman fasil.

Chèk sante

Pwen kap vini an se bagay sa a ki rele Health check. An jeneral, yon chèk Sante se tou senpleman tcheke si aplikasyon w lan ap fonksyone. An menm tan an, nou pi souvan pale sou sèten aplikasyon entènèt, pou ki, kòmsadwa, nan pwen de vi nan chèk sante (li se pi bon pa tradui isit la ak pi lwen) sa a pral kèk URL espesyal, ke yo trete kòm. yon estanda, yo anjeneral fè /health.

Lè w gen aksè nan URL sa a, an konsekans, aplikasyon nou an di swa "wi, oke, tout bagay anfòm pou mwen, 200" oswa "non, tout bagay pa anfòm pou mwen, kèk 500." An konsekans, si aplikasyon nou an se pa http, se pa yon aplikasyon entènèt, kounye a nou ap pale sou kèk kalite demon, nou ka konnen ki jan yo fè chèk sante. Sa vle di, li pa nesesè, si aplikasyon an pa http, Lè sa a, tout bagay ap travay san yo pa yon chèk sante ak sa a pa ka fè nan okenn fason. Ou ka detanzantan mete ajou kèk enfòmasyon nan dosye a, ou ka vini ak kèk kòmand espesyal pou demon ou a, tankou, daemon status, ki pral di "wi, tout bagay anfòm, demon an ap travay, li vivan."

Pou kisa li ye? Premye ak bagay ki pi evidan se pwobableman poukisa yon chèk sante bezwen - pou konprann ke aplikasyon an ap travay. Mwen vle di, li jis estipid, lè li moute kounye a, li sanble ke li ap travay, kidonk, ou ka asire w ke li ap travay. Epi li sanble ke aplikasyon an ap kouri, veso a ap kouri, egzanp lan ap travay, tout bagay anfòm - ak Lè sa a, itilizatè yo te deja koupe tout nimewo telefòn yo nan sipò teknik epi yo di "ki sa ou ye..., ou. dòmi, pa gen anyen k ap travay."

Yon chèk sante se jis yon fason yo wè nan pwen de vi itilizatè a ke li fonksyone. Youn nan metòd yo. Ann mete l konsa. Soti nan pwen de vi Kubernetes, sa a se tou yon fason yo konprann lè aplikasyon an kòmanse, paske nou konprann ke gen yon diferans ant lè veso a te lanse, kreye ak kòmanse, ak lè aplikasyon an te lanse dirèkteman nan veso sa a. Paske si nou pran kèk aplikasyon java mwayèn epi eseye lanse li nan waf la, Lè sa a, pou karant segonn, oswa menm yon minit, oswa menm dis, li ka kòmanse jis byen. Nan ka sa a, ou ka omwen frape sou pò li yo, li pa pral reponn la, se sa ki, li poko pare yo resevwa trafik.

Ankò, avèk èd nan yon chèk sante ak èd nan lefèt ke nou ap vire isit la, nou ka konprann nan Kubernetes ke pa sèlman veso a te monte nan aplikasyon an, men aplikasyon an li menm te kòmanse, li deja reponn a la. chèk sante, ki vle di nou ka voye trafik la.

Kondisyon pou devlope yon aplikasyon nan Kubernetes

Sa m ap pale kounye a yo rele tès Preparasyon/Viv nan Kubernetes kòmsadwa, tès preparasyon nou yo responsab pou disponiblite aplikasyon an nan balanse. Sa vle di, si tès preparasyon yo fèt nan aplikasyon an, Lè sa a, tout bagay se ok, trafik kliyan yo pral nan aplikasyon an. Si tès preparasyon yo pa fèt, lè sa a aplikasyon an tou senpleman pa patisipe, egzanp patikilye sa a pa patisipe nan balanse, yo retire li nan balanse, epi trafik kliyan pa koule. An konsekans, tès Liveness nan Kubernetes yo nesesè pou ke si aplikasyon an vin kole, li ka rekòmanse. Si tès vivan an pa travay pou yon aplikasyon ki deklare nan Kubernetes, Lè sa a, aplikasyon an pa jis retire nan balanse, li rekòmanse.

Ak isit la se yon pwen enpòtan ke mwen ta renmen mansyone: soti nan yon pwen de vi pratik, tès la preparasyon anjeneral itilize pi souvan epi li pi souvan bezwen pase tès la liveness. Sa vle di, tou senpleman deklare san reflechi tou de tès preparasyon ak vivite, paske Kubernetes ka fè sa, epi ann sèvi ak tout sa li kapab fè, se pa yon trè bon lide. Mwen pral eksplike poukisa. Paske pwen nimewo de nan tès la se ke li ta yon bon lide yo tcheke sèvis ki kache nan chèk sante ou yo. Sa vle di ke si ou gen yon aplikasyon entènèt ki bay kèk enfòmasyon, ki an vire li, natirèlman, dwe pran soti nan yon kote. Nan yon baz done, pou egzanp. Oke, li sove enfòmasyon ki antre nan API REST sa a nan menm baz done a. Lè sa a, kòmsadwa, si chèk sante ou a reponn tou senpleman tankou kontakte slashhealth, aplikasyon an di "200, oke, tout bagay anfòm," epi an menm tan baz done aplikasyon w lan pa aksesib, epi aplikasyon Healthcheck la di "200, oke, tout bagay anfòm. ” - Sa a se yon chèk sante move. Sa a se pa ki jan li ta dwe travay.

Sa vle di, aplikasyon w lan, lè yon demann vini sou li /health, li pa jis reponn, "200, ok", li premye ale, pou egzanp, nan baz done a, eseye konekte ak li, fè yon bagay trè debaz la, tankou chwazi youn, jis tcheke ke gen yon koneksyon nan la. baz done epi ou ka mande baz done a. Si tout bagay sa yo te reyisi, Lè sa a, repons lan se "200, ok." Si li pa reyisi, li di ke gen yon erè, baz done a pa disponib.

Se poutèt sa, nan sans sa a, mwen ankò retounen nan tès yo Preparasyon / Liveness - poukisa ou gen plis chans bezwen yon tès preparasyon, men yon tès lavi se nan kesyon. Paske si ou dekri chèk sante egzakteman jan mwen sot di a, Lè sa a, li pral tounen ke li pa disponib nan pati nan egzanp.в или со всех instancenan yon baz done, pou egzanp. Lè ou te deklare yon tès preparasyon, chèk sante nou yo te kòmanse echwe, epi kòmsadwa tout aplikasyon ki soti nan ki baz done a pa aksesib, yo tou senpleman fèmen nan balanse epi an reyalite "kwoke" jis nan yon eta neglije epi tann pou baz done yo. travay.

Si nou te deklare yon tès vivan, alò imajine, baz done nou an te kase, ak nan Kubernetes ou mwatye nan tout bagay kòmanse rekòmanse paske tès la vivan echwe. Sa vle di ou bezwen rekòmanse. Sa a se pa nan tout sa ou vle, mwen menm te gen eksperyans pèsonèl nan pratik. Nou te gen yon aplikasyon chat ki te ekri nan JS ak nouri nan yon baz done Mongo. Ak pwoblèm nan te ke li te nan kòmansman an nan travay mwen ak Kubernetes, nou dekri preparasyon an, vivan nan tès sou prensip la ke Kubernetes ka fè li, kidonk nou pral sèvi ak li. An konsekans, nan kèk pwen Mongo te vin yon ti kras "mat" ak echantiyon an te kòmanse echwe. An konsekans, dapre tès lapli a, gous yo te kòmanse "touye".

Kòm ou konprann, lè yo "touye", sa a se yon chat, se sa ki, gen yon anpil nan koneksyon soti nan kliyan pandye sou li. Yo tou "touye" - non, pa kliyan, sèlman koneksyon - pa tout an menm tan an, ak akòz lefèt ke yo pa touye an menm tan an, kèk pi bonè, kèk pita, yo pa kòmanse nan menm bagay la. tan. Plis estanda o aza, nou pa ka predi ak presizyon milisgond lè aplikasyon an kòmanse chak fwa, kidonk yo fè li yon egzanp nan yon moman. Yon sèl infospot monte, se ajoute nan balans lan, tout kliyan vin la, li pa ka kenbe tèt ak yon chaj konsa, paske li se poukont li, epi, apeprè pale, gen yon douzèn nan yo k ap travay la, epi li tonbe. Pwochen an leve, tout chay la sou li, li tonbe tou. Oke, sa yo tonbe jis kontinye kaskad. Nan fen a, ki jan sa a te rezoud - nou jis te oblije estrikteman sispann trafik itilizatè nan aplikasyon sa a, kite tout ka monte ak Lè sa a, kòmanse tout trafik itilizatè alafwa pou ke li te deja distribye nan tout dis ka.

Si se pa t 'tès vivan sa a te anonse, ki ta fòse li tout rekòmanse, aplikasyon an ta okipe li jis byen. Men, tout bagay soti nan balanse enfim pou nou, paske baz done yo inaksesib ak tout itilizatè yo te "tonbe". Lè sa a, lè baz done sa a vin disponib, tout bagay enkli nan balanse, men aplikasyon yo pa bezwen kòmanse ankò, epi pa gen okenn bezwen gaspiye tan ak resous sou sa a. Yo tout deja isit la, yo pare pou trafik, kidonk trafik jis ouvè, tout bagay anfòm - aplikasyon an an plas, tout bagay ap kontinye travay.

Se poutèt sa, tès preparasyon pou ak lavi yo diferan, menm anplis, ou ka teyorikman fè diferan chèk sante, yon sèl kalite reyon, yon sèl kalite liv, pou egzanp, epi tcheke bagay diferan. Pandan tès preparasyon pou, tcheke backend ou yo. Ak sou yon tès liveness, pou egzanp, ou pa tcheke nan pwen de vi ke tès la liveness se jeneralman jis yon aplikasyon reponn, si li se kapab reponn nan tout.

Paske tès lavi a, an jeneral, se lè nou “bloke”. Yon bouk kontinuèl te kòmanse oswa yon lòt bagay - epi pa gen okenn demann plis yo trete. Se poutèt sa, li fè sans yo menm separe yo - epi aplike lojik diferan nan yo.

Konsènan sa ou bezwen reponn lè ou fè yon tès, lè ou fè chèk sante. Se jis vrèman yon doulè. Moun ki abitye ak sa a pral pwobableman ri - men seryezman, mwen te wè sèvis nan lavi mwen ki reponn "200" nan XNUMX% nan ka yo. Sa vle di, ki moun ki gen siksè. Men, an menm tan an nan kò a nan repons lan yo ekri "sa yo ak tankou yon erè."

Sa vle di, sitiyasyon repons lan vin jwenn ou - tout bagay gen siksè. Men, an menm tan, ou dwe analize kò a, paske kò a di "rekize, demann lan te fini ak yon erè" e sa a se jis reyalite. Mwen te wè sa nan lavi reyèl.

Epi pou kèk moun pa jwenn li komik, ak lòt moun jwenn li trè douloure, li toujou vo konfòme yo ak yon règ senp. Nan chèk sante, ak nan prensip lè w ap travay ak aplikasyon entènèt.

Si tout bagay ale byen, Lè sa a, reponn ak repons lan de santyèm. Nan prensip, nenpòt repons de-santyèm ap adapte ou. Si w li ragsy trè byen epi w konnen kèk sitiyasyon repons diferan de lòt, reponn ak sa ki apwopriye yo: 204, 5, 10, 15, kèlkeswa sa. Si li pa trè bon, Lè sa a, jis "de zewo zewo." Si tout bagay ale mal epi chèk sante a pa reponn, Lè sa a, reponn ak nenpòt senkantyèm. Yon fwa ankò, si ou konprann kijan pou reponn, ki jan diferan sitiyasyon repons diferan youn ak lòt. Si ou pa konprann, Lè sa a, 502 se opsyon ou reponn a chèk sante si yon bagay ale mal.

Sa a se yon lòt pwen, mwen vle retounen yon ti kras sou tcheke sèvis yo kache. Si ou kòmanse, pou egzanp, tcheke tout sèvis kache ki kanpe dèyè aplikasyon w lan - tout bagay an jeneral. Ki sa nou jwenn nan pwen de vi nan achitekti mikwosèvis, nou gen yon konsèp tankou "kouplage ba" - se sa ki, lè sèvis ou yo se yon minimòm depandan youn sou lòt. Si youn nan yo echwe, tout lòt yo san fonksyonalite sa a pral tou senpleman kontinye travay. Gen kèk nan fonksyonalite a jis pa travay. An konsekans, si ou mare tout chèk sante yo youn ak lòt, Lè sa a, ou pral fini ak yon sèl bagay echwe nan enfrastrikti a, epi paske li te tonbe, tout chèk sante yo nan tout sèvis yo tou kòmanse echwe - e gen plis enfrastrikti an jeneral pou la. tout achitekti mikwosèvis No. Tout bagay te fè nwa la.

Se poutèt sa, mwen vle repete sa a ankò ke ou bezwen tcheke sèvis yo kache, sa yo san yo pa ki aplikasyon w lan nan yon santèn pousan nan ka pa ka fè travay li. Sa vle di, li lojik ke si ou gen yon API REST atravè ki itilizatè a sove nan baz done a oswa rekipere nan baz done a, Lè sa a, nan absans yon baz done, ou pa ka garanti travay ak itilizatè ou yo.

Men, si itilizatè ou yo, lè ou retire yo nan baz done a, yo anplis rich ak kèk lòt metadata, ki soti nan yon lòt backend, ke ou antre anvan ou voye yon repons nan frontend la - epi backend sa a pa disponib, sa vle di ke ou bay ou. reponn san okenn pati nan metadata yo.

Apre sa, nou gen tou youn nan pwoblèm ki fè lapenn lè lanse aplikasyon yo.

An reyalite, sa a pa sèlman aplike nan Kubernetes an jeneral, se konsa ki te rive ke kilti a nan yon kalite devlopman mas ak DevOps an patikilye te kòmanse gaye nan menm tan an ak Kubernetes. Se poutèt sa, an jeneral, li sanble ke ou bezwen avèk grasye fèmen aplikasyon w lan san Kubernetes. Menm anvan Kubernetes, moun te fè sa, men ak avenman Kubernetes, nou te kòmanse pale sou li an masse.

Grasyeuz fèmen

An jeneral, ki sa ki Graceful Shutdown e poukisa li nesesè? Sa a se sou lè aplikasyon w lan aksidan pou kèk rezon, ou bezwen fè app stop - oswa ou resevwa, pou egzanp, yon siyal nan sistèm operasyon an, aplikasyon w lan dwe konprann li epi fè yon bagay sou li. Pi move senaryo a, nan kou, se lè aplikasyon w lan resevwa yon SIGTERM epi li se tankou "SIGTERM, ann kenbe, travay, pa fè anyen." Sa a se yon opsyon kareman move.

Kondisyon pou devlope yon aplikasyon nan Kubernetes

Yon opsyon prèske egalman move se lè aplikasyon w lan resevwa yon SIGTERM epi li se tankou "yo te di segterm, sa vle di nou ap fini, mwen pa te wè, mwen pa konnen okenn demann itilizatè, mwen pa konnen ki kalite demann. demann mwen ap travay sou kounye a, yo te di SIGTERM, sa vle di nou ap fini " Sa a se tou yon move opsyon.

Ki opsyon ki bon? Premye pwen an se pran an kont fini operasyon yo. Yon bon opsyon se pou sèvè ou toujou pran an kont sa li fè si li resevwa yon SIGTERM.

SIGTERM se yon fèmen mou, li fèt espesyalman, li ka entèsepte nan nivo kòd, li ka trete, di ke kounye a, rete tann, nou pral premye fini travay la ke nou genyen, Lè sa a, nou pral sòti.

Soti nan yon pèspektiv Kubernetes, sa a se sa li sanble. Lè nou di yon gous ki ap kouri nan gwoup Kubernetes la, "tanpri sispann, ale," oswa nou rekòmanse, oswa yon aktyalizasyon rive lè Kubernetes rkree gous yo, Kubernetes voye jis menm mesaj SIGTERM nan gous la, tann pou kèk tan, ak , sa a se tan an ke li tann, li se tou configuré, gen tankou yon paramèt espesyal nan diplòm epi li rele Graceful ShutdownTimeout. Kòm ou konprann, li pa rele sa pou anyen, epi se pa pou anyen ke nou ap pale sou li kounye a.

La nou ka espesyalman di konbyen tan nou bezwen tann ant lè nou voye SIGTERM nan aplikasyon an ak lè nou konprann ke aplikasyon an sanble te ale fou pou yon bagay oswa li "kole" epi li pa pral fini - epi nou bezwen. voye li SIGKILL, sa vle di, di konplete travay li. Sa se, kòmsadwa, nou gen kèk kalite daemon kouri, li trete operasyon yo. Nou konprann ke an mwayèn operasyon nou yo ke demon an ap travay sou yo pa dire plis pase 30 segonn nan yon moman. An konsekans, lè SIGTERM rive, nou konprann ke demon nou an ka, nan maksimòm, fini 30 segonn apre SIGTERM. Nou ekri li, pou egzanp, 45 segonn jis nan ka epi di ke SIGTERM. Apre sa nou tann 45 segonn. Nan teyori, pandan tan sa a demon an ta dwe fini travay li epi li te fini tèt li. Men, si toudenkou li pa t 'kapab, sa vle di li gen plis chans kole-li pa trete demann nou yo nòmalman. Ak nan 45 segonn ou ka san danje, an reyalite, kloure l 'desann.

Ak isit la, an reyalite, menm 2 aspè yo ka pran an kont. Premyèman, konprann ke si ou te resevwa yon demann, ou te kòmanse travay avèk li yon jan kanmenm epi yo pa bay yon repons bay itilizatè a, men ou te resevwa SIGTERM, pou egzanp. Li fè sans pou rafine li epi bay itilizatè a yon repons. Sa a se pwen nimewo en nan sans sa a. Pwen nimewo de isit la se ke si ou ekri aplikasyon pwòp ou a, jeneralman bati achitekti a nan yon fason ke ou resevwa yon demann pou aplikasyon w lan, Lè sa a, ou kòmanse kèk travay, kòmanse telechaje dosye soti nan yon kote, telechaje yon baz done, ak lòt bagay. Sa. An jeneral, itilizatè ou an, demann ou an pandye pou yon demi èdtan epi tann pou ou reponn li - Lè sa a, gen plis chans, ou bezwen travay sou achitekti la. Sa vle di, jis pran an kont menm sans komen ke si operasyon ou yo kout, Lè sa a, li fè sans pou inyore SIGTERM ak modifye li. Si operasyon ou yo long, Lè sa a, li pa gen okenn sans inyore SIGTERM nan ka sa a. Li fè sans pou redesign achitekti a pou evite operasyon long sa yo. Se konsa ke itilizatè yo pa jis pann alantou epi tann. Mwen pa konnen, fè kèk kalite websocket la, fè kwòk ranvèse ke sèvè ou a pral deja voye bay kliyan an, nenpòt lòt bagay, men pa fòse itilizatè a pann pou yon demi èdtan epi jis tann pou yon sesyon jiskaske ou. reponn li. Paske li se enprevizib kote li ta ka kraze.

Lè aplikasyon w lan fini, ou ta dwe bay kèk kòd sòti apwopriye. Sa vle di, si yo te mande aplikasyon w la fèmen, sispann, epi li te kapab sispann tèt li nòmalman, Lè sa a, ou pa bezwen retounen kèk kalite kòd sòti 1,5,255 ak sou sa. Nenpòt bagay ki pa zewo kòd, omwen nan sistèm Linux, mwen sèten de sa, konsidere kòm san siksè. Sa vle di, yo konsidere ke aplikasyon w lan nan ka sa a te fini ak yon erè. An konsekans, nan yon fason amikal, si aplikasyon w lan ranpli san yon erè, ou di 0 sou pwodiksyon an. Si aplikasyon w lan echwe pou kèk rezon, ou di non-0 nan pwodiksyon an. Epi ou ka travay ak enfòmasyon sa a.

Ak dènye opsyon an. Li pa bon lè itilizatè ou an voye yon demann ak pandye pou yon demi èdtan pandan w ap trete li. Men, an jeneral, mwen ta renmen tou di sou sa ki jeneralman vo li nan men kliyan an. Li pa enpòtan si ou gen yon aplikasyon mobil, front-end, elatriye. Li nesesè pran an kont ke an jeneral sesyon itilizatè a ka sispann, anyen ka rive. Yo ka voye yon demann, pou egzanp, pa trete epi pa gen okenn repons retounen. Entèfas ou oswa aplikasyon mobil ou a - nenpòt entèfas an jeneral, ann mete l konsa - ta dwe pran sa an kont. Si w ap travay ak websockets, sa a se jeneralman pi move doulè mwen te janm genyen.

Lè devlopè yo nan kèk chat regilye pa konnen ke, li vire soti, websocket la ka kraze. Pou yo, lè yon bagay rive nan proxy a, nou jis chanje konfigirasyon an, epi li fè yon rechaje. Natirèlman, tout sesyon ki dire lontan yo chire nan ka sa a. Devlopè vin kouri vin jwenn nou epi yo di: "Mesye, kisa w ap fè, chat la te kraze pou tout kliyan nou yo!" Nou di yo: “Kisa w ap fè? Èske kliyan ou yo pa kapab rekonekte? Yo di: "Non, nou bezwen sesyon yo pa chire." Nan ti bout tan, sa a se aktyèlman istwa san sans. Bò kote kliyan an ta dwe pran an kont. Espesyalman, jan mwen di, ak sesyon ki dire lontan tankou websockets, li ka kraze epi, inapèsi pa itilizatè a, ou bezwen pou kapab reenstale sesyon sa yo. Lè sa a, tout bagay pafè.

Resous

Aktyèlman, isit la mwen pral jis di ou yon istwa dwat. Yon fwa ankò soti nan lavi reyèl. Bagay ki pi malad mwen te janm tande sou resous yo.

Resous nan ka sa a, mwen vle di kèk kalite demann, limit ke ou ka mete sou gous nan grap Kubernetes ou yo. Bagay ki pi komik mwen tande nan men yon devlopè... Youn nan devlopè parèy mwen yo nan yon kote travay anvan te di yon fwa: "Aplikasyon mwen an pa pral kòmanse nan gwoup la." Mwen te gade pou wè ke li pa t 'kòmanse, men swa li pa t 'anfòm nan resous yo, oswa yo te mete limit anpil ti. Nan ti bout tan, aplikasyon an pa ka kòmanse akòz resous yo. Mwen di: "Li pa pral kòmanse akòz resous, ou deside konbyen lajan ou bezwen epi mete yon valè adekwa." Li di: "Ki kalite resous?" Mwen te kòmanse eksplike li ke Kubernetes, limit sou demann ak bla, bla, bla bezwen mete. Mesye a te koute senk minit, li souke tèt li epi li di: “Mwen vin isit la pou m travay kòm yon pwomotè, mwen pa vle konnen anyen sou okenn resous. Mwen te vin isit la pou m ekri kòd e sa se li. Li tris. Sa a se yon konsèp trè tris nan pwen de vi yon pwomotè. Espesyalman nan mond lan modèn, se konsa pale, nan devops pwogresif.

Poukisa resous yo bezwen ditou? Gen 2 kalite resous nan Kubernetes. Gen kèk yo rele demann, lòt yo rele limit. Pa resous nou pral konprann ke gen fondamantalman toujou sèlman de restriksyon debaz yo. Sa vle di, limit tan CPU ak limit RAM pou yon veso ki kouri nan Kubernetes.

Limit la mete yon limit siperyè sou fason yo ka itilize yon resous nan aplikasyon w lan. Sa vle di, kòmsadwa, si ou di 1GB RAM nan limit yo, Lè sa a, aplikasyon w lan p ap kapab sèvi ak plis pase 1GB RAM. Men, si li toudenkou vle epi eseye fè sa, Lè sa a, yon pwosesis ki rele oom asasen, soti nan memwa, se sa ki, ap vini epi touye aplikasyon w lan - se sa ki, li pral tou senpleman rekòmanse. Aplikasyon yo pa pral rekòmanse baze sou CPU. An tèm de CPU, si yon aplikasyon eseye sèvi ak anpil, plis pase sa ki espesifye nan limit yo, CPU a pral tou senpleman dwe entèdi chwazi. Sa a pa mennen nan rekòmanse. Sa a se limit la - sa a se limit la anwo.

E gen yon demann. Yon demann se fason Kubernetes konprann ki jan nœuds yo nan gwoup Kubernetes ou yo peple ak aplikasyon yo. Sa vle di, yon demann se yon kalite komite aplikasyon w lan. Li di sa mwen vle itilize: "Mwen ta renmen ou rezève anpil CPU sa a ak anpil memwa sa a pou mwen." Tankou yon senp analoji. E si nou gen yon ne ki gen, mwen pa konnen, 8 CPU nan total. Ak yon gous rive la, ki gen demann di 1 CPU, ki vle di ne la gen 7 CPU kite. Sa vle di, kòmsadwa, le pli vit ke 8 gous rive nan ne sa a, chak nan yo ki gen 1 CPU nan demann yo, ne a, kòm si soti nan pwen de vi nan Kubernetes, te kouri soti nan CPU ak plis gous ak demann pa kapab. te lanse sou ne sa a. Si tout nœuds yo fini nan CPU, Lè sa a, Kubernetes pral kòmanse di ke pa gen okenn nœuds apwopriye nan gwoup la pou kouri gous ou paske CPU a fini.

Poukisa demann yo nesesè e poukisa san demann, mwen panse ke pa gen okenn bezwen lanse anyen nan Kubernetes? Ann imajine yon sitiyasyon ipotetik. Ou lanse aplikasyon w lan san demann, Kubernetes pa konnen ki kantite nan sa ou genyen, ki nœuds ou ka pouse l. Oke, li pouse, pouse, pouse sou nœuds yo. Nan kèk pwen, ou pral kòmanse jwenn trafik nan aplikasyon w lan. Ak youn nan aplikasyon yo toudenkou kòmanse sèvi ak resous jiska limit yo ke li genyen dapre limit yo. Li sanble ke gen yon lòt aplikasyon tou pre epi li bezwen tou resous. Ne la aktyèlman kòmanse fizikman kouri soti nan resous, pou egzanp, OP. Ne la aktyèlman kòmanse fizikman kouri soti nan resous, pou egzanp, memwa aksè o aza (RAM). Lè yon ne kouri soti nan pouvwa, premye nan tout docker a ap sispann reponn, Lè sa a, cubelet la, Lè sa a, OS la. Yo pral tou senpleman ale san konesans ak TOUT pral definitivman sispann travay pou ou. Sa vle di, sa ap mennen nan ne ou bloke epi w ap bezwen rekòmanse li. Nan ti bout tan, sitiyasyon an pa trè bon.

Men, lè ou gen demann, limit yo pa trè diferan, omwen pa anpil fwa plis pase limit yo oswa demann, Lè sa a, ou ka gen tankou yon nòmal, ranpli rasyonèl nan aplikasyon atravè nœuds nan grap Kubernetes. An menm tan an, Kubernetes se apeprè okouran de konbyen nan sa li mete kote, ki kantite nan sa ki itilize kote. Sa vle di, se jis yon moman konsa. Li enpòtan pou w konprann li. Epi li enpòtan pou kontwole ke sa a se endike.

Done depo

Pwochen pwen nou an se sou depo done. Ki sa ki fè ak yo ak an jeneral, ki sa yo dwe fè ak pèsistans yap ogmante jiska nan Kubernetes?

Mwen panse, ankò, nan nou an Lekòl Aswè, te gen yon sijè sou baz done a nan Kubernetes. E mwen sanble ke mwen menm apeprè konnen sa kòlèg ou yo te di ou lè yo te mande: "Èske li posib pou kouri yon baz done nan Kubernetes?" Pou kèk rezon, mwen sanble ke kòlèg ou yo ta dwe di ou ke si w ap mande kesyon an si li posib pou kouri yon baz done nan Kubernetes, Lè sa a, li enposib.

Lojik la isit la se senp. Jis nan ka, mwen pral eksplike yon lòt fwa ankò, si ou se yon nèg reyèlman fre ki ka bati yon sistèm san patipri toleran nan depo rezo distribiye, konprann ki jan yo anfòm yon baz done nan ka sa a, ki jan nwaj natif natal nan resipyan ta dwe travay. nan yon baz done an jeneral. Gen plis chans, ou pa gen okenn kesyon sou ki jan yo kouri li. Si ou gen yon kesyon konsa, epi ou vle asire w ke li tout dewoulman ak kanpe dwat nan lanmò nan pwodiksyon epi pa janm tonbe, Lè sa a, sa a pa rive. Ou garanti pou tire tèt ou nan pye ak apwòch sa a. Se poutèt sa, li pi bon pa fè sa.

Kisa nou ta dwe fè ak done aplikasyon nou an ta renmen estoke, kèk foto itilizatè yo telechaje, kèk bagay ke aplikasyon nou an jenere pandan operasyon li, nan demaraj, pa egzanp? Ki sa ki fè ak yo nan Kubernetes?

An jeneral, depreferans, wi, nan kou, Kubernetes trè byen fèt e li te jeneralman okòmansman vin ansent pou aplikasyon apatrid. Sa vle di, pou aplikasyon sa yo ki pa estoke enfòmasyon ditou. Sa a se ideyal.

Men, nan kou, opsyon ideyal la pa toujou egziste. Se konsa, sa? Pwen an premye ak pi senp se pran kèk kalite S3, jis pa yon sèl ki fèt lakay ou, ki se tou klè ki jan li fonksyone, men soti nan kèk founisè. Yon founisè bon, nòmal - epi anseye aplikasyon w lan pou itilize S3. Sa vle di, lè itilizatè ou an vle telechaje yon fichye, di "isit la, tanpri, telechaje li nan S3." Lè li vle resevwa li, di: "Men yon lyen ki mennen nan S3 tounen epi pran li soti isit la." Sa a se ideyal.

Si toudenkou pou kèk rezon opsyon ideyal sa a pa apwopriye, ou gen yon aplikasyon ke ou pa t 'ekri, ou pa devlope, oswa li se yon kalite eritaj terib, li pa ka sèvi ak pwotokòl S3 la, men li dwe travay ak repèrtwar lokal yo. dosye lokal yo. Pran yon bagay plis oswa mwens senp, deplwaye Kubernetes. Sa vle di, imedyatman kloti Ceph pou kèk travay minim, mwen sanble, se yon move lide. Paske Ceph, nan kou, se bon ak alamòd. Men, si ou pa reyèlman konprann sa w ap fè, Lè sa a, yon fwa ou mete yon bagay sou Ceph, ou ka trè fasil epi tou senpleman pa janm jwenn li soti nan la ankò. Paske, jan ou konnen, Ceph estoke done nan gwoup li yo nan fòm binè, epi yo pa nan fòm nan nan dosye senp. Se poutèt sa, si toudenkou gwoup Ceph la kraze, Lè sa a, gen yon pwobabilite konplè ak segondè ke ou p ap janm jwenn done ou soti nan la ankò.

Nou pral gen yon kou sou Ceph, ou kapab familyarize w ak pwogram nan epi soumèt yon aplikasyon.

Se poutèt sa, li pi bon fè yon bagay senp tankou yon sèvè NFS. Kubernetes ka travay avèk yo, ou ka monte yon anyè anba yon sèvè NFS - aplikasyon w lan se jis tankou yon anyè lokal. An menm tan an, natirèlman, ou bezwen konprann ke, ankò, ou bezwen fè yon bagay ak NFS ou a, ou bezwen konprann ke pafwa li ka vin aksesib epi konsidere kesyon an nan sa ou pral fè nan ka sa a. Petèt li ta dwe fè bak yon kote sou yon machin separe.

Pwen nan pwochen mwen te pale sou se sa yo dwe fè si aplikasyon w lan jenere kèk dosye pandan operasyon an. Pou egzanp, lè li kòmanse, li jenere kèk fichye estatik, ki baze sou kèk enfòmasyon ke aplikasyon an resevwa sèlman nan moman lansman an. Ala yon ti moman. Si pa gen anpil done sa yo, Lè sa a, ou pa bezwen deranje ditou, jis enstale aplikasyon sa a pou tèt ou ak travay. Sèl kesyon isit la se sa, gade. Trè souvan, tout kalite sistèm eritaj, tankou WordPress ak sou sa, espesyalman ak modifye kèk kalite grefon entelijan, devlopè PHP entelijan, yo souvan konnen ki jan fè li pou yo jenere kèk kalite dosye pou tèt yo. An konsekans, youn jenere yon dosye, dezyèm lan jenere yon dezyèm dosye. Yo diferan. Balanse rive nan gwoup Kubernetes kliyan yo tou senpleman pa chans. An konsekans, li sanble ke yo pa konnen ki jan yo travay ansanm nan egzanp. Youn bay yon enfòmasyon, lòt la bay itilizatè a yon lòt enfòmasyon. Sa a se yon bagay ou ta dwe evite. Sa vle di, nan Kubernetes, tout bagay ou lanse garanti pou kapab travay nan plizyè ka. Paske Kubernetes se yon bagay k ap deplase. An konsekans, li ka deplase nenpòt bagay, nenpòt lè li vle, san yo pa mande pèsonn ditou. Se poutèt sa, ou bezwen konte sou sa a. Tout bagay ki te lanse nan yon egzanp pral echwe pi bonè oswa pita. Plis rezèvasyon ou genyen, se pi bon. Men, ankò, mwen di, si ou gen kèk dosye sa yo, Lè sa a, ou ka mete yo dwa anba ou, yo peze yon ti kantite. Si gen yon ti kras plis nan yo, pwobableman ou pa ta dwe pouse yo andedan veso a.

Mwen ta konseye ke gen tankou yon bagay bèl bagay nan Kubernetes, ou ka itilize volim. An patikilye, gen yon volim nan kalite dir vid. Sa vle di, se jis ke Kubernetes pral otomatikman kreye yon anyè nan anyè sèvis li yo sou sèvè kote ou te kòmanse a. Apre sa, l'ap ba ou li pou ou ka sèvi ak li. Gen yon sèl pwen enpòtan. Sa vle di, done ou yo pa pral estoke andedan veso a, men pito sou lame sou kote w ap kouri. Anplis, Kubernetes ka kontwole dis vid sa yo anba konfigirasyon nòmal epi li kapab kontwole gwosè maksimòm yo epi yo pa pèmèt li depase. Sèl pwen an se ke sa ou te ekri nan dir vid pa pèdi pandan rekòmanse pod. Sa vle di, si gous ou tonbe pa erè epi li leve ankò, enfòmasyon ki nan dir vid la p ap ale nenpòt kote. Li ka sèvi ak li ankò nan yon nouvo kòmansman - e sa bon. Si gous ou a kite yon kote, Lè sa a, natirèlman li pral kite san done. Sa vle di, le pli vit ke gous ki soti nan ne kote li te lanse ak dir vid disparèt, dir vid yo efase.

Ki lòt bagay ki bon sou dir vid? Pou egzanp, li ka itilize kòm yon kachèt. Ann imajine ke aplikasyon nou an jenere yon bagay sou vole, li bay itilizatè yo, epi fè li pou yon tan long. Se poutèt sa, aplikasyon an, pou egzanp, jenere epi li bay itilizatè yo, epi an menm tan an estoke li yon kote, se konsa ke pwochen fwa itilizatè a vini pou menm bagay la, li pral pi vit bay li imedyatman pwodwi. Vid dir ka mande Kubernetes pou kreye nan memwa. Se konsa, kachèt ou ka jeneralman travay nan vitès zèklè - an tèm de vitès aksè ki gen kapasite. Sa vle di, ou gen yon dir vid nan memwa, nan eksplwatasyon an li estoke nan memwa, men pou ou, pou itilizatè a andedan gous la, li sanble jis yon anyè lokal. Ou pa bezwen aplikasyon an espesyalman anseye nenpòt maji. Ou jis dirèkteman pran epi mete dosye ou nan yon anyè, men, an reyalite, nan memwa sou eksplwatasyon an. Sa a se tou yon karakteristik trè pratik an tèm de Kubernetes.

Ki pwoblèm Minio genyen? Pwoblèm prensipal ki genyen ak Minio se ke nan lòd pou bagay sa a travay, li bezwen yo dwe kouri yon kote, epi yo dwe gen kèk kalite sistèm dosye, se sa ki, depo. Epi la a nou rankontre menm pwoblèm ke Ceph genyen. Sa vle di, Minio dwe estoke dosye li yo yon kote. Li se tou senpleman yon koòdone HTTP nan dosye ou yo. Anplis, fonksyonalite a klèman pi pòv pase S3 Amazon an. Précédemment, li pa t 'kapab byen otorize itilizatè a. Koulye a, jan mwen konnen, li ka deja kreye bokit ak otorizasyon diferan, men ankò, li sanble m 'ke pwoblèm prensipal la se, se konsa pale, sistèm nan depo kache nan yon minimòm.

Ki jan Vide dir nan memwa afekte limit yo? Pa afekte limit nan okenn fason. Li manti nan memwa nan lame a, epi yo pa nan memwa a nan veso ou a. Sa vle di, veso ou a pa wè dir vid la nan memwa kòm yon pati nan memwa okipe li. Lame a wè sa. An konsekans, wi, nan pwen de vi kubernetes, lè ou kòmanse itilize sa a, li ta bon pou w konprann ke w ap konsakre yon pati nan memwa ou a vid vid. Ak kòmsadwa, konprann ke memwa ka kouri soti pa sèlman paske nan aplikasyon, men tou, paske yon moun ekri sa yo dirs vid.

Cloudnativeness

Ak dènye subtopic la se sa Cloudnative ye. Poukisa li nesesè? Cloudnativeness ak sou sa.

Sa vle di, aplikasyon sa yo ki kapab ak ekri yo nan lòd yo travay nan yon enfrastrikti nwaj modèn. Men, an reyalite, Cloudnative gen yon lòt aspè sa yo. Sa a se pa sèlman yon aplikasyon ki pran an kont tout kondisyon ki nan yon enfrastrikti nwaj modèn, men tou, konnen ki jan yo travay ak sa a enfrastrikti nwaj modèn, pran avantaj de avantaj yo ak dezavantaj nan lefèt ke li travay nan nwaj sa yo. Pa jis ale pi lwen ak travay nan nwaj yo, men pwofite avantaj ki genyen nan travay nan nwaj la.

Kondisyon pou devlope yon aplikasyon nan Kubernetes

Ann jis pran Kubernetes kòm yon egzanp. Aplikasyon w lan ap kouri nan Kubernetes. Aplikasyon ou a ka toujou, oswa pito admin yo pou aplikasyon w lan, ka toujou kreye yon kont sèvis. Sa vle di, yon kont pou otorizasyon nan Kubernetes tèt li nan sèvè li yo. Ajoute kèk dwa ke nou bezwen la. Epi ou ka jwenn aksè nan Kubernetes nan aplikasyon w lan. Kisa ou ka fè konsa? Pou egzanp, nan aplikasyon an, resevwa done sou kote lòt aplikasyon ou yo, lòt sikonstans ki sanble yo sitiye, ak ansanm yon jan kanmenm gwoup sou tèt Kubernetes, si gen yon bezwen sa yo.

Ankò, nou literalman te gen yon ka dènyèman. Nou gen yon sèl kontwolè ki kontwole keu a. Epi lè kèk nouvo travay parèt nan keu sa a, li ale nan Kubernetes - ak andedan Kubernetes li kreye yon nouvo gous. Bay gous sa a kèk nouvo travay ak nan kad gous sa a, gous la fè travay la, voye yon repons bay kontwolè a li menm, ak kontwolè a Lè sa a, fè yon bagay ak enfòmasyon sa a. Pou egzanp, li ajoute moute yon baz done. Sa se, ankò, sa a se yon plis nan lefèt ke aplikasyon nou an kouri nan Kubernetes. Nou ka sèvi ak fonksyonalite Kubernetes entegre nan tèt li yo nan lòd yo yon jan kanmenm elaji epi fè fonksyonalite a nan aplikasyon nou an pi pratik. Sa vle di, pa kache kèk kalite majik sou ki jan yo lanse yon aplikasyon, ki jan yo lanse yon travayè. Nan Kubernetes, ou tou senpleman voye yon demann nan app a si aplikasyon an ekri nan Python.

Menm bagay la tou aplike si nou ale pi lwen pase Kubernetes. Nou gen Kubernetes nou yo kouri yon kote - li bon si li nan yon kalite nwaj. Yon fwa ankò, nou ka itilize, e menm ta dwe, mwen kwè, sèvi ak kapasite yo nan nwaj la tèt li kote nou ap kouri. Soti nan bagay elemantè yo ke nwaj la bay nou. Balanse, se sa ki, nou ka kreye nwaj balans epi sèvi ak yo. Sa a se yon avantaj dirèk nan sa nou ka itilize. Paske nwaj balanse, premyèman, tou senpleman estipid retire responsablite nan men nou pou jan li fonksyone, ki jan li se configuré. Anplis de sa, li trè pratik, paske Kubernetes regilye ka entegre ak nwaj yo.

Menm bagay la tou ale pou dekale. Kubernetes regilye ka entegre ak founisè nwaj yo. Konnen kijan pou konprann ke si gwoup la fini nan nœuds, se sa ki, espas nœud la fini, Lè sa a, ou bezwen ajoute - Kubernetes tèt li pral ajoute nouvo nœuds nan gwoup ou a epi kòmanse lanse gous sou yo. Sa vle di, lè chaj ou a vini, kantite fwaye kòmanse ogmante. Lè nœuds yo nan gwoup la fini pou gous sa yo, Kubernetes lanse nouvo nœuds epi, kòmsadwa, kantite gous yo ka toujou ogmante. Epi li trè pratik. Sa a se yon opòtinite dirèk nan echèl gwoup la sou vole. Pa trè vit, nan sans ke li pa yon segonn, li plis tankou yon minit yo nan lòd yo ajoute nouvo nœuds.

Men, nan eksperyans mwen, ankò, li nan bagay ki pi fre mwen te janm wè. Lè grap Cloudnative a te ogmante selon lè nan jounen an. Se te yon sèvis backend ki te itilize pa moun ki nan biwo a. Sa vle di, yo vin travay a 9 am, yo kòmanse konekte nan sistèm nan, ak kòmsadwa, gwoup la Cloudnative, kote li nan tout kouri, kòmanse anfle, lanse nouvo gous pou tout moun ki vin travay ka travay ak aplikasyon an. Lè yo kite travay a 8 pm oswa 6 pm, gwoup Kubernetes yo remake ke pèsonn pa sèvi ak aplikasyon an ankò epi yo kòmanse retresi. Ekonomi jiska 30 pousan yo garanti. Li te travay nan Amazon nan epòk sa a pa te gen okenn moun nan Larisi ki te kapab fè li byen.

Mwen pral di ou tou dwat, ekonomi yo se 30 pousan tou senpleman paske nou itilize Kubernetes ak pwofite kapasite yo nan nwaj la. Koulye a, sa a ka fè nan Larisi. Mwen pa pral fè piblisite pou nenpòt moun, nan kou, men an n jis di ke gen founisè ki ka fè sa, bay li dwat soti nan bwat la ak yon bouton.

Gen yon dènye pwen ke mwen ta renmen tou atire atansyon w sou. Pou aplikasyon w lan, enfrastrikti w la kapab Cloudnative, li fè sans pou finalman kòmanse adapte apwòch ki rele Infrastructure as a Code kòd Dekri aplikasyon w lan, lojik biznis ou sou fòm kòd. Ak travay ak li kòm kòd, se sa ki, teste li, woule li soti, estoke li nan git, aplike CICD sou li.

E se egzakteman sa ki pèmèt ou, premye, toujou gen kontwòl sou enfrastrikti ou, toujou konprann nan ki eta li ye. Dezyèmman, evite operasyon manyèl ki lakòz erè. Twazyèmman, evite tou senpleman sa yo rele woulman, lè ou toujou ap bezwen fè menm travay manyèl yo. Katriyèmman, li pèmèt ou refè pi vit nan evènman an nan yon echèk. Nan Larisi, chak fwa mwen pale sou sa a, toujou gen yon gwo kantite moun ki di: "Wi, li klè, men ou gen apwòch, nan ti bout tan, pa gen okenn bezwen ranje anyen." Men se vre. Si yon bagay kase nan enfrastrikti ou a, Lè sa a, nan pwen de vi nan apwòch la Cloudnative ak nan pwen de vi nan enfrastrikti kòm yon Kòd, olye ke repare li, ale nan sèvè a, n ap chèche konnen sa ki kase ak repare li, li pi fasil. efase sèvè a epi kreye li ankò. Apre sa, mwen pral fè tout bagay sa yo retabli.

Tout pwoblèm sa yo ap diskite an plis detay nan Kou videyo Kubernetes: Junior, Basic, Mega. Si w swiv lyen an ou ka familyarize w ak pwogram nan ak kondisyon yo. Bagay la pratik se ke ou ka metrize Kubernetes pa etidye nan kay oswa travay pou 1-2 èdtan nan yon jounen.

Sous: www.habr.com

Add nouvo kòmantè