Ny traikefanay amin'ny famolavolana mpamily CSI amin'ny Kubernetes ho an'ny Yandex.Cloud

Ny traikefanay amin'ny famolavolana mpamily CSI amin'ny Kubernetes ho an'ny Yandex.Cloud

Faly izahay manambara fa manitatra ny fandraisany anjara amin'ny fitaovana Open Source ho an'ny Kubernetes i Flant amin'ny alΓ lan'ny famoahana azy. dikan-alfa an'ny mpamily CSI (Interface fitahirizana kaontenera) ho an'ny Yandex.Cloud.

Saingy alohan'ny hirosoana amin'ny antsipirian'ny fampiharana, andeha hovaliantsika ny fanontaniana hoe maninona no ilaina izany raha efa manana serivisy i Yandex. Serivisy mitantana ho an'ny Kubernetes.

fampidirana

Nahoana izany?

Ao anatin'ny orinasanay, hatrany am-piandohan'ny fampiasana Kubernetes amin'ny famokarana (izany hoe nandritra ny taona maromaro izao), dia namolavola ny fitaovanay manokana izahay (deckhouse), izay, raha ny marina, dia mikasa ny hanokatra azy tsy ho ela ho tetikasa Open Source. . Miaraka amin'ny fanampiany dia manamboatra sy manamboatra ny cluster rehetra izahay, ary amin'izao fotoana izao dia efa misy mihoatra ny 100 amin'izy ireo, amin'ny karazana fitaovana maro samihafa ary amin'ny serivisy rahona rehetra misy.

Ny kluster mampiasa deckhouse dia manana ny singa rehetra ilaina amin'ny fampandehanana: mpifandanja, fanaraha-maso miaraka amin'ny tabilao mety, metrika sy fanairana, fanamarinana ny mpampiasa amin'ny alΓ lan'ny mpamatsy ivelany mba hidirana amin'ny dashboard rehetra, sns. Tsy misy dikany ny fametrahana cluster "pumped up" toy izany amin'ny vahaolana voatanisa, satria matetika izany dia tsy azo atao na hitarika ho amin'ny filΓ na hanalana ny antsasaky ny singa.

NB: Ity no traikefanay, ary tena voafaritra. Tsy manoro hevitra mihitsy izahay fa ny tsirairay dia tokony hametraka vondrona Kubernetes samirery fa tsy mampiasa vahaolana efa vita. Raha ny marina, tsy manana traikefa tena izy amin'ny fampiasana Kubernetes avy amin'ny Yandex izahay ary tsy hanome fanombanana momba ity serivisy ity ato amin'ity lahatsoratra ity.

Inona izany ary ho an'iza?

Noho izany, efa niresaka momba ny fomba maoderina amin'ny fitahirizana ao Kubernetes izahay: ahoana ny fiasan'ny CSI? ΠΈ ahoana no nahatongavan'ny fiaraha-monina amin'ity fomba ity.

Amin'izao fotoana izao, mpanome tolotra rahona lehibe maro no namolavola mpamily hampiasa ny kapila rahona ho toy ny Volume Persistent ao amin'ny Kubernetes. Raha tsy manana mpamily toy izany ny mpamatsy, fa ny asa ilaina rehetra dia omena amin'ny alΓ lan'ny API, dia tsy misy manakana anao tsy hampihatra ny mpamily. Izany no nitranga tamin'ny Yandex.Cloud.

Noraisinay ho fototry ny fampandrosoana mpamily CSI ho an'ny rahona DigitalOcean ary hevitra roa avy amin'ny mpamily ho an'ny GCP, satria ny fifandraisana amin'ny API amin'ireo rahona ireo (Google sy Yandex) dia manana fitoviana maromaro. Indrindra indrindra, ny API sy GCP, ary amin'ny Yandex mamerina zavatra iray Operation hanara-maso ny toetry ny asa maharitra (ohatra, ny famoronana kapila vaovao). Raha hifanerasera amin'ny Yandex.Cloud API, ampiasao Yandex.Cloud Go SDK.

Ny vokatry ny asa vita navoaka tao amin'ny GitHub ary mety ilaina ho an'ireo izay, noho ny antony, mampiasa ny fametrahana azy manokana Kubernetes amin'ny milina virtoaly Yandex.Cloud (fa tsy cluster voatanisa efa vonona) ary te hampiasa kapila (baiko) amin'ny alalan'ny CSI.

fanatanterahana

