Nostra experientia in explicando CSI aurigam in Kubernetes pro Yandex.Cloud

Nostra experientia in explicando CSI aurigam in Kubernetes pro Yandex.Cloud

Laeti sumus nuntiare Flant suam collationem augere instrumenta Source instrumentorum ad Kubernetes solvendo Alpha versio CSI exactoris (Container Repono Interface) pro Yandex.Cloud.

Sed antequam ad singula exsequenda moveamus, respondeamus quaestioni cur hoc omnino opus sit cum Yandex iam servitium habet. Service administrata pro Kubernetes.

introduction

Quid est hoc?

In nostro comitatu, inde a primordiis utendi Kubernetes in productione (i.e. per aliquot annos iam) nostrum instrumentum (deckhouse) elaboravimus, quod obiter consilium etiam instituimus ut primum promptum praebeamus documentum patefactum. . Eius ope, omnes ligaturas nostras aequaliter configuramus et configuramus, et nunc iam plus quam 100 ex eis sunt, in varietate figurarum ferramentorum et in omnibus servitiis nubis.

Botri qui utuntur deckhouse, omnia membra ad operandum necessaria habent: libratores, vigilantes chartis opportunis, metricis et summis, authenticas usoris per provisores externos pro accessu ad omnes dashboards, et sic porro. Nihil attinet in tali solutione "exantlatae" insertis glomerari in expedita solutione, cum hoc saepe vel impossibile sit vel necessitatem ducet ad dimidium membrorum inactivandi.

NBHaec est nostra experientia, et satis specifica. Nullo modo suggerimus ut quilibet Kubernetes uvas suas explicet loco solutionis paratae utendi. Viam veram experientiam habemus in operando Kubernetes de Yandex et nullum huius officii censum in hoc articulo dabimus.

Quid est, et cui?

Itaque iam locuti sumus de recenti ac- ceptatione in Kubernetes: quomodo CSI opus? ΠΈ quomodo civitas venit aditus huic.

In statu, multae magnae nubes servitii provisores elaboraverunt rectores ad utentes nubeculas suas sicut Volumen Pertinax in Kubernetes. Si elit non habet talem exactorem, sed omnia necessaria munera per API praebentur, nihil obstat quominus te ipsum exactorem exsequantur. Hoc factum est apud Yandex.Cloud.

Nos cepimus pro evolutionis CSI coegi ad DigitalOcean nubes et in duobus notiones a rectoribus GCP *quoniam commercium cum API harum nubium (Google et Yandex) plures similitudines habet. Praesertim API et GCPEt ad Yandex redire objectum Operation ad indagare statum operationum diuturnae (exempli gratia, novum orbem creans). Inter se occurrunt cum Yandex.Cloud API, use Yandex.Cloud Go SDK.

Ex opere editis in GitHub et utile esse potest iis qui, aliqua de causa, sua Kubernetes institutionem in Yandex.Cloud machinis virtualis (sed non botri praeparato confectis) uti et per CSI orbes (ordine) uti vellem.

РСализация

Res maiora

In statu auriga munera haec sustinet:

  • Disci in omnibus cingulis botri ordinandis secundum topologiam nodorum in botro;
  • ante dissos removere iussos;
  • Online resize ad disks (Yandex.Cloud non support augendis discos qui ad machinam virtualem ascendunt). Ad informationem de qua coegi debebant immutandum esse ut resizing quam sine dolore fieri potest, infra vide.

In posterum instituimus subsidium efficiendi ad creandos et delendos orbis snapshots.

Summa difficultas et quomodo eam superare

Defectus facultatis augendi orbis in tempore reali in Yandex.Cloud API limitatio est quae implicat resize operandi in PV (Persistent Volume): hoc in casu, necesse est ut applicatio vasculi, quo utitur orbis, obstruatur; et hoc potest causare applicationes temporis.

secundum CSI specifications, si CSI moderatoris tradit solum orbis "offline" resize posse.VolumeExpansion.OFFLINE) processus augendi orbis sic ire debet;

Si plugin non habet VolumeExpansion.OFFLINE expansion capacitas et volumen est currently editum vel available in nodi tunc ControllerExpandVolume Dicendi solum post vel:

  • Plugin habet controller PUBLISH_UNPUBLISH_VOLUME facultatem et ControllerUnpublishVolume invocatum est feliciter.

AUT

  • Plugin non habet controller PUBLISH_UNPUBLISH_VOLUME facultas, plugin has node STAGE_UNSTAGE_VOLUME facultatem, ac NodeUnstageVolume peracta feliciter.

AUT

  • Plugin non habet controller PUBLISH_UNPUBLISH_VOLUME facultas, neque nodi STAGE_UNSTAGE_VOLUME facultatem, ac NodeUnpublishVolume feliciter consummavit.

Hoc essentialiter significat debes discum abducere a machina virtuali antequam eam dilatare.

Sed pro dolor implementation CSI specificatio per sidecars his requisitis non occurrit:

  • In sidecar continens csi-attacherquae responsabilitas in praesentia debiti inter munitiones sit, haec functionalitas simpliciter non impletur in resize offline. Consultatio de hoc instituta est hic.
  • Quidnam est vas sidecarus in hoc contextu? Pluginum ipsum CSI cum Kubernetibus API non inter se cohaeret, sed tantum respondet gRPC vocatui a vasis sideribus ad illud missis. Tardus sunt crescendo a communitate Kubernetes.

In casu nostro (CSI plugin), operatio orbis augendi hoc simile est:

  1. GrPC vocamus accipimus ControllerExpandVolume;
  2. Conamur orbem in API augere, sed errorem accipimus de impossibilitate operationis faciendi quia orbis annectitur;
  3. Discum identifier in tabula condimus, quod orbes continet ad quos operatio augenda perficienda eget. Infra, pro brevitate, tabulam hanc appellabimus volumeResizeRequired;
  4. Manually vasculum removere quod disco utitur. Kubernetes sileo eam. Ita ut orbis tempus conscendendi non habet.ControllerPublishVolume) antequam operationem augeam perficiendo conscendere conantes, refutamus orbem datum adhuc in volumeResizeRequired et errorem redde;
  5. Coegi CSI conatur resize operationem re-exsequi. Si operatio valuitque orbis e remove volumeResizeRequired;
  6. Quod Orbis ID is missing from volumeResizeRequired, ControllerPublishVolume feliciter transit, orbis annectitur, vasculum incipit.

Omnia simplicia satis videntur, sed sicut semper foveae sunt. Dilatat orbis externum-resiszerquae si error in operatione utitur queue cum exponentiali incremento timeout usque ad 1000 seconds:

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

Hoc periodice evenire potest in operatione expansionis disci per 15+ minutas extenso, ideoque vasculum respondens perpendat.

Sola optio, quae facile et sine dolore nobis ad extenuandum potentiale downtime permisit, usus versionis nostrae externi-resizer cum maximo temporis limite. apud V seconds:

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

Non necessarium duximus disputationem instanter inchoare et resizer externum repeciare, quia offline resize orbis est iactus qui mox ab omnibus provisoribus nubes evanescet.

Quomodo incipere usura?

Auriga in versione Kubernetes 1.15 et superiori sustentatur. Ad opus rectoris sequentia necessaria occurrere debent;

  • vexillum --allow-privileged set ad valorem true for API cultor et kubelet;
  • Comprehendo --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true for API cultor et kubelet;
  • Mons propagationis (montem propagationem) dabilis in botro. Cum Docker utens, daemon configurari debet ut communes munitiones permittat.

Omnes gradus necessarii ad ipsam institutionem descriptus est in README. Installatio involvit res in Kubernetes ex manifestis creandis.

Pro rectore ad operandum sequenti opus erit:

  • Specificare indicem identifier in manifesta (folder-id) Yandex.Cloud (vide documenta);
  • Ad penitus cum Yandex.Cloud API, auriga CSI ratione muneris utitur. In manifesto, Secretum praetermittendum est claves auctoritate ab officio rationis. In documentis descriptus "quomodo servitii rationem creare et claves accipere.

Omnia in omnibus - tempta id, et exsultemus accipere feedback et novas quaestionessi difficultates tibi occurrant!

Praeterea subsidium

Quam ob rem notare volumus quod CSI aurigam hunc effectum non ex magno studio delectandi applicationes scribendi in Go, sed propter urgentem necessitatem in societate. Nobis practicum non videtur ad nostram exsecutionem conservandam, quare si Yandex usuram ostendit et deliberet ut rectorem sustineat, laeti erimus illis repositorium transferre.

Praeterea Yandex probabiliter suum exsecutionem CSI agitatoris in botro Kubernetes administrato habet, qui in Open Source dimitti potest. Etiam hac optione evolutionis perspicimus ut favorabilia - communitas probato exactore uti poterit a provisore servitii, et non ex tertia parte societatis.

PS

Lege etiam in nostro diario:

Source: www.habr.com