To matou wheako ki te whakawhanake i te taraiwa CSI i Kubernetes mo Yandex.Cloud

To matou wheako ki te whakawhanake i te taraiwa CSI i Kubernetes mo Yandex.Cloud

E koa ana matou ki te panui kei te whakawhānui ake a Flant i tana takoha ki nga taputapu Open Source mo Kubernetes ma te tuku putanga alpha o te taraiwa CSI (Atanga Rokiroki Ipu) mo Yandex.Cloud.

Engari i mua i te neke atu ki nga korero mo te whakatinanatanga, me whakautu te patai he aha te mea e hiahiatia ana ina he ratonga a Yandex. Ratonga Whakahaere mo Kubernetes.

Whakataki

He aha tenei?

I roto i ta maatau kamupene, mai i te timatanga o te whakamahi i nga Kubernetes i roto i nga mahi whakaputa (ara mo etahi tau inaianei), kei te whakawhanake i a maatau ake taputapu (deckhouse), na te mea, kei te whakaaro ano matou kia waatea mai hei kaupapa Open Source. . Ma tana awhina, ka whirihora me te whirihora i o tatou kahui katoa, i tenei wa kua neke atu i te 100 o ratou, i runga i te tini o nga whirihoranga taputapu me nga ratonga kapua katoa e waatea ana.

Ko nga roopu e whakamahi ana i te whare deckhouse kei a raatau nga waahanga katoa e tika ana mo te mahi: nga taurite, te aro turuki me nga mahere watea, nga inenga me nga matohi, te whakamotuhēhēnga kaiwhakamahi ma nga kaiwhakarato o waho mo te uru ki nga papatohu katoa, me era atu. Karekau he take ki te whakauru i taua kahui "pump up" ki roto i te otinga whakahaere, na te mea kaore pea e taea, ka arahi ranei ki te whakakore i te haurua o nga waahanga.

NB: Ko ta matou wheako tenei, a he tino motuhake. Kare rawa matou e kii ana me tuku e nga tangata katoa nga tautau Kubernetes ki a raatau ake, kaua ki te whakamahi i nga otinga kua rite. Ma te ara, kaore he tino wheako ki te whakahaere i nga Kubernetes mai i Yandex a kaore matou e tuku i tetahi aromatawai mo tenei ratonga i tenei tuhinga.

He aha te mea, mo wai hoki?

Na, kua korero tatou mo te huarahi hou mo te rokiroki i Kubernetes: pehea te mahi a CSI? и pehea te taenga mai o te hapori ki tenei huarahi.

I tenei wa, he maha nga kaiwhakarato ratonga kapua nui kua whakawhanake i nga taraiwa mo te whakamahi i a raatau kopae kapua hei Roorahi Tonu i roto i nga Kubernetes. Mena kaore he taraiwa pera a te kaiwhakarato, engari ko nga mahi katoa e tika ana ka tukuna ma te API, kaore he mea e aukati i a koe ki te whakatinana i te taraiwa. Koinei te mea i pa ki a Yandex.Cloud.

I tangohia e matou hei turanga mo te whanaketanga Kaitaraiwa CSI mo DigitalOcean kapua me etahi whakaaro mai taraiwa mo GCP, mai i te taunekeneke me te API o enei kapua (Google me Yandex) he maha nga ahuatanga. Ina koa, ko te API me GCP, me y Yandex whakahokia he ahanoa Operation ki te whai i te mana o nga mahi kua roa (hei tauira, te hanga kōpae hou). Hei taunekeneke me te Yandex.Cloud API, whakamahia Yandex.Cloud Haere SDK.

Ko te hua o te mahi i mahia whakaputaina i runga i GitHub a ka whai hua pea mo te hunga, mo etahi take, ka whakamahi i o raatau ake whakaurunga Kubernetes i runga i nga miihini mariko Yandex.Cloud (engari ehara i te roopu whakahaere kua rerihia) me te hiahia ki te whakamahi (ota) kōpae ma te CSI.

Реализация

Nga waahanga matua

I tenei wa ka tautokohia e te taraiwa nga mahi e whai ake nei:

  • Te ota i nga kopae ki nga rohe katoa o te roopu e ai ki te topology o nga pona kei roto i te roopu;
  • Te tango i nga kōpae kua whakahauhia i mua;
  • Rahi tuimotu mo nga kōpae (Yandex.Cloud kaua e tautoko te whakanui ake i nga kopae e mau ana ki te miihini mariko). Mo nga korero me pehea te whakarereke i te taraiwa kia kore ai e mamae te whakarereke i te rahi, tirohia i raro nei.

Hei nga ra kei te heke mai, ka whakamahere matou ki te whakatinana tautoko mo te hanga me te whakakore i nga whakaahua kōpae.

Ko te tino uaua me pehea te wikitoria

Ko te kore o te kaha ki te whakanui ake i nga kopae i roto i te waa tuuturu i roto i te Yandex.Cloud API he herenga e whakararu ana i te mahi whakarereke mo te PV (Rohe Tonu): i tenei keehi, he mea tika kia mutu te tono pod e whakamahi ana i te kōpae, a ka taea e tenei te whakaputa i nga tono wa heke.

E ai ki Nga korero a CSI, ki te kii mai te kaiwhakahaere CSI ka taea e ia te whakarereke i te rahi o nga kōpae "tuimotu" anake (VolumeExpansion.OFFLINE), me penei te tukanga o te whakanui i te kōpae:

Mena kei te mono anake VolumeExpansion.OFFLINE Ko te kaha roha me te rōrahi kei te whakaputahia, kei te waatea ranei i runga i tetahi pona ControllerExpandVolume ME karanga ANAKE i muri i enei:

  • He kaiwhakahaere te mono PUBLISH_UNPUBLISH_VOLUME te kaha me te ControllerUnpublishVolume kua pai te tono.

RĀNEI

  • Ko te mono KORE he kaiwhakahaere PUBLISH_UNPUBLISH_VOLUME kaha, he kōpuku te mono STAGE_UNSTAGE_VOLUME kaha, me NodeUnstageVolume kua oti pai.

RĀNEI

  • Ko te mono KORE he kaiwhakahaere PUBLISH_UNPUBLISH_VOLUME te kaha, te node ranei STAGE_UNSTAGE_VOLUME kaha, me NodeUnpublishVolume kua oti pai.

Ko te tikanga me wehe e koe te kōpae mai i te miihini mariko i mua i te whakawhanui.

Heoi ano, kaore whakatinana Ko te tohu CSI na roto i nga waka taha kaore e tutuki i enei whakaritenga:

  • I roto i te ipu sidecar csi-attacher, e tika ana hei kawenga mo te waahi o te waahi e hiahiatia ana i waenga i nga pikinga, kaore noa tenei mahi i te whakatinana i te rahinga tuimotu. I timatahia he korero mo tenei konei.
  • He aha te mea te ipu sidecar i roto i tenei horopaki? Ko te mono CSI ake kaore e pahekoheko me te Kubernetes API, engari ka whakautu noa ki nga waea gRPC i tukuna atu e nga ipu tahataha. Hou kei te whakawhanakehia na te hapori Kubernetes.

I roto i ta maatau take (CSI mono), ko te ahua o te mahi whakanui i te kōpae penei:

  1. Ka whiwhi tatou i te waea gRPC ControllerExpandVolume;
  2. Kei te ngana matou ki te whakanui ake i te kōpae i roto i te API, engari ka whiwhi matou i te hapa mo te kore e taea te mahi i te mahi na te mea kua eke te kōpae;
  3. Ka penapenahia e matou te kaitautuhi kōpae ki te mahere, kei roto nga kopae e tika ana kia mahia te mahi whakanui. Kei raro nei, mo te poto, ka kiia tenei mapi hei volumeResizeRequired;
  4. Tango ā-ringa i te pākākano e whakamahi ana i te kōpae. Ka timata ano a Kubernetes. Kia kore ai te kōpae e whai taima ki te whakairi (ControllerPublishVolume) i mua i te whakaoti i te mahi whakanui i te wa e ngana ana ki te whakairi, ka tirohia kei roto tonu te kōpae kua hoatu volumeResizeRequired ka whakahoki he hapa;
  5. Ka ngana te taraiwa CSI ki te mahi ano i te mahi whakarereke. Mena i angitu te mahi, tangohia te kōpae mai volumeResizeRequired;
  6. No te mea Kei te ngaro te ID kōpae mai volumeResizeRequired, ControllerPublishVolume ka paahi pai, ka eke te kōpae, ka timata te pākākano.

He maamaa noa nga mea katoa, engari i nga wa katoa he mahanga. Whakarahi kōpae waho-resizer, ina he hapa i te wa e mahi ana ka whakamahi i te rarangi me te pikinga taupuke i te wa pau ki te 1000 hēkona:

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

Ka taea e tenei i ia wa ka roa te mahi roha kōpae mo te 15+ meneti, a, na reira, karekau i te waatea te putunga.

Ko te mea noa i taea ai e matou te whakaiti i te wa heke ko te whakamahi i ta matou putanga o-waho-resizer me te tepe taima morahi. i roto i te 5 hēkona:

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

Kare matou i whakaaro he mea tika ki te timata wawe i te korerorero me te papaki i te reiser-waho, na te mea ko te whakarereketanga tuimotu o nga kopae he whakahokinga ka ngaro atu i nga kaiwhakarato kapua katoa.

Me pehea te tiimata ki te whakamahi?

Ka tautokohia te taraiwa i runga i te putanga Kubernetes 1.15 me te teitei ake. Kia mahi te taraiwa, me tutuki nga whakaritenga e whai ake nei:

  • Kara --allow-privileged whakaritea ki te uara true mo te tūmau API me te kubelet;
  • Kei roto --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true mo te tūmau API me te kubelet;
  • Maunga whakatö (te whakatipu maunga) me whakahohe i runga i te tautau. I te wa e whakamahi ana i a Docker, me whirihorahia te daemon ki te tuku i nga maunga tiritahi.

Nga kaupae e tika ana mo te whakaurunga ake whakaahuatia i README. Ko te whakaurunga he hanga ahanoa ki Kubernetes mai i nga whakaaturanga.

Mo te mahi a te taraiwa ka hiahia koe ki enei e whai ake nei:

  • Tauwhāitihia te pūtāutu whaiaronga i te whakaaturanga (folder-id) Yandex.Cloud (tirohia nga tuhinga);
  • Hei taunekeneke ki te Yandex.Cloud API, ka whakamahia e te taraiwa CSI tetahi kaute ratonga. I roto i te whakaaturanga, me paahi te mea ngaro mau taviri mana mai i te kaute ratonga. I roto i nga tuhinga whakaahuatia, me pehea te hanga i tetahi kaute ratonga me te whiwhi ki.

Katoa - whakamatauria, a ka koa matou ki te whiwhi urupare me nga take houmena ka pa ki a koe etahi raru!

He tautoko ano

Ko te mutunga, e hiahia ana matou ki te mahara i whakatinanahia e matou tenei taraiwa CSI ehara i te hiahia nui ki te ngahau i nga tono tuhi i roto i te Haere, engari na te hiahia ohorere i roto i te kamupene. Kaore e pai ki a maatau te pupuri i ta maatau ake whakatinanatanga, na mena ka whakaatu a Yandex i te hiahia me te whakatau ki te tautoko tonu i te taraiwa, ka koa matou ki te whakawhiti i te rehitatanga ki a raatau.

I tua atu, tera pea kei a Yandex tana ake whakatinanatanga o te taraiwa CSI i roto i tana roopu Kubernetes whakahaere, ka taea te tuku i te Open Source. Ka kite ano matou he pai tenei waahanga whanaketanga - ka taea e te hapori te whakamahi i tetahi taraiwa whakamatauhia mai i tetahi kaiwhakarato ratonga, kaua mai i tetahi kamupene tuatoru.

PS

Pānuihia hoki i runga i ta maatau blog:

Source: will.com

Tāpiri i te kōrero