Ahụmịhe anyị na ịzụlite onye ọkwọ ụgbọ ala CSI na Kubernetes maka Yandex.Cloud

Ahụmịhe anyị na ịzụlite onye ọkwọ ụgbọ ala CSI na Kubernetes maka Yandex.Cloud

Obi dị anyị ụtọ ịkpọsa na Flant na-agbasa onyinye ya na ngwa Open Source maka Kubernetes site na ịhapụ ụdị alfa nke onye ọkwọ ụgbọ ala CSI (Interface Nchekwa akpa) maka Yandex.Cloud.

Mana tupu ịga n'ihu na nkọwa mmejuputa iwu, ka anyị zaa ajụjụ a mere na ọ dị mkpa mgbe Yandex nwere ọrụ Ọrụ jisiri ike maka Kubernetes.

Okwu Mmalite

Gịnị kpatara nke a?

N'ime ụlọ ọrụ anyị, site na mmalite nke iji Kubernetes na mmepụta (ya bụ maka ọtụtụ afọ ugbu a), anyị na-emepụta ngwá ọrụ anyị (deckhouse), nke, n'agbanyeghị, anyị na-eme atụmatụ ime ka ọ dị ka ọrụ Open Source. . Site n'enyemaka ya, anyị na-ahazi ma hazie ụyọkọ anyị niile, ma ugbu a enweelarị ihe karịrị 100 n'ime ha, na nhazi ngwaike dịgasị iche iche yana na ọrụ igwe ojii niile dị.

Ụyọkọ ndị na-eji deckhouse nwere ihe niile dị mkpa maka ịrụ ọrụ: ndị na-edozi ihe, nlekota na eserese dabara adaba, metrics na alerts, njirimara onye ọrụ site na ndị na-eweta mpụga maka ịnweta dashboard niile, na ihe ndị ọzọ. Enweghị uru ịwụnye ụyọkọ "gbapụtara" dị otú ahụ na ngwọta a na-achịkwa, ebe ọ bụ na nke a na-emekarị ma ọ bụ na-agaghị ekwe omume ma ọ bụ na-eduga ná mkpa iji gbanyụọ ọkara nke ihe ndị ahụ.

NB: Nke a bụ ahụmahụ anyị, ọ bụkwa kpọmkwem. Anyị anaghị atụ aro na onye ọ bụla kwesịrị ibuga ụyọkọ Kubernetes n'onwe ya kama iji ngwọta emebere. Site n'ụzọ, anyị enweghị ezigbo ahụmahụ na-arụ ọrụ Kubernetes si Yandex na anyị agaghị enye nyocha ọ bụla nke ọrụ a n'isiokwu a.

Kedu ihe ọ bụ na onye?

Yabụ, anyị ekwuola maka usoro nchekwa nchekwa ọgbara ọhụrụ na Kubernetes: kedu ka CSI si arụ ọrụ? и ka obodo siri bia na nke a obibia.

Ugbu a, ọtụtụ ndị na-enye ọrụ igwe ojii emepụtala ndị ọkwọ ụgbọala maka iji diski igwe ojii ha dị ka olu na-adịgide adịgide na Kubernetes. Ọ bụrụ na onye na-eweta ya enweghị onye ọkwọ ụgbọ ala dị otú ahụ, ma a na-enye ọrụ niile dị mkpa site na API, mgbe ahụ ọ dịghị ihe na-egbochi gị ịmejuputa onye ọkwọ ụgbọ ala n'onwe gị. Nke a bụ ihe mere Yandex.Cloud.

Anyị weere dị ka ihe ndabere maka mmepe Onye ọkwọ ụgbọ ala CSI maka igwe ojii DigitalOcean na a di na nwunye nke echiche si ndị ọkwọ ụgbọala maka GCP, ebe ọ bụ na mmekọrịta na API nke igwe ojii ndị a (Google na Yandex) nwere ọtụtụ myirịta. Karịsịa, API na GCP, na Yandex weghachi ihe Operation iji soro ọnọdụ ọrụ na-arụ ogologo oge (dịka ọmụmaatụ, ịmepụta diski ọhụrụ). Iji soro Yandex.Cloud API na-emekọrịta ihe, jiri Yandex.Cloud Go SDK.

Nsonaazụ nke ọrụ emere ebipụtara na GitHub ma nwee ike ịba uru maka ndị, n'ihi ihe ụfọdụ, na-eji ntinye Kubernetes nke onwe ha na igwe igwe Yandex.Cloud mebere (ma ọ bụghị ụyọkọ ejirila njikere) ma chọọ iji (ịtụ) diski site na CSI.

Mmejuputa iwu

