Boiphihlelo ba rona ba ho theha mokhanni oa CSI ho Kubernetes bakeng sa Yandex.Cloud

Boiphihlelo ba rona ba ho theha mokhanni oa CSI ho Kubernetes bakeng sa Yandex.Cloud

Re thabetse ho phatlalatsa hore Flant e eketsa tlatsetso ea eona ho lisebelisoa tsa Open Source bakeng sa Kubernetes ka ho lokolla mofuta oa alpha oa mokhanni oa CSI (Sehokelo sa polokelo ea lijana) bakeng sa Yandex.Cloud.

Empa pele re fetela lintlheng tsa ts'ebetsong, a re arabe potso ea hore na ke hobane'ng ha sena se hlokahala ho hang ha Yandex e se e ntse e e-na le tšebeletso. Ts'ebeletso e Laolehileng bakeng sa Kubernetes.

Selelekela

Hobaneng ho le joalo?

Ka hare ho k'hamphani ea rona, ho tloha qalong ea ho sebelisa Kubernetes tlhahiso (e leng lilemo tse 'maloa hona joale), re ntse re iketsetsa sesebelisoa sa rona (deckhouse), eo, ka tsela, re rerileng ho e etsa haufinyane e le morero oa Open Source. . Ka thuso ea eona, re hlophisa le ho hlophisa lihlopha tsa rona ka mokhoa o ts'oanang, 'me hajoale ho se ho ntse ho e-na le tse fetang 100 tsa tsona, ka mefuta e mengata ea litlhophiso tsa hardware le litšebeletsong tsohle tsa maru tse fumanehang.

Lihlopha tse sebelisang deckhouse li na le likarolo tsohle tse hlokahalang bakeng sa ts'ebetso: li-balancers, ho shebella ka lichate tse bonolo, metrics le litlhokomeliso, netefatso ea basebelisi ka bafani ba kantle bakeng sa ho fihlella li-dashboards tsohle, joalo-joalo. Ha ho na lebaka la ho kenya sehlopha se joalo sa "pumped up" ka tharollo e laoloang, kaha hangata sena ha se khonehe kapa se tla lebisa tlhokahalo ea ho tima halofo ea likarolo.

NB: Ena ke phihlelo ea rona, 'me e totobetse haholo. Ho hang ha re khothaletse hore motho e mong le e mong a sebelise lihlopha tsa Kubernetes a le mong ho fapana le ho sebelisa litharollo tse seng li entsoe. Ka tsela, ha re na phihlelo ea sebele ea ho sebetsa Kubernetes ho tloha Yandex 'me re ke ke ra fana ka tlhahlobo ea tšebeletso ena sehloohong sena.

Ke eng hona bakeng sa bo-mang?

Kahoo, re se re buile ka mokhoa oa sejoale-joale oa polokelo ho Kubernetes: CSI e sebetsa joang? и kamoo sechaba se tlileng kateng ho mokhoa ona.

Hajoale, bafani ba bangata ba lits'ebeletso tse kholo tsa maru ba thehile bakhanni ba ho sebelisa li-disk tsa bona tsa maru joalo ka Persistent Volume ho Kubernetes. Haeba mofani oa thepa a se na mokhanni ea joalo, empa mesebetsi eohle e hlokahalang e fanoa ka API, joale ha ho letho le u thibelang ho kenya ts'ebetsong mokhanni ka boeena. Sena ke se etsahetseng ka Yandex.Cloud.

Re ile ra nka e le motheo oa tsoelopele Mokhanni oa CSI bakeng sa leru la DigitalOcean le mehopolo e 'maloa ho tloha ho bakhanni ba GCP, kaha ho sebelisana le API ea maru ana (Google le Yandex) ho na le lintho tse ngata tse tšoanang. Ka ho khetheha, API le GCP, le y Yandex khutlisetsa ntho Operation ho latela boemo ba ts'ebetso ea nako e telele (mohlala, ho theha disk e ncha). Ho sebelisana le Yandex.Cloud API, sebelisa Yandex.Cloud Go SDK.

Sephetho sa mosebetsi o entsoeng e hatisitsoeng ho GitHub 'me e ka ba molemo ho bao, ka mabaka a itseng, ba sebelisang ho kenya Kubernetes ea bona ho Yandex.Cloud virtual machines (empa e seng sehlopha se laoloang se lokiselitsoeng) mme ba ka rata ho sebelisa (ho laela) li-disk ka CSI.

Ts'ebetsong

Litšobotsi tsa bohlokoa

