ProHoster > blog > Amministrazzjoni > L-esperjenza tagħna fl-iżvilupp ta 'sewwieq CSI f'Kubernetes għal Yandex.Cloud
L-esperjenza tagħna fl-iżvilupp ta 'sewwieq CSI f'Kubernetes għal Yandex.Cloud
Għandna pjaċir inħabbru li Flant qed jespandi l-kontribut tiegħu għal għodod Open Source għal Kubernetes billi joħroġ verżjoni alfa tas-sewwieq CSI (Interface tal-Ħażna tal-Kontenitur) għal Yandex.Cloud.
Iżda qabel ma ngħaddu għad-dettalji tal-implimentazzjoni, ejja nwieġbu l-mistoqsija għaliex dan huwa meħtieġ meta Yandex diġà għandu servizz Servizz Immexxi għal Kubernetes.
Introduzzjoni
Għaliex dan?
Fi ħdan il-kumpanija tagħna, mill-bidu nett tal-użu ta' Kubernetes fil-produzzjoni (jiġifieri għal bosta snin issa), ilna niżviluppaw l-għodda tagħna stess (deckhouse), li, mill-mod, qed nippjanaw ukoll li dalwaqt nagħmlu disponibbli bħala proġett Open Source. . Bl-għajnuna tagħha, aħna nikkonfiguraw u kkonfiguraw b'mod uniformi l-clusters kollha tagħna, u bħalissa diġà hemm aktar minn 100 minnhom, fuq varjetà wiesgħa ta 'konfigurazzjonijiet ta' ħardwer u fis-servizzi cloud kollha disponibbli.
Clusters li jużaw deckhouse għandhom il-komponenti kollha meħtieġa għall-operazzjoni: balancers, monitoraġġ b'charts konvenjenti, metriċi u twissijiet, awtentikazzjoni tal-utent permezz ta 'fornituri esterni għall-aċċess għad-dashboards kollha, eċċ. M'hemm l-ebda punt li jiġi installat raggruppament "ippumpjat" bħal dan f'soluzzjoni ġestita, peress li ħafna drabi dan huwa jew impossibbli jew iwassal għall-ħtieġa li nofs il-komponenti jiġu diżattivati.
NB: Din hija l-esperjenza tagħna, u hija pjuttost speċifika. Aħna bl-ebda mod qed nissuġġerixxu li kulħadd għandu juża raggruppamenti Kubernetes waħdu minflok juża soluzzjonijiet lesti. Mill-mod, m'għandna l-ebda esperjenza reali fl-operat ta 'Kubernetes minn Yandex u mhux se nagħtu l-ebda valutazzjoni ta' dan is-servizz f'dan l-artikolu.
Bħalissa, ħafna fornituri kbar tas-servizz tal-cloud żviluppaw sewwieqa biex jużaw id-diski tal-cloud tagħhom bħala Volum Persistenti f'Kubernetes. Jekk il-fornitur ma jkollux sewwieq bħal dan, iżda l-funzjonijiet kollha meħtieġa huma pprovduti permezz tal-API, allura xejn ma jipprevjenik milli timplimenta s-sewwieq lilek innifsek. Dan huwa dak li ġara ma' Yandex.Cloud.
Ħadna bħala bażi għall-iżvilupp Sewwieq CSI għal DigitalOcean cloud u ftit ideat minn sewwieqa għall-GCP, peress li l-interazzjoni mal-API ta 'dawn is-sħab (Google u Yandex) għandha numru ta' xebh. B'mod partikolari, l-API u GCP, u y Yandex jirritorna oġġett Operation biex issegwi l-istatus ta 'operazzjonijiet li ilhom għaddejjin (per eżempju, il-ħolqien ta' disk ġdid). Biex jinteraġixxu mal-API Yandex.Cloud, uża Yandex.Cloud Go SDK.
Ir-riżultat tax-xogħol li sar ippubblikat fuq GitHub u jista 'jkun utli għal dawk li, għal xi raġuni, jużaw l-installazzjoni Kubernetes tagħhom stess fuq magni virtwali Yandex.Cloud (iżda mhux cluster ġestiti lesti) u jixtiequ jużaw (ordni) diski permezz ta' CSI.
Реализация
Karatteristiċi ewlenin
Bħalissa s-sewwieq jappoġġja l-funzjonijiet li ġejjin:
Diski li jordnaw fiż-żoni kollha tal-cluster skont it-topoloġija tan-nodi fil-cluster;
Tneħħija ta' diski ordnati qabel;
Id-daqs offline għad-diski (Yandex.Cloud ma tappoġġjax tiżdied id-diski li huma mmuntati mal-magna virtwali). Għal informazzjoni dwar kif is-sewwieq kellu jiġi modifikat biex id-daqs mill-ġdid ikun bla tbatija kemm jista' jkun, ara hawn taħt.
Fil-futur, qed nippjanaw li nimplimentaw appoġġ għall-ħolqien u t-tħassir ta 'snapshots tad-disk.
Id-diffikultà ewlenija u kif tegħlebha
In-nuqqas tal-kapaċità li jiżdiedu d-diski f'ħin reali fl-API Yandex.Cloud hija limitazzjoni li tikkomplika l-operazzjoni ta 'resize għal PV (Volum Persistenti): f'dan il-każ, huwa meħtieġ li l-pod tal-applikazzjoni li juża d-diska jitwaqqaf, u dan jista 'jikkawża applikazzjonijiet ta' waqfien.
Skond Speċifikazzjonijiet CSI, jekk il-kontrollur CSI jirrapporta li jista 'jbiddel id-daqs tad-diski biss "offline" (VolumeExpansion.OFFLINE), allura l-proċess taż-żieda tad-disk għandu jimxi hekk:
Jekk il-plugin għandu biss VolumeExpansion.OFFLINE il-kapaċità u l-volum ta 'espansjoni bħalissa huma ppubblikati jew disponibbli fuq node allura ControllerExpandVolume GĦANDU jissejjaħ BISS wara jew:
Il-plugin għandu kontrollur PUBLISH_UNPUBLISH_VOLUME kapaċità u ControllerUnpublishVolume ġie invokat b'suċċess.
JEW INKELLA
Il-plugin MA għandux kontrollur PUBLISH_UNPUBLISH_VOLUME kapaċità, il-plugin għandu node STAGE_UNSTAGE_VOLUME kapaċità, u NodeUnstageVolume tlestiet b'suċċess.
JEW INKELLA
Il-plugin MA għandux kontrollur PUBLISH_UNPUBLISH_VOLUME kapaċità, u lanqas node STAGE_UNSTAGE_VOLUME kapaċità, u NodeUnpublishVolume tlestiet b'suċċess.
Dan essenzjalment ifisser li għandek bżonn tneħħi d-diska mill-magna virtwali qabel tespandiha.
Madankollu, sfortunatament implimentazzjoni L-ispeċifikazzjoni CSI permezz tal-sidecars ma tissodisfax dawn ir-rekwiżiti:
F'kontenitur sidecar csi-attacher, li għandu jkun responsabbli għall-preżenza tad-distakk meħtieġ bejn il-muntaturi, din il-funzjonalità sempliċement mhix implimentata fir-riżors offline. Inbdiet diskussjoni dwar dan hawn.
X'inhu eżattament kontenitur sidecar f'dan il-kuntest? Il-plugin CSI innifsu ma jinteraġixxix mal-API Kubernetes, iżda jwieġeb biss għal sejħiet gRPC mibgħuta lilha minn kontenituri sidecar. Latest qed jiġu żviluppati mill-komunità Kubernetes.
Fil-każ tagħna (plugin CSI), l-operazzjoni taż-żieda tad-diska tidher bħal din:
Nirċievu telefonata gRPC ControllerExpandVolume;
Qed nippruvaw inżidu d-disk fl-API, iżda nirċievu żball dwar l-impossibbiltà li titwettaq l-operazzjoni minħabba li d-disk huwa mmuntat;
Aħna nissejvjaw l-identifikatur tad-diska f'mappa li fiha d-diski li għalihom trid titwettaq l-operazzjoni taż-żieda. Hawn taħt, għall-qosor, aħna se nsejħu din il-mappa bħala volumeResizeRequired;
Neħħi manwalment il-pod li qed juża d-diska. Kubernetes se jerġa' jibda. Sabiex id-disk ma jkollux ħin biex jintrama (ControllerPublishVolume) qabel ma tlesti l-operazzjoni ta 'żieda meta tipprova timmonta, aħna niċċekkjaw li d-disk mogħti għadu fih volumeResizeRequired u jirritorna żball;
Is-sewwieq tas-CSI jipprova jerġa' jesegwixxi l-operazzjoni ta' resize. Jekk l-operazzjoni kienet ta 'suċċess, imbagħad neħħi d-diska minn volumeResizeRequired;
Għax ID tad-disk hija nieqsa minn volumeResizeRequired, ControllerPublishVolume jgħaddi b'suċċess, id-diska tiġi mmuntata, il-powd jibda.
Kollox jidher sempliċi biżżejjed, iżda bħal dejjem hemm in-nases. Tkabbar id-diski resizer estern, li f'każ ta 'żball waqt l-operazzjoni juża kju b'żieda esponenzjali fil-ħin ta' timeout sa 1000 sekonda:
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)},
)
}
Dan jista 'jwassal perjodikament fl-operazzjoni ta' espansjoni tad-diska tiġi estiża għal 15+ minuta u, għalhekk, il-pod korrispondenti ma jkunx disponibbli.
L-unika għażla li pjuttost faċilment u mingħajr tbatija ppermettietna nnaqqsu l-perijodi ta’ waqfien potenzjali kienet l-użu tal-verżjoni tagħna ta’ external-resizer b’limitu massimu ta’ timeout f'5 sekondi:
Aħna ma qisniex meħtieġ li tinbeda b'mod urġenti diskussjoni u garża l-externa-resizer, għaliex offline resize tad-diski huwa throwback li dalwaqt se jisparixxi mill-fornituri kollha tal-cloud.
Kif tibda tuża?
Is-sewwieq huwa appoġġjat fuq Kubernetes verżjoni 1.15 u ogħla. Biex ix-xufier jaħdem, iridu jiġu ssodisfati r-rekwiżiti li ġejjin:
Bandiera --allow-privileged issettjat għall-valur true għal server API u kubelet;
Inkluż --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true għal server API u kubelet;
Propagazzjoni tal-muntanji (propagazzjoni impunjazzjoni) għandhom ikunu attivati fuq il-cluster. Meta tuża Docker, id-daemon għandu jiġi kkonfigurat biex jippermetti muntaġġi kondiviżi.
Il-passi kollha meħtieġa għall-installazzjoni nnifisha deskritt f'README. L-installazzjoni tinvolvi l-ħolqien ta 'oġġetti f'Kubernetes minn manifesti.
Biex ix-xufier jaħdem ser ikollok bżonn dan li ġej:
Biex jinteraġixxi mal-API Yandex.Cloud, is-sewwieq CSI juża kont tas-servizz. Fil-manifest, Sigriet għandu jiġi mgħoddi ċwievet awtorizzati mill-kont tas-servizz. Fid-dokumentazzjoni deskritt, kif toħloq kont tas-servizz u tikseb ċwievet.
Kollox f 'Kollox - ipprova, u se nkunu ferħanin li nirċievu feedback u kwistjonijiet ġoddajekk tiltaqa' ma' xi problemi!
Aktar appoġġ
B’riżultat ta’ dan, nixtiequ ninnutaw li dan ix-xufier tas-CSI implimentajna mhux b’xewqa kbira li nieħdu gost bil-miktub tal-applikazzjonijiet fil-Go, iżda minħabba ħtieġa urġenti fi ħdan il-kumpanija. Ma jidhirx prattiku għalina li nżommu l-implimentazzjoni tagħna stess, għalhekk jekk Yandex juri interess u jiddeċiedi li jkompli jappoġġja lis-sewwieq, inkunu kuntenti li nittrasferixxu r-repożitorju lilhom.
Barra minn hekk, Yandex probabbilment għandu l-implimentazzjoni tiegħu stess tas-sewwieq CSI fil-cluster Kubernetes ġestit tiegħu, li jista 'jiġi rilaxxat f'Open Source. Aħna naraw ukoll din l-għażla ta 'żvilupp bħala favorevoli - il-komunità tkun tista' tuża sewwieq ippruvat minn fornitur tas-servizz, u mhux minn kumpanija ta 'parti terza.