O matou poto masani i le atinaʻeina o se avetaavale CSI i Kubernetes mo Yandex.Cloud

O matou poto masani i le atinaʻeina o se avetaavale CSI i Kubernetes mo Yandex.Cloud

Matou te fiafia e faʻailoa atu o Flant o loʻo faʻalauteleina lana sao i Open Source meafaigaluega mo Kubernetes e ala i le faʻatagaina fa'aalafa o le aveta'avale CSI (Container Storage Interface) mo Yandex.Cloud.

Ae aʻo leʻi agai i luma i faʻamatalaga faʻatinoga, seʻi o tatou tali le fesili pe aisea e manaʻomia ai lenei mea pe a uma ona iai se auaunaga a Yandex. Auaunaga Pulea mo Kubernetes.

Faatomuaga

Aisea ua faapea ai?

I totonu o la matou kamupani, mai lava i le amataga o le faʻaaogaina o Kubernetes i le gaosiga (o lona uiga mo ni nai tausaga i le taimi nei), o loʻo matou atinaʻeina a matou lava meafaigaluega (fale faʻataʻavalevale), lea, i le ala, matou te fuafua foi e le o toe mamao ona faʻaavanoaina o se poloketi Open Source. . Faatasi ai ma lana fesoasoani, matou te faʻapipiʻiina ma faʻapipiʻi uma a matou fuifui, ma o le taimi nei ua sili atu nai lo le 100 o latou, i luga o le tele o faʻalapotopotoga faʻapipiʻi meafaigaluega ma i auaunaga uma o loʻo avanoa.

Clusters o loʻo faʻaogaina le fale faʻapipiʻi o loʻo i ai vaega uma e manaʻomia mo le faʻaogaina: paleni, mataʻituina ma siata talafeagai, metrics ma mataala, faʻamaoniga faʻaoga e ala i fafo e tuʻuina atu mo avanoa i dashboards uma, ma isi. E leai se aoga i le faʻapipiʻiina o sea "pumped up" fuifui i se fofo pulea, talu ai e masani ona le mafai pe o le a taʻitaʻia ai le manaʻoga e faʻamalo le afa o vaega.

NB: O le matou poto masani lea, ma e fai si ma'oti. Matou te le o fautua atu e tatau i tagata uma ona faʻapipiʻi Kubernetes fuifui ia i latou lava nai lo le faʻaogaina o fofo ua saunia. I le auala, e leai so matou poto masani i le faʻaaogaina o Kubernetes mai Yandex ma matou te le tuʻuina atu soʻo se iloiloga o lenei auaunaga i lenei tusiga.

O le a le mea ma mo ai?

O lea la, ua uma ona matou talanoa e uiga i le auala faʻaonaponei mo le teuina i Kubernetes: fa'afefea ona galue le CSI? и pe na faapefea ona oo mai le nuu i lenei faiga.

I le taimi nei, o le tele o 'au'aunaga ao tele ua atia'e aveta'avale mo le fa'aogaina o latou tisiki ao e pei o le Persistent Volume in Kubernetes. Afai e leai se avetaʻavale a le tagata faʻatau, ae o galuega talafeagai uma e tuʻuina atu e ala i le API, ona leai lea o se mea e taofia ai oe mai le faʻatinoina o le avetaʻavale oe lava. Ole mea lea na tupu ile Yandex.Cloud.

Sa matou avea ma faavae mo atinae CSI aveta'avale mo DigitalOcean ao ma ni manatu se lua mai aveta'avale mo le GCP, talu ai o fegalegaleaiga ma le API o nei ao (Google ma Yandex) ei ai le tele o mea tutusa. Aemaise lava, le API ma GCP, ma y Yandex toe faafoi se mea Operation e siaki ai le tulaga o gaioiga umi (mo se faʻataʻitaʻiga, fatuina o se tisiki fou). Ina ia fegalegaleai ma le Yandex.Cloud API, faʻaaoga Yandex.Cloud Go SDK.

Le taunuuga o le galuega ua faia опубликован i GitHub ma atonu e aoga mo i latou oe, mo nisi mafuaaga, faʻaaoga a latou lava Kubernetes faʻapipiʻi i luga o masini masini komepiuta Yandex.Cloud (ae le o se fuifui faʻatautaia saunia) ma e manaʻo e faʻaoga (faʻatonu) tisiki e ala i le CSI.

Реализация

Mea taua

I le taimi nei o loʻo lagolagoina e le avetaavale galuega nei:

  • Fa'atonu tisiki i sone uma o le fuifui e tusa ai ma le topology o nodes i le fuifui;
  • Ave'esea tisiketi na fa'atonuina muamua;
  • Fa'asolo le lapopoa mo tisiki (Yandex.Cloud aua le lagolagoina faʻateleina tisiki o loʻo faʻapipiʻi i le masini masini). Mo faʻamatalaga i le auala na tatau ai ona sui le avetaavale ina ia faʻamalieina le toe faʻaleleia e le tiga pe a mafai, vaʻai i lalo.

I le lumanaʻi, matou te fuafua e faʻatino le lagolago mo le fatuina ma le tapeina o ata puʻupuʻu.

O le faigata autu ma le auala e foia ai

O le le lava o le mafai ona faʻateleina tisiki i le taimi moni i le Yandex.Cloud API o se tapulaʻa e faʻalavelave ai le faʻaogaina o le faʻaogaina o le PV (Persistent Volume): i lenei tulaga, e tatau ona taofi le pod talosaga e faʻaaogaina le disk, ma e mafai ona mafua ai le fa'aletonu o talosaga.

E tusa ai CSI faʻamatalaga, pe afai e lipotia e le CSI controller e mafai ona toe suia le tele o tisiki naʻo le "offline" (VolumeExpansion.OFFLINE), o le faagasologa o le faateleina o le disk e tatau ona alu faapenei:

Afai e na'o le plugin VolumeExpansion.OFFLINE o lo'o fa'asalalauina nei pe maua i luga o se node i lena taimi ControllerExpandVolume E TATAU ona vala'au NA'O pe a uma:

  • O le plugin ei ai le pule PUBLISH_UNPUBLISH_VOLUME gafatia ma ControllerUnpublishVolume ua vala'au manuia.

POO SE ISI

  • O le plugin e LE'I iai le pule PUBLISH_UNPUBLISH_VOLUME gafatia, o le plugin ei ai node STAGE_UNSTAGE_VOLUME gafatia, ma NodeUnstageVolume ua maeʻa ma le manuia.

POO SE ISI

  • O le plugin e LE'I iai le pule PUBLISH_UNPUBLISH_VOLUME gafatia, po'o le node STAGE_UNSTAGE_VOLUME gafatia, ma NodeUnpublishVolume ua mae'a manuia.

O lona uiga o lona uiga e tatau ona e tu'u ese le tisiki mai le masini masini a'o le'i fa'alauteleina.

Ae peitai, o le mea e leaga ai faʻatinoga Ole faʻamatalaga CSI e ala ile taʻavale e le ausia nei manaʻoga:

  • I totonu o se pusa ta'avale csi-attacher, lea e tatau ona nafa ma le i ai o le va manaʻomia i le va o mauga, o lenei faʻatinoga e le faʻatinoina i le faʻaogaina o le offline. Na amataina se talanoaga e uiga i lenei mea iinei.
  • O le a tonu le atigipusa ta'avale i lea tulaga? O le CSI plugin lava ia e le fegalegaleai ma le Kubernetes API, ae naʻo le tali atu i le gRPC telefoni e lafo atu i ai e pusa taʻavale. lata mai o lo'o atina'e e le nuu Kubernetes.

I la matou tulaga (CSI plugin), o le faʻaogaina o le faʻateleina o le tisiki e pei o lenei:

  1. Matou te maua se telefoni gRPC ControllerExpandVolume;
  2. O loʻo matou taumafai e faʻateleina le tisiki i le API, ae matou te maua se mea sese e uiga i le le mafai ona faʻatinoina le taʻaloga ona o loʻo faʻapipiʻi le disk;
  3. Matou te faʻasaoina le faʻamatalaga tisiki i totonu o se faʻafanua o loʻo i ai tisiki e manaʻomia ai le faʻatupulaia o le gaioiga. I lalo, mo le faapuupuuga, o le a matou taʻua lenei faʻafanua o volumeResizeRequired;
  4. Aveese ma le lima le pusa o loʻo faʻaaogaina le disk. Kubernetes o le a toe amataina. Ina ia le maua e le disk se taimi e faʻapipiʻi ai (ControllerPublishVolume) aʻo leʻi faʻamaeʻaina le faʻaopoopoga o le gaioiga pe a taumafai e faʻapipiʻi, matou te siaki o loʻo i totonu le tisiki tuʻuina atu volumeResizeRequired ma toe faafoi se mea sese;
  5. E taumafai le aveta'avale CSI e toe fa'atino le galuega fa'aopoopo. Afai na manuia le taotoga, ona aveese lea o le disk mai volumeResizeRequired;
  6. Aua E misi le ID Disk mai volumeResizeRequired, ControllerPublishVolume pasi manuia, ua faapipii le disk, amata le pod.

E foliga faigofie mea uma, ae pei o taimi uma e iai faʻalavelave. Fa'ateleina tisiki fafo-resizer, lea i le tulaga o se mea sese i le taimi o le taotoga fa'aaoga se laina fa'atasi ai ma le fa'atuputeleina o le taimi fa'agata i le 1000 sekone:

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)},
  )
}

E mafai ona i'u ai i lea taimi ma lea taimi i le fa'alauteleina o le tisiki fa'agaoioi e fa'alautele mo le 15+ minute ma, o lea, ua le maua ai le pod tutusa.

Na o le pau lava le filifiliga e faigofie ma leai se tiga na faʻatagaina ai i matou e faʻaitiitia le taimi faʻaletonu o le faʻaogaina lea o la matou faʻamatalaga o fafo-resizer faʻatasi ai ma se tapulaʻa maualuga taimi. i le 5 sekone:

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

Matou te leʻi manatu e manaʻomia le faʻavaveina o se talanoaga ma faʻapipiʻi le fafo-resizer, aua o le faʻaogaina tuusao o tisiketi o se toe faʻafoʻi lea o le a le pine ae mou atu mai kamupani uma e tuʻuina atu ao.

E fa'afefea ona amata fa'aaoga?

E lagolagoina le aveta'avale ile Kubernetes version 1.15 ma maualuga. Ina ia galue le avetaavale, e tatau ona ausia manaoga nei:

  • Flag --allow-privileged seti i le tau true mo API server ma kubelet;
  • E aofia ai --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true mo API server ma kubelet;
  • Fa'aliga mauga (fa'alauteleina o mauga) e tatau ona mafai i luga o le fuifui. A faʻaaoga le Docker, e tatau ona faʻapipiʻi le daemon e faʻataga ai fefaʻasoaʻiga.

Laasaga talafeagai uma mo le faʻapipiʻiina lava ia faʻamatalaina i le README. Fa'apipi'i e aofia ai le fatuina o mea i Kubernetes mai fa'aaliga.

Ina ia galue le avetaavale e te manaʻomia mea nei:

  • Fa'ailoa le fa'ailoga fa'asinomaga i le fa'aaliga (folder-id) Yandex.Cloud (va'ai fa'amaumauga);
  • Ina ia fegalegaleai ma le Yandex.Cloud API, e faʻaaogaina e le avetaʻavale CSI se teugatupe tautua. I le faʻaaliga, e tatau ona pasia le mea lilo ki faatagaina mai le tala o auaunaga. I totonu o faʻamaumauga faamatalaina, fa'afefea ona fai se tala tautua ma maua ki.

O mea uma lava na - taumafai, ma o le a matou fiafia e maua ni manatu faaalia ma mataupu foupe afai e te feagai ma ni faʻafitauli!

Lagolago atili

O se taunuuga, matou te fia maitauina na matou faʻatinoina lenei CSI avetaʻavale e le o se manaʻoga tele e fiafia e tusi tusi talosaga i Go, ae ona o se manaʻoga faanatinati i totonu o le kamupani. E foliga mai e le aoga ia i matou le tausia o la matou lava faʻatinoga, o lea afai e faʻaalia e Yandex le fiafia ma filifili e faʻaauau le lagolagoina o le avetaavale, matou te fiafia e faʻafeiloaʻi le faleoloa ia i latou.

E le gata i lea, atonu o loʻo i ai i le Yandex lana lava faʻatinoga o le avetaʻavale CSI i lana faʻalapotopotoga Kubernetes pulea, lea e mafai ona tuʻuina atu i Open Source. Matou te vaʻai foʻi i lenei filifiliga faʻaleleia e lelei - o le a mafai e le alalafaga ona faʻaogaina se avetaʻavale faʻamaonia mai se tuʻuina atu auaunaga, ae le mai se kamupani lona tolu.

SALA

Faitau foi i la matou blog:

puna: www.habr.com

Faaopoopo i ai se faamatalaga