Hajoale mokhanni o tšehetsa mesebetsi e latelang:

  • Ho laela li-disk libakeng tsohle tsa sehlopha ho ea ka topology ea li-node ka har'a sehlopha;
  • Ho tlosa li-disk tse laetsoeng pele;
  • Resize ea Offline bakeng sa li-disk (Yandex.Cloud se tshehetse ho eketsa li-disk tse kentsoeng mochining oa sebele). Bakeng sa tlhaiso-leseling ea hore na mokhanni o ile a tlameha ho fetoloa joang ho etsa hore resizing e se be bohloko ka hohle kamoo ho ka khonehang, bona ka tlase.

Nakong e tlang, re rera ho kenya ts'ebetsong ts'ehetso bakeng sa ho theha le ho hlakola li-snapshots tsa disk.

Bothata bo ka sehloohong le mokhoa oa ho bo hlōla

Ho haella ha bokhoni ba ho eketsa li-disk ka nako ea sebele ho Yandex.Cloud API ke moeli o thatafatsang ts'ebetso ea resize bakeng sa PV (Persistent Volume): tabeng ena, ho hlokahala hore pod ea kopo e sebelisang disk e emisoe, 'me sena se ka baka lits'ebetso tsa ho fokotsa nako.

Ho ea ka Litlhaloso tsa CSI, haeba molaoli oa CSI a tlaleha hore a ka fetola boholo ba disk "offline" feela (VolumeExpansion.OFFLINE), joale ts'ebetso ea ho eketsa disk e lokela ho tsamaea ka tsela ena:

Haeba plugin e na le eona feela VolumeExpansion.OFFLINE katoloso bokgoni le bophahamo ba modumo hona joale hatisitsoeng kapa fumaneha ka node ka nako eo ControllerExpandVolume E TLAMEHA ho bitsoa FEELA ka mor'a e 'ngoe:

  • Plugin e na le molaoli PUBLISH_UNPUBLISH_VOLUME bokhoni le ControllerUnpublishVolume e kopile ka katleho.

KAPA TS'ENYANE

  • Plugin HA E na molaoli PUBLISH_UNPUBLISH_VOLUME bokhoni, plugin e na le node STAGE_UNSTAGE_VOLUME bokhoni, le NodeUnstageVolume e phethetsoe ka katleho.

KAPA TS'ENYANE

  • Plugin HA E na molaoli PUBLISH_UNPUBLISH_VOLUME bokhoni, kapa node STAGE_UNSTAGE_VOLUME bokhoni, le NodeUnpublishVolume e phethiloe ka katleho.

Ha e le hantle sena se bolela hore o hloka ho tlosa disk ho tloha mochine oa sebele pele o e atolosa.

Leha ho le joalo, ka bomalimabe ts'ebetsong Litlhaloso tsa CSI ka li-sidecars ha li fihlelle litlhoko tsena:

  • Ka setshelo sa koloi e ka thoko csi-attacher, e lokelang ho ikarabella bakeng sa ho ba teng ha lekhalo le hlokahalang pakeng tsa li-mounts, ts'ebetso ena e mpa e sa kengoa ts'ebetsong ho saese ea offline. Ho ile ha qalisoa puisano ka sena mona.
  • Hantle-ntle setshelo sa koloi e ka thōko ke eng tabeng ee? Plugin ea CSI ka boeona ha e sebelisane le Kubernetes API, empa e arabela feela mehala ea gRPC e rometsoeng ho eona ka lijana tsa li-sidecar. Tsa moraorao li ntse li ntlafatsoa ke sechaba sa Kubernetes.

Ho rona (CSI plugin), ts'ebetso ea ho eketsa disk e shebahala tjena:

  1. Re fumana mohala oa gRPC ControllerExpandVolume;
  2. Re leka ho eketsa disk ho API, empa re fumana phoso mabapi le ho se khonehe ho etsa ts'ebetso hobane disk e behiloe;
  3. Re boloka sekhetho sa disk 'mapeng, se nang le li-disk tseo ho hlokahalang hore ho etsoe ts'ebetso ea ho eketseha. Ka tlase, bakeng sa bokhutšoanyane, re tla bitsa 'mapa ona e le volumeResizeRequired;
  4. Tlosa ka letsoho pod e sebelisang disk. Kubernetes e tla qala hape. E le hore disk ha e na nako ea ho e kenya (ControllerPublishVolume) pele re qeta ts'ebetso ea ho eketsa ha re leka ho kenya, re hlahloba hore na disk e fanoeng e ntse e le teng volumeResizeRequired mme o busetse phoso;
  5. Mokhanni oa CSI o leka ho etsa ts'ebetso e ncha hape. Haeba ts'ebetso e atlehile, joale tlosa disk ho tloha volumeResizeRequired;
  6. Hobane Disk ID ha e eo volumeResizeRequired, ControllerPublishVolume e feta ka katleho, disk e kenngoa, pod e qala.

Ntho e 'ngoe le e' ngoe e shebahala e le bonolo ka ho lekaneng, empa joalo ka kamehla ho na le maraba. E eketsa li-disk kantle-resizer, eo haeba ho na le phoso nakong ea ts'ebetso e sebedisang mokoloko ka keketseho e kholo ea nako ea nako ho fihlela metsotsoana e 1000:

func DefaultControllerRateLimiter() RateLimiter {
  return NewMaxOfRateLimiter(
  NewItemExponentialFailureRateLimiter(5*time.Millisecond, 1000*time.Second),
  // 10 qps, 100 bucket size.  This is only for retry speed and its only the overall factor (not per item)
  &BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(10), 100)},
  )
}

Sena se ka etsa hore nako le nako ts'ebetso ea katoloso ea disk e atolosoe bakeng sa metsotso ea 15+, ka hona, pod e tsamaellanang ha e fumanehe.

Khetho e le 'ngoe feela e ileng ea re lumella habonolo le ka mokhoa o se nang bohloko ho fokotsa nako e ka bang teng e ne e le tšebeliso ea mofuta oa rona oa "external-resizer" o nang le moeli o moholo oa ho qeta nako. ka metsotsoana e 5:

workqueue.NewItemExponentialFailureRateLimiter(5*time.Millisecond, 5*time.Second)

Ha rea ​​​​ka ra bona ho hlokahala hore re qale lipuisano ka potlako le ho pata "resizer" ea kantle, hobane resize ea offline ea li-disk ke tšitiso e tla nyamela haufinyane ho tsoa ho bafani bohle ba maru.

Joang ho qala ho sebelisa?

Mokhanni o tšehetsoa ho mofuta oa Kubernetes 1.15 le holimo. E le hore mokhanni a sebetse, litlhoko tse latelang li tlameha ho finyelloa:

  • Senya --allow-privileged set to value true bakeng sa seva sa API le kubelet;
  • Kenyellelitsoe --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true bakeng sa seva sa API le kubelet;
  • Mount propagation (ho ata ha thaba) e tlameha ho bulela sehlopha. Ha o sebelisa Docker, daemon e tlameha ho hlophisoa ho lumella li-mounts tse arolelanoang.

Mehato eohle e hlokahalang bakeng sa ho instola ka boeona e hlalositsoe ho BALA. Ho kenya ho kenyelletsa ho theha lintho ho Kubernetes ho tloha lipontšong.

E le hore mokhanni a sebetse o tla hloka tse latelang:

  • Hlalosa sesupo sa buka ho manifest (folder-id) Yandex.Cloud (bona litokomane);
  • Ho sebelisana le Yandex.Cloud API, mokhanni oa CSI o sebelisa akhaonto ea tšebeletso. Pontšong, Lekunutu le tlameha ho fetisoa linotlolo tse lumelletsoeng ho tsoa akhaonteng ea litšebeletso. Litokomaneng hlalositsoe, mokhoa oa ho theha akhaonto ea tšebeletso le ho fumana linotlolo.

Ka kakaretso - leka, 'me re tla thabela ho amohela maikutlo le litaba tse nchahaeba u kopana le mathata afe kapa afe!

Tšehetso e eketsehileng

Ka lebaka leo, re rata ho hlokomela hore re kentse tšebetsong mokhanni enoa oa CSI eseng ka takatso e kholo ea ho ithabisa ho ngola likopo ho Go, empa ka lebaka la tlhoko e potlakileng ka har'a khamphani. Ha ho bonahale ho le molemo ho rona ho boloka ts'ebetsong ea rona, kahoo haeba Yandex e bontša thahasello 'me e etsa qeto ea ho tsoela pele ho tšehetsa mokhanni, re tla thabela ho fetisetsa polokelo ho bona.

Ho phaella moo, Yandex mohlomong e na le ts'ebetsong ea eona ea mokhanni oa CSI sehlopheng sa eona se laoloang sa Kubernetes, se ka lokolloang ho Open Source. Re boetse re bona khetho ena ea ntlafatso e le e ntle - sechaba se tla khona ho sebelisa mokhanni ea netefalitsoeng ho tsoa ho mofani oa litšebeletso, eseng ho tsoa k'hamphaning ea batho ba bang.

PES

Bala hape ho blog ea rona:

Source: www.habr.com

Eketsa ka tlhaloso