Toe-javatra fototra

Amin'izao fotoana izao ny mpamily dia manohana ireto asa manaraka ireto:

  • Famandrihana disks amin'ny faritra rehetra amin'ny cluster araka ny topologie ny nodes ao amin'ny cluster;
  • Esory ny kapila voabaiko teo aloha;
  • FanovΓ na an-tserasera ho an'ny kapila (Yandex.Cloud aza manohana mampitombo ny kapila izay napetraka amin'ny milina virtoaly). Raha mila fanazavana momba ny fomba tsy maintsy novaina ny mpamily mba hahatonga ny fanovana habe ho tsy maharary araka izay azo atao, jereo eto ambany.

Amin'ny ho avy, mikasa ny hampihatra fanohanana amin'ny famoronana sy famafana ny sary kapila izahay.

Ny fahasarotana lehibe sy ny fomba handresena izany

Ny tsy fahampian'ny fahafaha-mampitombo ny kapila amin'ny fotoana tena izy ao amin'ny Yandex.Cloud API dia fetra izay manasarotra ny fandidiana fanovana ny haben'ny PV (Persistent Volume): amin'ity tranga ity dia ilaina ny mijanona ny pod fampiharana mampiasa ny disk, ary mety hiteraka fampiharana amin'ny fotoana fiatoana izany.

Araka ny Ireo singa mifandraika amin'ny CSI, raha mitatitra ny mpanara-maso ny CSI fa afaka manova ny haben'ny kapila raha tsy "tsy an-tserasera" (VolumeExpansion.OFFLINE), dia tokony ho toy izao ny dingan'ny fampitomboana ny kapila:

Raha misy ihany ny plugin VolumeExpansion.OFFLINE Ny fahafahan'ny fanitarana sy ny volume dia avoaka na azo alaina amin'ny node iray avy eo ControllerExpandVolume TSY MAINTSY antsoina IHANY rehefa avy:

  • Ny plugin dia manana controller PUBLISH_UNPUBLISH_VOLUME fahaiza-manao ary ControllerUnpublishVolume voantso soa aman-tsara.

RAHA TSY IZANY

  • TSY manana controller ny plugin PUBLISH_UNPUBLISH_VOLUME fahaiza-manao, ny plugin dia manana node STAGE_UNSTAGE_VOLUME fahaiza-manao, ary NodeUnstageVolume vita soa aman-tsara.

RAHA TSY IZANY

  • TSY manana controller ny plugin PUBLISH_UNPUBLISH_VOLUME fahaiza-manao, na node STAGE_UNSTAGE_VOLUME fahaiza-manao, ary NodeUnpublishVolume nahavita soa aman-tsara.

Midika izany fa mila manaisotra ny kapila amin'ny milina virtoaly ianao alohan'ny hanitarana azy.

Na izany aza, indrisy fampiharana Ny famaritana CSI amin'ny alΓ lan'ny sidecars dia tsy mahafeno ireto fepetra ireto:

  • Ao anaty container sidecar csi-attacher, izay tokony ho tompon'andraikitra amin'ny fisian'ny elanelana ilaina eo amin'ny mounts, ity fampiasa ity dia tsy ampiharina amin'ny fanovana endrika ivelany. Natomboka ny dinika momba izany eto.
  • Inona marina no atao hoe container sidecar amin'ity toe-javatra ity? Ny plugin CSI mihitsy dia tsy mifandray amin'ny Kubernetes API, fa mamaly ny antson'ny gRPC nalefan'ny kaontenera sidecar ihany. farany novolavolaina avy amin'ny vondrom-piarahamonina Kubernetes.

Amin'ny tranga misy antsika (plugin CSI), toy izao ny fiasan'ny fampitomboana ny kapila:

  1. Mahazo antso gRPC izahay ControllerExpandVolume;
  2. Miezaka mampitombo ny kapila ao amin'ny API izahay, saingy mahazo fahadisoana momba ny tsy fahafahan'ny fanatanterahana ny fandidiana satria ny kapila dia napetraka;
  3. Mitahiry ny famantarana ny kapila ao anaty sari-tany izahay, izay misy ireo kapila izay tokony hanaovana ny fampitomboana. Eto ambany, raha hafohezina, dia hiantso ity sari-tany ity ho volumeResizeRequired;
  4. Esory amin'ny tanana ny pod izay mampiasa ny kapila. Hanomboka izany indray ny Kubernetes. Mba tsy hanam-potoana hametahana ny kapila (ControllerPublishVolume) alohan'ny hamitana ny asa fampitomboana rehefa manandrana mametaka, dia manamarina fa mbola ao ilay kapila nomena volumeResizeRequired ary mamerina fahadisoana;
  5. Ny mpamily CSI dia manandrana manatanteraka indray ny fandidiana fanovana habe. Raha nahomby ny fandidiana dia esory ny kapila volumeResizeRequired;
  6. SATRIA Tsy misy ID kapila avy amin'ny volumeResizeRequired, ControllerPublishVolume mandalo soa aman-tsara, ny kapila dia nitaingina, ny pod manomboka.

Toa tsotra ny zava-drehetra, fa toy ny mahazatra dia misy fandrika. Manitatra kapila ivelany-resizer, izay raha misy hadisoana mandritra ny fandidiana mampiasa filaharana miaraka amin'ny fisondrotry ny fotoana fiatoana hatramin'ny 1000 segondra:

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

Izany dia mety hitarika tsindraindray ny asa fanitarana kapila hitarina mandritra ny 15+ minitra ary, noho izany, ny pod mifanaraka amin'izany dia tsy misy.

Ny hany safidy tena mora sy tsy misy fanaintainana namela anay hampihena ny mety ho fiatoana dia ny fampiasana ny dikan-teny ivelany-resizer misy fetra farany ambony indrindra. ao anatin'ny 5 segondra:

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

Tsy noheverinay fa ilaina ny manomboka fifanakalozan-dresaka maika sy mametaka ny resizer ivelany, satria ny fanovana ny disks ivelan'ny aterineto dia fiverenana tsy ho ela amin'ny mpamatsy rahona rehetra.

Ahoana no hanombohana mampiasa?

Ny mpamily dia tohanana amin'ny Kubernetes version 1.15 sy ambony. Mba hiasa ny mpamily dia tsy maintsy fenoina ireto fepetra manaraka ireto:

  • sainam-pirenena --allow-privileged napetraka ho sanda true ho an'ny mpizara API sy kubelet;
  • Tafiditra --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true ho an'ny mpizara API sy kubelet;
  • Fanaparitahana an-tendrombohitra (tendrombohitra fampielezana) dia tsy maintsy alefa amin'ny cluster. Rehefa mampiasa Docker, ny daemon dia tsy maintsy amboarina mba hamela ny tendrombohitra iombonana.

Ny dingana rehetra ilaina amin'ny fametrahana ny tenany voalaza ao amin'ny README. Ny fametrahana dia ny famoronana zavatra ao amin'ny Kubernetes avy amin'ny manifests.

Ho an'ny mpamily miasa dia mila ireto manaraka ireto ianao:

  • Ampidiro ao amin'ny manifest (folder-id) Yandex.Cloud (jereo ny antontan-taratasy);
  • Raha hifanerasera amin'ny Yandex.Cloud API dia mampiasa kaonty serivisy ny mpamily CSI. Ao amin'ny manifest dia tsy maintsy mandalo ny Secret fanalahidy nahazo alalana avy amin'ny kaonty serivisy. Ao amin'ny antontan-taratasy voalaza, ny fomba hamoronana kaonty serivisy sy hahazoana fanalahidy.

Rehefa nozohina - manandrana, ary ho faly izahay handray fanehoan-kevitra sy olana vaovaoraha sendra olana ianao!

Fanohanana fanampiny

Vokatr'izany, tianay ny manamarika fa tsy noho ny faniriana lehibe hifalifaly amin'ny fanoratana taratasy ao amin'ny Go no nametrahanay ity mpamily CSI ity, fa noho ny filana maika eo anivon'ny orinasa. Toa tsy azo ampiharina aminay ny mitazona ny fampiharana anay manokana, ka raha maneho fahalianana i Yandex ary manapa-kevitra ny hanohy hanohana ny mpamily, dia ho faly izahay hamindra ny tahiry ho azy ireo.

Fanampin'izany, mety manana ny fampiharana azy manokana ny mpamily CSI ao amin'ny cluster Kubernetes mitantana azy i Yandex, izay azo avoaka amin'ny Open Source. Hitanay fa mety ihany koa ity safidy fampandrosoana ity - ny vondrom-piarahamonina dia afaka mampiasa mpamily efa voaporofo avy amin'ny mpanome tolotra, fa tsy avy amin'ny orinasa iray hafa.

Sal

Vakio ihany koa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment