Iriri wa ni idagbasoke awakọ CSI ni Kubernetes fun Yandex.Cloud

Iriri wa ni idagbasoke awakọ CSI ni Kubernetes fun Yandex.Cloud

A ni inu-didun lati kede pe Flant n pọ si ilowosi rẹ si awọn irinṣẹ orisun orisun fun Kubernetes nipa itusilẹ Alpha version of CSI iwakọ (Asopọmọra Ibi ipamọ Apoti) fun Yandex.Cloud.

Ṣugbọn ṣaaju ki o to lọ si awọn alaye imuse, jẹ ki a dahun ibeere naa idi ti eyi ṣe nilo rara nigbati Yandex tẹlẹ ni iṣẹ kan Iṣẹ iṣakoso fun Kubernetes.

Ifihan

Kini idi eyi?

Laarin ile-iṣẹ wa, lati ibẹrẹ ti lilo Kubernetes ni iṣelọpọ (ie fun ọdun pupọ ni bayi), a ti n ṣe agbekalẹ ohun elo tiwa (deckhouse), eyiti, nipasẹ ọna, a tun gbero lati jẹ ki o wa laipẹ bi iṣẹ akanṣe Open Source . Pẹlu iranlọwọ rẹ, a tunto ni iṣọkan ati tunto gbogbo awọn iṣupọ wa, ati lọwọlọwọ diẹ sii ju 100 ninu wọn, lori ọpọlọpọ awọn atunto ohun elo ati ni gbogbo awọn iṣẹ awọsanma ti o wa.

Awọn iṣupọ ti o lo deckhouse ni gbogbo awọn paati pataki fun iṣẹ: awọn iwọntunwọnsi, ibojuwo pẹlu awọn shatti irọrun, awọn metiriki ati awọn titaniji, ijẹrisi olumulo nipasẹ awọn olupese ita fun iraye si gbogbo awọn dasibodu, ati bẹbẹ lọ. Ko si aaye ni fifi iru iṣupọ “ti fa soke” sinu ojutu iṣakoso, nitori eyi nigbagbogbo jẹ boya ko ṣee ṣe tabi yoo ja si iwulo lati mu idaji awọn paati kuro.

NB: Eyi ni iriri wa, ati pe o jẹ pato. A ko ni imọran ni ọna ti gbogbo eniyan yẹ ki o mu awọn iṣupọ Kubernetes ṣiṣẹ lori ara wọn dipo lilo awọn iṣeduro ti a ti ṣetan. Nipa ọna, a ko ni iriri gidi ni sisẹ Kubernetes lati Yandex ati pe a kii yoo fun eyikeyi iṣiro ti iṣẹ yii ninu nkan yii.

Kini o jẹ ati fun tani?

Nitorinaa, a ti sọrọ tẹlẹ nipa ọna ode oni si ibi ipamọ ni Kubernetes: bawo ni CSI ṣiṣẹ? и bí àdúgbò ṣe wá si ọna yii.

Lọwọlọwọ, ọpọlọpọ awọn olupese iṣẹ awọsanma nla ti ni idagbasoke awọn awakọ fun lilo awọn disiki awọsanma wọn bi Iwọn didun Iduroṣinṣin ni Kubernetes. Ti olupese ko ba ni iru awakọ bẹ, ṣugbọn gbogbo awọn iṣẹ pataki ni a pese nipasẹ API, lẹhinna ko si ohun ti o ṣe idiwọ fun ọ lati ṣe imuse awakọ funrararẹ. Eyi ni ohun ti o ṣẹlẹ pẹlu Yandex.Cloud.

A mu bi ipilẹ fun idagbasoke CSI iwakọ fun DigitalOcean awọsanma ati ki o kan tọkọtaya ti ero lati awakọ fun GCP, niwon ibaraenisepo pẹlu API ti awọn awọsanma wọnyi (Google ati Yandex) ni nọmba awọn afijq. Ni pato, API ati GCP, ati y Yandex da ohun kan pada Operation lati tọpa ipo ti awọn iṣẹ ṣiṣe pipẹ (fun apẹẹrẹ, ṣiṣẹda disk tuntun). Lati ṣe ajọṣepọ pẹlu Yandex.Cloud API, lo Yandex.Cloud Lọ SDK.

Abajade iṣẹ ti a ṣe ti a tẹjade lori GitHub ati pe o le wulo fun awọn ti o, fun idi kan, lo fifi sori Kubernetes tiwọn lori awọn ẹrọ foju Yandex.Cloud (ṣugbọn kii ṣe iṣupọ iṣakoso ti a ti ṣetan) ati pe yoo fẹ lati lo (ibere) awọn disiki nipasẹ CSI.

Imuse

Awọn ẹya pataki

Lọwọlọwọ awakọ ṣe atilẹyin awọn iṣẹ wọnyi:

  • Paṣẹ awọn disiki ni gbogbo awọn agbegbe ti iṣupọ ni ibamu si topology ti awọn apa inu iṣupọ;
  • Yiyọ awọn disiki ti a ti paṣẹ tẹlẹ;
  • Aisinipo iwọn fun awọn disiki (Yandex.Cloud ma ṣe atilẹyin jijẹ awọn disiki ti a gbe sori ẹrọ foju). Fun alaye lori bawo ni awakọ ṣe ni lati yipada lati jẹ ki isọdọtun bi alaini irora bi o ti ṣee, wo isalẹ.

Ni ọjọ iwaju, a gbero lati ṣe atilẹyin fun ṣiṣẹda ati piparẹ awọn fọto disiki.

Iṣoro akọkọ ati bii o ṣe le bori rẹ

Aini agbara lati mu awọn disiki pọ si ni akoko gidi ni Yandex.Cloud API jẹ aropin ti o ṣe idiju iṣẹ ṣiṣe atunṣe fun PV (Iwọn didun Itẹẹmọ): ninu ọran yii, o jẹ dandan pe adarọ-ese ohun elo ti o lo disiki naa duro, ki o si yi le fa downtime awọn ohun elo.

Gegebi CSI ni pato, ti oludari CSI ba jabo pe o le ṣe atunṣe awọn disks nikan “aisinipo” (VolumeExpansion.OFFLINE), lẹhinna ilana ti jijẹ disk yẹ ki o lọ bi eyi:

Ti ohun itanna ba ni nikan VolumeExpansion.OFFLINE Agbara imugboroja ati iwọn didun ti wa ni atẹjade lọwọlọwọ tabi wa lori ipade kan lẹhinna ControllerExpandVolume O gbọdọ pe NIKAN lẹhin boya:

  • Ohun itanna naa ni oludari PUBLISH_UNPUBLISH_VOLUME agbara ati ControllerUnpublishVolume ti pe ni aṣeyọri.

BIBẸKỌ

  • Ohun itanna KO ni oludari PUBLISH_UNPUBLISH_VOLUME agbara, itanna ni o ni ipade STAGE_UNSTAGE_VOLUME agbara, ati NodeUnstageVolume ti pari ni aṣeyọri.

BIBẸKỌ

  • Ohun itanna KO ni oludari PUBLISH_UNPUBLISH_VOLUME agbara, tabi ipade STAGE_UNSTAGE_VOLUME agbara, ati NodeUnpublishVolume ti pari ni aṣeyọri.

Eyi tumọ si ni pataki pe o nilo lati yọ disk kuro lati ẹrọ foju ṣaaju ki o to pọ si.

Sibẹsibẹ, laanu imuse Sipesifikesonu CSI nipasẹ awọn ọkọ ayọkẹlẹ ẹgbẹ ko pade awọn ibeere wọnyi:

  • Ni a sidecar eiyan csi-attacher, eyi ti o yẹ ki o jẹ iduro fun wiwa ti aafo ti a beere laarin awọn agbeko, iṣẹ yii ko rọrun ni imuse ni iwọn aisinipo. Ifọrọwọrọ nipa eyi ni a bẹrẹ nibi.
  • Kini gangan ni apoti ọkọ ayọkẹlẹ kan ni aaye yii? Ohun itanna CSI funrararẹ ko ni ibaraenisepo pẹlu Kubernetes API, ṣugbọn awọn idahun nikan si awọn ipe gRPC ti a firanṣẹ si nipasẹ awọn apoti ẹgbẹ. Titun ti wa ni idagbasoke nipasẹ agbegbe Kubernetes.

Ninu ọran wa (ohun itanna CSI), iṣẹ ti jijẹ disiki naa dabi eyi:

  1. A gba ipe gRPC kan ControllerExpandVolume;
  2. A n gbiyanju lati mu disiki naa pọ si ni API, ṣugbọn a gba aṣiṣe kan nipa aiṣeeṣe ti ṣiṣe iṣẹ nitori disiki naa ti gbe;
  3. A tọju idanimọ disiki ni maapu, eyiti o ni awọn disiki fun eyiti iṣẹ alekun nilo lati ṣe. Ni isalẹ, fun kukuru, a yoo pe maapu yii bi volumeResizeRequired;
  4. Pẹlu ọwọ yọ adarọ-ese ti o nlo disiki naa kuro. Kubernetes yoo tun bẹrẹ. Ki disk naa ko ni akoko lati gbe soke (ControllerPublishVolume) ṣaaju ki o to pari iṣẹ ilosoke nigba igbiyanju lati gbe soke, a ṣayẹwo pe disk ti a fun ni ṣi wa volumeResizeRequired ati ki o pada aṣiṣe;
  5. Awakọ CSI ngbiyanju lati tun-ṣe iṣẹ atunṣe iwọn. Ti iṣẹ naa ba ṣaṣeyọri, lẹhinna yọ disk kuro lati volumeResizeRequired;
  6. Nitori ID disk sonu lati volumeResizeRequired, ControllerPublishVolume koja ni ifijišẹ, awọn disk ti wa ni agesin, awọn podu bẹrẹ.

Ohun gbogbo dabi o rọrun to, ṣugbọn bi nigbagbogbo nibẹ ni o wa pitfalls. Awọn disiki nla ita-resizer, eyi ti o jẹ ninu ọran ti aṣiṣe nigba isẹ nlo isinyi pẹlu ilosoke pataki ni akoko isunmọ to awọn aaya 1000:

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

Eyi le ja si lorekore ni iṣẹ imugboroja disiki naa ni ilọsiwaju fun awọn iṣẹju 15+ ati, nitorinaa, podu ti o baamu ko si.

Aṣayan kan ṣoṣo ti o rọrun pupọ ati laisi irora gba wa laaye lati dinku akoko isunmi ti o pọju ni lilo ẹya wa ti resizer ti ita pẹlu opin akoko ipari ti o pọju ni 5 aaya:

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

A ko ro pe o ṣe pataki lati bẹrẹ ifọrọhan ni kiakia ki o parẹ oluyipada-ita, nitori iwọn aisinipo ti awọn disiki jẹ jiju ti yoo parẹ laipẹ lati ọdọ gbogbo awọn olupese awọsanma.

Bawo ni lati bẹrẹ lilo?

Awakọ naa ni atilẹyin lori ẹya Kubernetes 1.15 ati ti o ga julọ. Fun awakọ lati ṣiṣẹ, awọn ibeere wọnyi gbọdọ pade:

  • Flag --allow-privileged ṣeto si iye true fun API olupin ati kubelet;
  • To wa --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true fun API olupin ati kubelet;
  • Itankale oke (òke soju) gbọdọ wa ni mu ṣiṣẹ lori iṣupọ. Nigbati o ba nlo Docker, daemon gbọdọ wa ni tunto lati gba awọn gbigbe pinpin laaye.

Gbogbo awọn igbesẹ pataki fun fifi sori ẹrọ funrararẹ se apejuwe ninu README. Fifi sori ẹrọ pẹlu ṣiṣẹda awọn nkan ni Kubernetes lati awọn ifihan gbangba.

Fun awakọ lati ṣiṣẹ iwọ yoo nilo atẹle naa:

  • Pato oludamọ liana ninu ifihan (folder-idYandex.Cloud (wo iwe);
  • Lati ṣe ajọṣepọ pẹlu Yandex.Cloud API, awakọ CSI nlo akọọlẹ iṣẹ kan. Ninu ifihan, Aṣiri gbọdọ kọja awọn bọtini aṣẹ lati iroyin iṣẹ. Ninu iwe-ipamọ ṣàpèjúwe, Bii o ṣe le ṣẹda akọọlẹ iṣẹ kan ati gba awọn bọtini.

Ti pinnu gbogbo ẹ - gbidanwo, ati awọn ti a yoo jẹ dun lati gba esi ati titun oranti o ba pade eyikeyi awọn iṣoro!

Siwaju support

Bi abajade, a yoo fẹ lati ṣe akiyesi pe a ṣe imuse awakọ CSI yii kii ṣe lati inu ifẹ nla lati ni igbadun kikọ awọn ohun elo ni Go, ṣugbọn nitori iwulo iyara laarin ile-iṣẹ naa. Ko dabi iwulo fun wa lati ṣetọju imuse ti ara wa, nitorinaa ti Yandex ba ṣafihan iwulo ati pinnu lati tẹsiwaju atilẹyin awakọ, a yoo ni idunnu lati gbe ibi-ipamọ si wọn.

Ni afikun, Yandex jasi ni imuse tirẹ ti awakọ CSI ni iṣupọ Kubernetes ti iṣakoso, eyiti o le ṣe idasilẹ ni Orisun Ṣii. A tun rii aṣayan idagbasoke yii bi iwuwasi - agbegbe yoo ni anfani lati lo awakọ ti a fihan lati ọdọ olupese iṣẹ, kii ṣe lati ile-iṣẹ ẹnikẹta.

PS

Ka tun lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun