Ar n-eòlas ann a bhith a’ leasachadh draibhear CSI ann an Kubernetes airson Yandex.Cloud

Ar n-eòlas ann a bhith a’ leasachadh draibhear CSI ann an Kubernetes airson Yandex.Cloud

Tha sinn toilichte ainmeachadh gu bheil Flant a’ leudachadh na tha iad a’ cur ri innealan Open Source airson Kubernetes le bhith a’ leigeil ma sgaoil Tionndadh alpha an CSI driver (Eadar-aghaidh Stòradh Container) airson Yandex.Cloud.

Ach mus gluais sinn air adhart gu mion-fhiosrachadh buileachaidh, freagraidh sinn a’ cheist carson a tha feum air seo nuair a tha seirbheis aig Yandex mu thràth Seirbheis air a riaghladh airson Kubernetes.

Ro-ràdh

Carson a tha seo?

Taobh a-staigh ar companaidh, bhon fhìor thoiseach cleachdadh Kubernetes ann an cinneasachadh (ie airson grunn bhliadhnaichean a-nis), tha sinn air a bhith a’ leasachadh ar n-inneal fhèin (deckhouse), a tha, leis an t-slighe, cuideachd an dùil a bhith ri fhaighinn a dh’ aithghearr mar phròiseact Open Source . Le a chuideachadh, bidh sinn a’ rèiteachadh agus a’ rèiteachadh ar cruinneachaidhean gu lèir, agus an-dràsta tha còrr air 100 dhiubh ann mu thràth, air measgachadh farsaing de rèiteachaidhean bathar-cruaidh agus anns a h-uile seirbheis sgòthan a tha ri fhaighinn.

Tha na pàirtean uile a tha riatanach airson obrachadh aig cruinneachaidhean a bhios a’ cleachdadh taigh-deic: luchd-cothromachaidh, sgrùdadh le clàran goireasach, meatrach agus rabhaidhean, dearbhadh luchd-cleachdaidh tro sholaraichean bhon taobh a-muigh airson faighinn gu gach deas-bhòrd, agus mar sin air adhart. Chan eil feum sam bith ann a bhith a 'stàladh a leithid de bhuidheann "pumpadh suas" ann am fuasgladh air a stiùireadh, oir tha seo gu tric do-dhèanta no a' leantainn gu feum air leth de na co-phàirtean a dhì-cheadachadh.

NB: Is e seo ar n-eòlas, agus tha e gu math sònraichte. Chan eil sinn idir a’ moladh gum bu chòir a h-uile duine cruinneachaidhean Kubernetes a chleachdadh leotha fhèin an àite a bhith a’ cleachdadh fuasglaidhean deiseil. Co-dhiù, chan eil fìor eòlas againn air obrachadh Kubernetes bho Yandex agus cha toir sinn seachad measadh sam bith air an t-seirbheis seo san artaigil seo.

Dè a th’ ann agus cò dha?

Mar sin, tha sinn mu thràth air bruidhinn mun dòigh-obrach ùr-nodha airson stòradh ann an Kubernetes: ciamar a tha CSI ag obair? и mar a thàinig a’ choimhearsnachd ris an dòigh-obrach seo.

An-dràsta, tha mòran de sholaraichean seirbheis sgòthan mòra air draibhearan a leasachadh airson na diosgan sgòthan aca a chleachdadh mar Persistent Volume ann an Kubernetes. Mura h-eil an leithid de dhràibhear aig an t-solaraiche, ach gu bheil na gnìomhan riatanach uile air an toirt seachad tron ​​​​API, chan eil dad a’ cur casg ort an draibhear a chuir an gnìomh thu fhèin. Is e seo a thachair le Yandex.Cloud.

Ghabh sinn mar bhunait airson leasachadh Driver CSI airson sgòthan DigitalOcean agus beachd no dhà bho Driver airson GCP, leis gu bheil grunn rudan coltach ri eadar-obrachadh le API nan sgòthan sin (Google agus Yandex). Gu sònraichte, tha an API agus GCP, agus Yandex nì a thilleadh Operation gus sùil a chumail air inbhe gnìomhachd fad-ùine (mar eisimpleir, cruthachadh diosc ùr). Gus eadar-obrachadh leis an Yandex.Cloud API, cleachd Yandex.Cloud Go SDK.

Toradh na h-obrach a chaidh a dhèanamh air fhoillseachadh air GitHub agus dh’ fhaodadh gum bi e feumail dhaibhsan a bhios, airson adhbhar air choireigin, a’ cleachdadh an stàladh Kubernetes aca fhèin air innealan mas-fhìor Yandex.Cloud (ach chan e cruinneachadh deiseil air a stiùireadh) agus a bhiodh airson diosgan a chleachdadh (òrdugh) tro CSI.

Реализация

Prìomh fheartan

An-dràsta tha an dràibhear a 'toirt taic do na gnìomhan a leanas:

  • òrdachadh diosgan anns a h-uile sòn den bhuidheann a rèir topology nan nòsan anns a’ bhuidheann;
  • toirt air falbh diosgan a chaidh òrdachadh roimhe;
  • Ath-mheudachadh far loidhne airson diosgan (Yandex.Cloud na toir taic ag àrdachadh na diosgan a tha air an cur suas chun inneal mas-fhìor). Airson fiosrachadh air mar a dh'fheumadh an dràibhear atharrachadh gus am biodh e cho pianail 's a ghabhas, faicibh gu h-ìosal.

Anns an àm ri teachd, tha sinn an dùil taic a chuir an gnìomh airson cruthachadh agus cuir às do dhealbhan diosc.

Am prìomh dhuilgheadas agus mar a gheibh thu thairis air

Tha an dìth comas air diosgan àrdachadh ann an àm fìor anns an Yandex.Cloud API na chuingealachadh a tha a ’dèanamh iom-fhillte air gnìomhachd ath-mheudachadh PV (Seasmhach Volume): anns a’ chùis seo, feumar stad a chuir air pod an tagraidh a chleachdas an diosc, agus faodaidh seo iarrtasan ùine downt adhbhrachadh.

A rèir Sònrachaidhean CSI, ma tha an rianadair CSI ag aithris nach urrainn dha diosgan ath-mheudachadh ach “far loidhne” (VolumeExpansion.OFFLINE), an uairsin bu chòir don phròiseas àrdachadh an diosc a dhol mar seo:

Ma tha am plugan a-mhàin VolumeExpansion.OFFLINE tha comas leudachaidh agus meud air fhoillseachadh an-dràsta no ri fhaighinn air nód an uairsin ControllerExpandVolume FEUMAIDH a bhith air a ghairm A-MHÀIN às deidh an dàrna cuid:

  • Tha rianadair aig a’ plugan PUBLISH_UNPUBLISH_VOLUME comas agus ControllerUnpublishVolume air a chuir a-steach gu soirbheachail.

NO EILE

  • CHAN EIL rianadair aig a’ plugan PUBLISH_UNPUBLISH_VOLUME comas, tha nód aig a’ plugan STAGE_UNSTAGE_VOLUME comas, agus NodeUnstageVolume air a chrìochnachadh gu soirbheachail.

NO EILE

  • CHAN EIL rianadair aig a’ plugan PUBLISH_UNPUBLISH_VOLUME comas, no nod STAGE_UNSTAGE_VOLUME comas, agus NodeUnpublishVolume air a chrìochnachadh gu soirbheachail.

Tha seo gu bunaiteach a’ ciallachadh gum feum thu an diosc a sgaradh bhon inneal brìgheil mus leudaich thu e.

Ach, gu mì-fhortanach buileachadh Chan eil an sònrachadh CSI tro sidecars a’ coinneachadh ris na riatanasan sin:

  • Ann an soitheach taobh càr csi-attacher, a bu chòir a bhith cunntachail airson a’ bheàrn a tha a dhìth eadar na sreapan, chan eil an gnìomh seo dìreach air a chuir an gnìomh anns an ath-mheudachadh far-loidhne. Chaidh deasbad mu dheidhinn seo a thòiseachadh an seo.
  • Dè dìreach a th’ ann an soitheach càr-taobh anns a’ cho-theacsa seo? Chan eil am plugan CSI fhèin ag eadar-obrachadh leis an Kubernetes API, ach chan eil e a’ freagairt ach fiosan gRPC a thèid a chuir thuige le soithichean taobh càr. As ùire gan leasachadh le coimhearsnachd Kubernetes.

Anns a ’chùis againn (plugan CSI), tha coltas mar seo air obrachadh àrdachadh an diosc:

  1. Bidh sinn a’ faighinn gairm gRPC ControllerExpandVolume;
  2. Tha sinn a’ feuchainn ris an diosc san API àrdachadh, ach tha sinn a’ faighinn mearachd a thaobh cho neo-chomasach ‘s a tha e an obair a dhèanamh leis gu bheil an diosc air a chuir suas;
  3. Bidh sinn a’ stòradh an aithnichear diosc air a’ mhapa, anns a bheil na diosgan air am feumar an àrdachadh obrachadh. Gu h-ìosal, airson giorrad, canaidh sinn am mapa seo mar volumeResizeRequired;
  4. Thoir air falbh am pod a chleachdas an diosc le làimh. Tòisichidh Kubernetes e. Gus nach bi ùine aig an diosc a chuir suas (ControllerPublishVolume) mus cuir sinn crìoch air an obair àrdachaidh nuair a dh’ fheuchas sinn ri cur suas, nì sinn cinnteach gu bheil an diosc a chaidh a thoirt seachad fhathast a-staigh volumeResizeRequired agus thoir air ais mearachd;
  5. Bidh an draibhear CSI a’ feuchainn ris an obair ath-mheudachadh a dhèanamh a-rithist. Ma bha an obair soirbheachail, thoir air falbh an diosc volumeResizeRequired;
  6. Air sgàth Tha ID diosc a dhìth o volumeResizeRequired, ControllerPublishVolume a’ dol seachad gu soirbheachail, tha an diosc air a chuir suas, tòisichidh am pod.

Tha a h-uile dad a 'coimhead sìmplidh gu leòr, ach mar a tha e an-còmhnaidh tha duilgheadasan ann. Meudaich diosgan taobh a-muigh resizer, a tha ann an cùis mearachd rè an obrachaidh a’ cleachdadh ciudha le àrdachadh exponential ann an ùine-ama suas ri 1000 diogan:

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

Faodaidh seo leantainn bho àm gu àm gun tèid an obair leudachaidh diosc a leudachadh airson 15+ mionaidean agus, mar sin, nach eil am pod co-fhreagarrach ri fhaighinn.

B’ e an aon roghainn a leig leinn gu furasta agus gun phian leinn ùine downt a lughdachadh a bhith a’ cleachdadh an dreach againn de ath-resizer taobh a-muigh le crìoch ùine as àirde. ann an 5 diogan:

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

Cha robh sinn den bheachd gu robh feum air deasbad a thòiseachadh gu h-èiginneach agus an ath-leasaiche taobh a-muigh a chumail, oir tha ath-mheudachadh diosc far-loidhne na thilleadh a dh’ fhalbh a dh’ aithghearr bho gach solaraiche sgòthan.

Ciamar a thòisicheas tu ga chleachdadh?

Tha an draibhear a’ faighinn taic air dreach Kubernetes 1.15 agus nas àirde. Airson an dràibhear a bhith ag obair, feumar na riatanasan a leanas a choileanadh:

  • Didòmhnaich --allow-privileged air a shuidheachadh gu luach true airson frithealaiche API agus kubelet;
  • Air a ghabhail a-steach --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true airson frithealaiche API agus kubelet;
  • Iomadachadh sreap (iomadachadh sreap) a bhith air a chomasachadh air a’ bhraisle. Nuair a bhios tu a’ cleachdadh Docker, feumaidh an daemon a bhith air a rèiteachadh gus cothrom a thoirt do shreapadairean co-roinnte.

A h-uile ceum riatanach airson an stàladh fhèin air a mhìneachadh ann an README. Tha an stàladh a’ toirt a-steach cruthachadh stuthan ann an Kubernetes bho manifestos.

Airson an dràibhear a bhith ag obair feumaidh tu na leanas:

  • Sònraich aithnichear an eòlaire san fhollaisiche (folder-id) Yandex.Cloud (faic sgrìobhainnean);
  • Gus eadar-obrachadh leis an Yandex.Cloud API, bidh an draibhear CSI a’ cleachdadh cunntas seirbheis. Anns an fhoillseachadh, feumaidh Dìomhaireachd a dhol seachad iuchraichean ùghdarraichte bhon chunntas seirbheis. Anns na sgrìobhainnean air a mhìneachadh, mar a chruthaicheas tu cunntas seirbheis agus faigh iuchraichean.

Gu h-iomlan - feuch, agus bidh sinn toilichte fios air ais fhaighinn agus cùisean ùrama choinnicheas tu ri duilgheadas sam bith!

Taic a bharrachd

Mar thoradh air an sin, bu mhath leinn a thoirt fa-near gun do chuir sinn an draibhear CSI seo an gnìomh chan ann a-mach à miann mòr airson tagraidhean sgrìobhaidh spòrsail ann an Go, ach air sgàth feum èiginneach taobh a-staigh a ’chompanaidh. Chan eil e coltach gu bheil e practaigeach dhuinn ar buileachadh fhèin a chumail suas, mar sin ma tha Yandex a ’nochdadh ùidh agus a’ co-dhùnadh cumail a ’toirt taic don draibhear, bidh sinn toilichte an stòr a ghluasad thuca.

A bharrachd air an sin, is dòcha gu bheil a chuir an gnìomh fhèin aig Yandex de dhràibhear CSI anns a’ bhuidheann Kubernetes stiùirichte aige, a dh’ fhaodar fhoillseachadh ann an Open Source. Tha sinn cuideachd a 'faicinn an roghainn leasachaidh seo mar rud fàbharach - bidh e comasach don choimhearsnachd dràibhear dearbhte a chleachdadh bho sholaraiche seirbheis, agus chan ann bho chompanaidh treas-phàrtaidh.

PS

Leugh cuideachd air ar blog:

Source: www.habr.com

Cuir beachd ann