Njirimara igodo

Ugbu a onye ọkwọ ụgbọ ala na-akwado ọrụ ndị a:

  • Ịtụ diski na mpaghara niile nke ụyọkọ dị ka topology nke ọnụ na ụyọkọ;
  • Wepụ diski ndị e nyere iwu na mbụ;
  • Mgbanwe nha na-anọghị n'ịntanetị maka diski (Yandex.Cloud akwadola na-abawanye diski ndị a na-etinye na igwe mebere). Maka ozi gbasara otu a ga-esi gbanwee onye ọkwọ ụgbọ ala iji mee ka ọ bụrụ ihe na-enweghị mgbu dịka enwere ike, lee n'okpuru.

N'ọdịnihu, anyị na-eme atụmatụ itinye nkwado maka ịmepụta na ihichapụ ọnyà diski.

Isi ihe isi ike na otu esi emeri ya

Enweghị ike ịbawanye diski ozugbo na Yandex.Cloud API bụ mmachi nke na-agbagha ọrụ resize maka PV (Mpịakọta Na-adịgide adịgide): na nke a, ọ dị mkpa ka akwụsị ngwa ngwa nke na-eji diski ahụ, na nke a nwere ike ime ka ngwa downtime.

Dị ka Nkọwapụta CSI, ma ọ bụrụ na onye na-ahụ maka CSI na-akọ na ọ nwere ike megharịa diski naanị "offline" (VolumeExpansion.OFFLINE), mgbe ahụ usoro ịba ụba diski kwesịrị ịga dị ka nke a:

Ọ bụrụ na ngwa mgbakwunye nwere naanị VolumeExpansion.OFFLINE A na-ebipụta ikike mgbasawanye na olu ugbu a ma ọ bụ dị na ọnụ ọnụ mgbe ahụ ControllerExpandVolume A ghaghị ịkpọ ya naanị mgbe nke ọ bụla:

  • Ngwa mgbakwunye nwere njikwa PUBLISH_UNPUBLISH_VOLUME ike na ControllerUnpublishVolume akpọkuola nke ọma.

MA Ọ BỤ ỌZỌ

  • Ngwa mgbakwunye enweghị njikwa PUBLISH_UNPUBLISH_VOLUME ike, ngwa mgbakwunye nwere ọnụ STAGE_UNSTAGE_VOLUME ike, na NodeUnstageVolume emechaala nke ọma.

MA Ọ BỤ ỌZỌ

  • Ngwa mgbakwunye enweghị njikwa PUBLISH_UNPUBLISH_VOLUME ikike, ma ọ bụ ọnụ STAGE_UNSTAGE_VOLUME ike, na NodeUnpublishVolume emechaala nke ọma.

Nke a pụtara na ị ga-ewepụ diski ahụ na igwe mebere tupu ịgbasa ya.

Otú ọ dị, ọ dị mwute ikwu mmejuputa Nkọwapụta CSI site na sidecars anaghị emezu ihe ndị a:

  • N'ime akpa sidecar csi-attacher, nke kwesịrị ịdị na-ahụ maka ọnụnọ nke oghere achọrọ n'etiti mounts, arụghị ọrụ a naanị na ngbanwe nke offline. A malitere mkparịta ụka gbasara nke a ebe a.
  • Gịnị kpọmkwem bụ akpa sidecar na ọnọdụ a? Ngwa mgbakwunye CSI n'onwe ya anaghị eso Kubernetes API na-emekọrịta ihe, mana ọ na-aza naanị oku gRPC sitere na igbe akụkụ ezigara ya. Kacha ọhụrụ a na-emepe emepe site na obodo Kubernetes.

N'ọnọdụ anyị (CSI plugin), ọrụ nke ịba ụba diski dị ka nke a:

  1. Anyị na-enweta oku gRPC ControllerExpandVolume;
  2. Anyị na-agbalị ịbawanye diski na API, ma anyị na-enweta njehie banyere enweghị ike ịrụ ọrụ ahụ n'ihi na a na-etinye diski ahụ;
  3. Anyị na-echekwa ihe nchọpụta diski na maapụ, nke nwere diski ndị ekwesịrị ịrụ ọrụ mmụba. N'okpuru ebe a, maka nkenke, anyị ga-akpọ map a dị ka volumeResizeRequired;
  4. Jiri aka wepụ pọd na-eji diski ahụ. Kubernetes ga-amalitegharị ya. Nke mere na diski ahụ enweghị oge iji rịgoro (ControllerPublishVolume) tupu imecha ọrụ mmụba mgbe ị na-agbalị ịkwanye, anyị na-elele na diski enyere ka dị volumeResizeRequired ma weghachi njehie;
  5. Onye ọkwọ ụgbọ ala CSI na-anwa ịmegharị ọrụ ngbanwe ahụ. Ọ bụrụ na ọrụ ahụ gara nke ọma, wepụ diski ahụ na ya volumeResizeRequired;
  6. N'ihi na NJ diski adịghị na ya volumeResizeRequired, ControllerPublishVolume gafere nke ọma, a na-etinye diski ahụ, pọd ahụ na-amalite.

