Peb qhov kev paub dhau los hauv kev tsim CSI tsav tsheb hauv Kubernetes rau Yandex.Cloud

Peb qhov kev paub dhau los hauv kev tsim CSI tsav tsheb hauv Kubernetes rau Yandex.Cloud

Peb zoo siab tshaj tawm tias Flan tab tom nthuav nws txoj kev koom tes rau Open Source cov cuab yeej rau Kubernetes los ntawm kev tso tawm alpha version ntawm CSI tsav tsheb (Container Storage Interface) rau Yandex.Cloud.

Tab sis ua ntej mus rau cov ntsiab lus ntawm kev siv, cia peb teb cov lus nug vim li cas qhov no xav tau txhua lub sijhawm thaum Yandex twb muaj kev pabcuam. Tswj Kev Pabcuam rau Kubernetes.

Taw qhia

Vim li cas qhov no?

Hauv peb lub tuam txhab, txij li thaum pib siv Kubernetes hauv kev tsim khoom (piv txwv li tau ntau xyoo tam sim no), peb tau tsim peb tus kheej cov cuab yeej (deckhouse), uas, los ntawm txoj kev, peb kuj npaj yuav sai sai no ua qhov Open Source project. . Nrog nws cov kev pab, peb niaj hnub teeb tsa thiab teeb tsa tag nrho peb pawg, thiab tam sim no muaj ntau dua 100 ntawm lawv, ntawm ntau yam kev teeb tsa kho vajtse thiab hauv txhua qhov kev pabcuam huab.

Cov pawg uas siv deckhouse muaj tag nrho cov khoom tsim nyog rau kev ua haujlwm: kev sib npaug, kev soj ntsuam nrog cov kab kos yooj yim, kev ntsuas thiab kev ceeb toom, cov neeg siv kev lees paub los ntawm cov chaw muab kev pabcuam sab nraud rau kev nkag mus rau tag nrho cov dashboards, thiab lwm yam. Tsis muaj qhov taw tes hauv kev txhim kho xws li "pum pem" pawg hauv kev tswj hwm kev daws teeb meem, vim tias qhov no feem ntau tsis tuaj yeem ua tsis tau lossis yuav ua rau qhov xav tau los cuam tshuam ib nrab ntawm cov khoom.

NB: Nov yog peb qhov kev paub dhau los, thiab nws yog qhov tshwj xeeb heev. Peb tsis muaj txoj hauv kev hais tias txhua tus yuav tsum xa Kubernetes pawg ntawm lawv tus kheej es tsis txhob siv cov kev daws teeb meem npaj txhij. Los ntawm txoj kev, peb tsis muaj kev paub tiag tiag hauv kev khiav hauj lwm Kubernetes los ntawm Yandex thiab peb yuav tsis muab ib qho kev ntsuam xyuas ntawm qhov kev pabcuam hauv tsab xov xwm no.

Nws yog dab tsi thiab rau leej twg?

Yog li, peb twb tau tham txog txoj hauv kev niaj hnub no rau kev khaws cia hauv Kubernetes: CSI ua haujlwm li cas? ΠΈ lub zej zog tuaj li cas rau txoj kev no.

Tam sim no, ntau tus neeg muab kev pabcuam huab loj tau tsim cov tsav tsheb rau kev siv lawv cov huab disks li Persistent Volume hauv Kubernetes. Yog tias tus neeg muag khoom tsis muaj tus tsav tsheb zoo li no, tab sis tag nrho cov haujlwm tsim nyog tau muab los ntawm API, ces tsis muaj dab tsi tiv thaiv koj los ntawm kev siv tus tsav tsheb koj tus kheej. Nov yog qhov tshwm sim nrog Yandex.Cloud.

Peb coj los ua lub hauv paus rau kev txhim kho CSI tsav tsheb rau DigitalOcean huab thiab ob peb lub tswv yim los ntawm tsav tsheb rau GCP, txij li kev cuam tshuam nrog API ntawm cov huab (Google thiab Yandex) muaj ntau qhov sib xws. Hauv particular, API thiab GCP, thiab at Yandex xa ib yam khoom Operation txhawm rau taug qab cov xwm txheej ntawm kev ua haujlwm ntev (piv txwv li, tsim lub disk tshiab). Txhawm rau cuam tshuam nrog Yandex.Cloud API, siv Yandex.Cloud mus SDK.

Qhov tshwm sim ntawm txoj haujlwm ua tiav luam tawm ntawm GitHub thiab tej zaum yuav muaj txiaj ntsig zoo rau cov neeg uas, vim li cas, siv lawv tus kheej Kubernetes kev teeb tsa ntawm Yandex.Cloud virtual tshuab (tab sis tsis yog npaj ua pawg tswj hwm) thiab xav siv (txiav) disks los ntawm CSI.

Kev siv

Cov Ntaos Ntaus

Tam sim no tus tsav tsheb txhawb nqa cov haujlwm hauv qab no:

  • Ordering disks nyob rau hauv tag nrho cov cheeb tsam ntawm pawg raws li topology ntawm cov nodes hauv pawg;
  • Tshem tawm cov ntawv xaj yav dhau los;
  • Offline resize rau disks (Yandex.Cloud tsis txhawb nce cov disks uas txuas rau lub tshuab virtual). Rau cov ntaub ntawv hais txog yuav ua li cas tus tsav tsheb yuav tsum tau hloov kho kom hloov kho kom tsis txhob mob, saib hauv qab no.

Nyob rau hauv lub neej yav tom ntej, peb npaj yuav siv kev txhawb nqa rau kev tsim thiab tshem tawm cov duab thaij duab.

Lub ntsiab nyuaj thiab yuav ua li cas kov yeej nws

Qhov tsis muaj peev xwm ua kom cov disks hauv lub sijhawm tiag tiag hauv Yandex.Cloud API yog qhov kev txwv uas ua rau muaj kev cuam tshuam rau kev hloov pauv rau PV (Persistent Volume): nyob rau hauv cov ntaub ntawv no, nws yog ib qho tsim nyog yuav tsum tau tso tseg daim ntawv thov pod uas siv lub disk yuav tsum nres, thiab qhov no tuaj yeem ua rau cov ntawv thov downtime.

Raws li CSI specifications, yog CSI maub los tshaj tawm tias nws tuaj yeem hloov kho disks tsuas yog "offline" (VolumeExpansion.OFFLINE), ces tus txheej txheem ntawm nce lub disk yuav tsum mus zoo li no:

Yog hais tias lub plugin tsuas muaj VolumeExpansion.OFFLINE expansion peev thiab ntim yog tam sim no luam tawm los yog muaj nyob rau ntawm ib tug ces ControllerExpandVolume Yuav tsum tau hu tsuas yog tom qab ob qho tib si:

  • Lub plugin muaj xws li PUBLISH_UNPUBLISH_VOLUME muaj peev xwm thiab ControllerUnpublishVolume tau invoked tiav.

LOS YOG LEEJ TWG

  • Lub plugin tsis muaj xws li PUBLISH_UNPUBLISH_VOLUME muaj peev xwm, lub plugin muaj node STAGE_UNSTAGE_VOLUME muaj peev xwm, thiab NodeUnstageVolume tau ua tiav lawm.

LOS YOG LEEJ TWG

  • Lub plugin tsis muaj xws li PUBLISH_UNPUBLISH_VOLUME muaj peev xwm, los yog node STAGE_UNSTAGE_VOLUME muaj peev xwm, thiab NodeUnpublishVolume tau ua tiav lawm.

Qhov no tseem ceeb txhais tau tias koj yuav tsum tau tshem lub disk los ntawm lub tshuab virtual ua ntej nthuav nws.

Txawm li cas los xij, hmoov tsis kev paub CSI specification ntawm sidecars tsis ua raws li cov cai no:

  • Nyob rau hauv ib tug sidecar thawv csi-attacher, uas yuav tsum tau lub luag hauj lwm rau lub xub ntiag ntawm qhov yuav tsum tau sib txawv ntawm mounts, no functionality yog tsuas yog tsis siv nyob rau hauv lub offline resize. Kev sib tham txog qhov no tau pib no.
  • Yuav ua li cas yog lub thawv sidecar nyob rau hauv cov ntsiab lus no? Lub CSI plugin nws tus kheej tsis cuam tshuam nrog Kubernetes API, tab sis tsuas yog teb rau gRPC hu xa mus rau nws los ntawm cov thawv sab hauv. Tseeb tab tom tsim los ntawm Kubernetes zej zog.

Hauv peb cov ntaub ntawv (CSI plugin), kev ua haujlwm ntawm kev nce lub disk zoo li no:

  1. Peb tau txais gRPC hu ControllerExpandVolume;
  2. Peb tab tom sim nce lub disk hauv API, tab sis peb tau txais qhov yuam kev ntawm qhov ua tsis tau zoo ntawm kev ua haujlwm vim tias lub disk tau teeb tsa;
  3. Peb khaws cov cim disk hauv daim ntawv qhia, uas muaj cov disks uas yuav tsum tau ua kom nce kev ua haujlwm. Hauv qab no, rau brevity, peb yuav hu rau daim ntawv qhia no li volumeResizeRequired;
  4. Manually tshem cov pod uas siv lub disk. Kubernetes yuav rov pib dua nws. Kom lub disk tsis muaj sij hawm los mount (ControllerPublishVolume) ua ntej ua tiav qhov kev ua haujlwm nce thaum sim mount, peb xyuas tias cov disk muab tseem nyob hauv volumeResizeRequired thiab rov qab ua yuam kev;
  5. Tus neeg tsav tsheb CSI sim rov ua qhov kev hloov pauv hloov pauv. Yog tias qhov kev ua haujlwm tau ua tiav, ces tshem tawm lub disk los ntawm volumeResizeRequired;
  6. Vim Disk ID ploj lawm volumeResizeRequired, ControllerPublishVolume kis tau zoo, lub disk yog mounted, lub pod pib.

