
Jemi të lumtur të njoftojmë se kompania «Flant» po kontribuon edhe më shumë në mjetet Open Source për Kubernetes duke lëshuar (Container Storage Interface) për Yandex.Cloud.
Por para se të kalojmë te detajet e realizimit, le të përgjigjemi në pyetjen se pse është e nevojshme kjo, kur Yandex tashmë ka shërbimin .
Hyrje
Pse është kjo?
Brenda kompanisë sonë, që nga fillimi i përdorimit të Kubernetes në prodhim (dmth. për disa vite), ka zhvilluar një mjet të vetin (deckhouse), i cili, për fat të mirë, po planifikojmë gjithashtu ta bëjmë të disponueshëm si projekt Open Source së shpejti. Me ndihmën e tij ne konfiguroni dhe iniciativat tona në mënyrë uniform për të gjitha klastra tona, të cilat aktualisht janë më shumë se 100, dhe përsëri janë në konfiguracione të ndryshme harduerike dhe në të gjitha shërbimet e disponueshme të cloud.
Klastrat qĂ« pĂ«rdorin deckhouse kanĂ« tĂ« gjitha komponentĂ«t e nevojshĂ«m pĂ«r funksionimin: balancuesit, monitorimin me grafika, metrika dhe alerte tĂ« pĂ«rshtatshme, autentifikimin e pĂ«rdoruesve pĂ«rmes ofruesve tĂ« jashtĂ«m pĂ«r akses nĂ« tĂ« gjitha dashboard-et dhe kĂ«shtu me radhĂ«. NjĂ« klaster i tillĂ« i âpĂ«rmirĂ«suarâ nuk ka kuptim tĂ« vendoset nĂ« njĂ« zgjidhje tĂ« menaxhuar, pasi shpeshherĂ« Ă«shtĂ« e pamundur, ose do tĂ« çonte nĂ« nevojĂ«n pĂ«r tĂ« çaktivizuar gjysmĂ«n e komponenteve.
NB: Kjo është përvoja jonë, dhe ajo është mjaft e veçantë. Ne aspak nuk po sigurojmë se gjithkush duhet të merret vetë me vendosjen e klastra Kubernetes në vend që të përdorë zgjidhjet e gatshme. Sidoqoftë, nuk kemi përvojë reale të përdorimit të Kubernetes nga Yandex dhe nuk do ta vlerësojmë këtë shërbim në artikullin e tanishëm.
ĂfarĂ« Ă«shtĂ« kjo dhe pĂ«r kĂ«?
Kështu, ne tashmë kemi folur për qasjen moderne ndaj ruajtjes në Kubernetes: dhe në këtë qasje.
Aktualisht, shumĂ« ofrues tĂ« mĂ«dhenj tĂ« shĂ«rbimeve tĂ« cloud kanĂ« zhvilluar driver-a pĂ«r tĂ« pĂ«rdorur diskĂ«t e tyre âcloudâ si Volume tĂ« PĂ«rhershĂ«m nĂ« Kubernetes. NĂ«se njĂ« ofrues nuk ka njĂ« driver tĂ« tillĂ«, por tĂ« gjitha funksionet e nevojshme ofrohen pĂ«rmes API-sĂ«, atĂ«herĂ« nuk ka asgjĂ« qĂ« ndalon realizimin e driver-it me forcat tona. KĂ«shtu ndodhi edhe me Yandex.Cloud.
Për bazën e zhvillimit ne e morëm dhe disa ide nga , pasi ndërveprimi me API-në e këtyre cloud-ëve (Google dhe Yandex) ka disa ngjashmëri. Në veçanti, API janë siç janë , dhe kthen objekti Operacioni për të ndjekur statusin e operacioneve të gjatë (p.sh., krijimi i një disku të ri). Për t'u bashkëvepruar me API-në e Yandex.Cloud përdoret .
Rezultati i punës së kryer dhe mund të jetë i dobishëm për ata që për një arsye apo tjetër përdorin një instalim të vetin të Kubernetes në makinat virtuale të Yandex.Cloud (por jo një klaster të menaxhuar) dhe do të dëshironin të përdornin (porosinin) disqet përmes CSI.
Implementimi
Veçoritë kryesore
Në këtë moment, driveri mbështet funksionet e mëposhtme:
- Porosinë e disqeve në të gjitha zonat e klasterit sipas topologjisë së nyjave të disponueshme në klaster;
- Fshirjen e disqeve të porositura më parë;
- Rritjen offline për disqet (Yandex.Cloud rritja e disqeve që janë të montuara në makinën virtuale). Për mënyrën se si duhej të ribëhej driveri që të realizohej sa më pa dhembje rritja, shih më poshtë.
Në të ardhmen planifikohet të implementohet mbështetje për krijimin dhe fshirjen e snapshot-eve të disqeve.
Sfidat kryesore dhe kapërcimi i tyre
Mungesa nĂ« API-nĂ« e Yandex.Cloud e mundĂ«sisĂ« pĂ«r tĂ« rritur disqet nĂ« kohĂ« reale â njĂ« kufizim qĂ« e vĂ«shtirĂ«son operacionin e rritjes pĂ«r PV (VĂ«llimi i PĂ«rhershĂ«m): sepse nĂ« atĂ« rast Ă«shtĂ« e nevojshme qĂ« pod-i i aplikacionit qĂ« pĂ«rdor disku tĂ« ndalet, gjĂ« qĂ« mund tĂ« shkaktojĂ« ndalimin e aplikacionit.
Sipas , nëse CSI-kontrollori raporton se di të bëjë rritjen e disqeve vetëm "në offline" (VolumeExpansion.OFFLINE), procesi i rritjes së disku duhet të kalojë kështu:
Nëse plugin-i ka vetëm
VolumeExpansion.OFFLINEkapacitetin e rritjes dhe vĂ«llimi aktualisht Ă«shtĂ« i publikuar ose i disponueshĂ«m nĂ« njĂ« nyje atĂ«herĂ«ControllerExpandVolumeDUHET tĂ« thirret VETĂM pasi:
- Plugin-i ka
PUBLISH_UNPUBLISH_VOLUMEkapacitetin dheControllerUnpublishVolumeështë thirrur me sukses.OSE PAS
- Plugin-i NUK ka
PUBLISH_UNPUBLISH_VOLUMEkapacitetin e kontrollit, plugin-i ka nyjeSTAGE_UNSTAGE_VOLUMEkapacitetin, dheNodeUnstageVolumeështë përfunduar me sukses.OSE PAS
- Plugin-i NUK ka
PUBLISH_UNPUBLISH_VOLUMEkapacitetin, as nyjaSTAGE_UNSTAGE_VOLUMEkapacitetin, dheNodeUnpublishVolumenuk është përfunduar me sukses.
Në thelb, kjo do të thotë se është e nevojshme të shkëputet disku nga makina virtuale përpara se ta rrisim.
Megjithatë, fatkeqësisht, implementim specifikimet e CSI përmes sidecar-ve nuk i përmbushin këto kërkesa:
- NĂ« konteinerin sidecar
csi-attacher, i cili duhet tĂ« jetĂ« pĂ«rgjegjĂ«s pĂ«r sigurimin e hapĂ«sirĂ«s sĂ« nevojshme midis montimeve, gjatĂ« rritjes offline thjesht nuk Ă«shtĂ« implementuar ky funksionalitet. Diskutimin pĂ«r kĂ«tĂ« e iniciuan . - ĂfarĂ« Ă«shtĂ« nĂ« tĂ« vĂ«rtetĂ« njĂ« kontenier sidecar nĂ« kĂ«tĂ« kontekst? VetĂ« plugini CSI nuk merret me ndĂ«rveprimin me API-nĂ« e Kubernetes, por thjesht reagon ndaj thirrjeve gRPC qĂ« i dĂ«rgojnĂ« kontenierĂ«t sidecar. Komuniteti Kubernetes.
Në rastin tonë (plugini CSI) operacioni i rritjes së diskut duket si më poshtë:
- Merrni thirrjen gRPC.
ControllerExpandVolume; - Përpiqemi të rrisim diskun në API, por marrim një gabim për pamundësinë e kryerjes së operacionit, pasi disku është i montuar;
- Ruajmë identifikuesin e diskut në një hartë që përmban diskët për të cilët duhet të kryhet operacioni i rritjes. Më pas, për shkak të shkurtësisë, do ta quajmë këtë hartë si
volumeResizeRequired.; - Dorezoni manualisht pod-in që përdor disku. Kubernetes do ta ri-startojë atë. Për të parandaluar që disku të montojë përpara përfundimit të operacionit të rritjes gjatë përpjekjes për të montuar, kontrollojmë që ky disk të jetë akoma në
ControllerPublishVolume) e të kthejmë një gabim;volumeResizeRequired.Driver-i CSI përpiqet të rrisë përsëri operacionin. Nëse operacioni kalon, atëherë e hiqni diskun nga - Pasi identifikuesi i diskut mungon në
volumeResizeRequired.; - kalon me sukses, disku monton, pod-i startohet.
volumeResizeRequired.,ControllerPublishVolumeE gjithë kjo duket mjaft e thjeshtë, por si gjithmonë ka pengesat e veta. Rritja e diskëve është përgjegjësia e
external-resizer, me rritje eksponenciale të kohës së skadimit deri në 1000 sekonda: Kjo mund të çojë përherë në rritjen e operacionit të diskut të zgjasë 15+ minuta dhe, kështu, të shkaktojë mungesë të përkatës pod-i.
Opcioni i vetëm që na lejojë të reduktojmë kohën e mundshme të ndërprerjes ishte përdorimi i versionit tonë të external-resizer me kufizim maksimal të skadimitnë 5 sekonda.
workqueue.NewItemExponentialFailureRateLimiter(5*time.Millisecond, 5*time.Second) :
Si mund të filloni përdorimin?Driver-i mbështetet në Kubernetes versionin 1.15 dhe më lart. Për të funksionuar, duhet të përmbushen kërkesat e mëposhtme:
Si si filloni ta përdorni?
Drejtuesi mbështetet në Kubernetes versionin 1.15 dhe më lart. Për të punuar me drejtuesin duhet të plotësohen kërkesat e mëposhtme:
- Flamuri
--allow-privilegedi vendosur në vlerëntruepër API-në e serverit dhe kubelet; - Aktivizuar
--feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=truepër API-në e serverit dhe kubelet; - Përhapja e montimit () duhet të aktivizohet në klaster. Kur përdoret Docker, demoni duhet të konfigurohet në mënyrë që të lejojë objektet e përbashkëta të montimit (montime të ndara).
Të gjitha hapat e nevojshëm për instalimin e tij . Instalimi përbën krijimin e objekteve në Kubernetes nga manifestet.
Për të punuar me drejtuesin do t'ju nevojitet:
- Të specifikoni në manifest identifikuesin e direktoriumit (
folder-id) të Yandex.Cloud (); - Për të ndërvepruar me API-në e Yandex.Cloud në drejtuesin CSI përdoret një llogari shërbimi. Në manifestin Secret duhet të kaloni të llogarisë së shërbimit. Në dokumentacionin , si të krijoni një llogari shërbimi dhe të merrni çelësat.
NĂ« pĂ«rgjithĂ«si â , dhe ne do tĂ« jemi tĂ« lumtur pĂ«r feedbackun dhe , nĂ«se ndoni ndonjĂ« problem!
Mbështetje e mëtejshme
Si përfundim, do të dëshironim të theksonim se këtë drejtues CSI e kemi zhvilluar jo nga dëshira për të luajtur me shkrimin e aplikacioneve në Go, por për një nevojë të ngutshme brenda kompanisë. Të mbash një realizim të tillë të vetin nuk na duket e arsyeshme, prandaj, nëse Yandex shfaq interes dhe vendos të vazhdojë mbështetje për drejtuesin, atëherë ne me kënaqësi do ta transferojmë depozitën në dispozitat e tyre.
PĂ«r mĂ« tepĂ«r, ndoshta Yandex nĂ« klasterin e menaxhuar Kubernetes ka njĂ« realizim tĂ« vetin tĂ« drejtuesit CSI, tĂ« cilin mund ta lĂ«shojĂ« nĂ« Open Source. Ky variant i zhvillimit gjithashtu na duket i favorshĂ«m â komuniteti do tĂ« jetĂ« nĂ« gjendje tĂ« pĂ«rdorĂ« njĂ« drejtues tĂ« provuar nga ofruesi i shĂ«rbimeve, jo nga njĂ« kompani e jashtme.
P.S.
Lexoni gjithashtu në blogun tonë:
- «»;
- «»;
- «»;
- «».
Burimi: habr.com