Ihe niile na-ele anya dị mfe nke ọma, mana dịka mgbe niile, enwere ọnyà. Na-ebuwanye diski mpụga-resizer, nke n'ọnọdụ nke njehie n'oge ọrụ na-eji kwụ n'ahịrị yana mmụba n'ọgba ọsọ na oge nkwụsị ruo 1000 sekọnd:

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

Nke a nwere ike ime ka ọrụ mgbasawanye diski gbatịkwuo maka nkeji 15+ ma, ya mere, pọd kwekọrọ adịghị adị.

Naanị nhọrọ nke n'ụzọ dị mfe na n'enweghị mgbu nyere anyị ohere ibelata oge nkwụsịtụ nwere ike bụ iji ụdị resizer mpụga anyị nwere oke njedebe oge. na 5 sekọnd:

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

Anyị echeghị na ọ dị mkpa ibido mkparịta ụka ngwa ngwa ma mechie resizer mpụga, n'ihi na ngbanwe nke diski na-anọghị n'ịntanetị bụ ntughari nke ga-apụ n'anya n'oge na-adịghị anya ndị na-eweta igwe ojii.

Kedu ka esi amalite iji ya?

A na-akwado ọkwọ ụgbọ ala na ụdị Kubernetes 1.15 na karịa. Ka onye ọkwọ ụgbọ ala rụọ ọrụ, ihe ndị a ga-emerịrị:

  • Flag --allow-privileged setịpụrụ ka ọ bara uru true maka ihe nkesa API na kubelet;
  • gụnyere --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true maka ihe nkesa API na kubelet;
  • Mgbasa ugwu (ugwu propagation) ga-agbanyerịrị na ụyọkọ. Mgbe ị na-eji Docker, a ga-ahazi daemon ka ọ kwe ka ịrịkọ ọnụ.

Nzọụkwụ niile dị mkpa maka nrụnye n'onwe ya kọwara na README. Nwụnye gụnyere imepụta ihe na Kubernetes site na ngosipụta.

Ka onye ọkwọ ụgbọ ala rụọ ọrụ ị ga-achọ ihe ndị a:

  • Kpebie ihe nchọpụta ndekọ aha na ngosipụta (folder-idYandex.Cloud (hụ akwụkwọ);
  • Iji soro Yandex.Cloud API na-emekọrịta ihe, onye ọkwọ ụgbọ ala CSI na-eji akaụntụ ọrụ. Na ngosipụta, a ga-agaferịrị Nzuzo igodo ikike site na akaụntụ ọrụ. Na akwụkwọ kọwara, otu esi emepụta akaụntụ ọrụ wee nweta igodo.

Na mkpokọta - nwaa, na anyị ga-enwe obi ụtọ na-enweta nzaghachi na okwu ọhụrụọ bụrụ na ị zutere nsogbu ọ bụla!

Nkwado ọzọ

N'ihi ya, ọ ga-amasị anyị ịmara na anyị mejuputa onye ọkwọ ụgbọ ala CSI a ọ bụghị n'ihi oke ọchịchọ inwe mmasị ide akwụkwọ na Go, kama n'ihi mkpa dị ngwa n'ime ụlọ ọrụ ahụ. O yighị ka ọ dị anyị mma ịnọgide na-emejuputa nke anyị, yabụ ọ bụrụ na Yandex gosipụtara mmasị ma kpebie ịnọgide na-akwado onye ọkwọ ụgbọ ala, anyị ga-enwe obi ụtọ ịnyefe ha ebe nchekwa ahụ.

Na mgbakwunye, Yandex nwere ike inwe mmejuputa iwu nke onye ọkwọ ụgbọ ala CSI na ụyọkọ Kubernetes na-achịkwa, nke enwere ike wepụta ya na Open Source. Anyị na-ahụkwa nhọrọ mmepe a dị mma - ndị obodo ga-enwe ike iji onye ọkwọ ụgbọ ala pụtara ìhè site na onye na-ahụ maka ọrụ, ọ bụghị site na ụlọ ọrụ ndị ọzọ.

PS

Gụọkwa na blọọgụ anyị:

isi: www.habr.com

Tinye a comment