Txhua yam zoo li yooj yim txaus, tab sis raws li ib txwm muaj pitfalls. Txhim kho disks sab nraud-resizer, uas yog qhov yuam kev thaum lub sijhawm ua haujlwm siv ib kab nrog rau kev nce ntxiv hauv lub sijhawm ncua mus txog 1000 vib nas this:

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

Qhov no tuaj yeem ua rau lub sijhawm ua haujlwm ntawm kev nthuav dav disk txuas ntxiv rau 15+ feeb thiab, yog li, cov khoom sib txuas tsis muaj.

Tib qho kev xaiv uas yooj yim heev thiab tsis mob ua rau peb txo qis lub sijhawm poob yog kev siv peb cov version ntawm sab nraud-resizer nrog lub sijhawm ntev tshaj plaws. hauv 5 vib nas this:

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

Peb tsis tau xav tias nws yuav tsum tau ua sai sai rau kev sib tham thiab kho qhov chaw sab nraud-resizer, vim tias offline resize ntawm disks yog qhov cuam tshuam uas yuav sai sai ploj ntawm txhua tus neeg muab kev pabcuam huab.

Yuav pib siv li cas?

Tus tsav tsheb tau txais kev txhawb nqa ntawm Kubernetes version 1.15 thiab siab dua. Rau tus neeg tsav tsheb ua haujlwm, yuav tsum ua raws li cov cai hauv qab no:

  • Chij --allow-privileged teem rau tus nqi true rau API server thiab kubelet;
  • suav nrog --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true rau API server thiab kubelet;
  • Mount propagation (mount propagation) yuav tsum tau enabled ntawm pawg. Thaum siv Docker, daemon yuav tsum tau teeb tsa kom tso cai sib koom ua ke.

Tag nrho cov kauj ruam tsim nyog rau lub installation nws tus kheej tau piav qhia hauv README. Kev teeb tsa suav nrog tsim cov khoom hauv Kubernetes los ntawm kev tshwm sim.

Rau tus tsav tsheb ua haujlwm koj yuav xav tau cov hauv qab no:

  • Qhia kom meej tus lej cim npe hauv qhov manifest (folder-id) Yandex.Cloud (saib cov ntaub ntawv);
  • Txhawm rau cuam tshuam nrog Yandex.Cloud API, tus tsav tsheb CSI siv tus lej pabcuam. Nyob rau hauv Secret manifest, koj yuav tsum dhau tso cai yuam sij los ntawm tus account kev pabcuam. Hauv cov ntaub ntawv piav, yuav ua li cas los tsim ib qho kev pabcuam account thiab tau txais cov yuam sij.

Txhua yam - sim nws, thiab peb yuav zoo siab tau txais cov lus qhia thiab cov teeb meem tshiabyog koj ntsib teeb meem!

Kev txhawb nqa ntxiv

Yog li ntawd, peb xav kom nco ntsoov tias peb tau ua raws li tus neeg tsav tsheb CSI no tsis yog tawm ntawm lub siab xav kom muaj kev lom zem sau ntawv hauv Go, tab sis vim yog qhov xav tau ceev hauv lub tuam txhab. Nws tsis zoo li qhov ua tau zoo rau peb kom tswj hwm peb tus kheej kev siv, yog li yog tias Yandex pom kev txaus siab thiab txiav txim siab txuas ntxiv txhawb nqa tus tsav tsheb, peb yuav zoo siab xa cov chaw cia rau lawv.

Tsis tas li ntawd, Yandex tej zaum yuav muaj nws tus kheej kev siv ntawm CSI tsav tsheb hauv nws cov tswj Kubernetes pawg, uas tuaj yeem tso tawm hauv Open Source. Peb kuj pom qhov kev xaiv kev txhim kho no yog qhov muaj txiaj ntsig zoo - cov zej zog yuav siv tau cov neeg tsav tsheb pov thawj los ntawm cov chaw muab kev pabcuam, thiab tsis yog los ntawm lub tuam txhab thib peb.

PS

Nyeem kuj ntawm peb blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib