ʻO kā mākou ʻike i ka hoʻomohala ʻana i kahi mea hoʻokele CSI ma Kubernetes no Yandex.Cloud

ʻO kā mākou ʻike i ka hoʻomohala ʻana i kahi mea hoʻokele CSI ma Kubernetes no Yandex.Cloud

Hauʻoli mākou i ka hoʻolaha ʻana e hoʻonui ana ʻo Flant i kāna hāʻawi i nā mea hana Open Source no Kubernetes ma ka hoʻokuʻu ʻana. mana alpha o ka mea hoʻokele CSI (Container Storage Interface) no Yandex.Cloud.

Akā ma mua o ka neʻe ʻana i nā kikoʻī hoʻokō, e pane mākou i ka nīnau no ke aha e pono ai kēia inā loaʻa iā Yandex kahi lawelawe. Managed Service no Kubernetes.

Hōʻike

No ke aha kēia?

I loko o kā mākou hui, mai ka hoʻomaka ʻana o ka hoʻohana ʻana iā Kubernetes i ka hana (ʻo ia hoʻi no kekahi mau makahiki i kēia manawa), ua hoʻomohala mākou i kā mākou mea hana ponoʻī (deckhouse), ʻo ia hoʻi, ke manaʻo nei mākou e hoʻolako koke i kahi papahana Open Source. . Me kāna kōkua, hoʻonohonoho like mākou a hoʻonohonoho i kā mākou mau pūʻulu āpau, a i kēia manawa aia ma mua o 100 o lākou, ma kahi ākea o nā hoʻonohonoho ʻenehana a me nā lawelawe kapuaʻi āpau i loaʻa.

Loaʻa i nā hui e hoʻohana ana i ka hale deckhouse nā ʻāpana āpau e pono ai no ka hana: nā mea kaulike, ka nānā ʻana me nā pakuhi kūpono, nā metric a me nā mākaʻikaʻi, ka hōʻoia o ka mea hoʻohana ma o nā mea hoʻolako waho no ke komo ʻana i nā dashboards āpau, a pēlā aku. ʻAʻohe kumu o ka hoʻokomo ʻana i kahi pūʻulu "pumped up" i loko o kahi hopena i hoʻokele ʻia, no ka mea hiki ʻole kēia a i ʻole e alakaʻi i ka pono e hoʻopau i ka hapalua o nā ʻāpana.

NB: ʻO kēia kā mākou ʻike, a he kikoʻī loa. ʻAʻole mākou e manaʻo e hoʻonoho nā mea a pau i nā pūʻulu Kubernetes iā lākou iho ma mua o ka hoʻohana ʻana i nā hoʻonā i mākaukau. Ma ke ala, ʻaʻohe o mākou ʻike maoli i ka hana ʻana i nā Kubernetes mai Yandex a ʻaʻole mākou e hāʻawi i kahi loiloi o kēia lawelawe ma kēia ʻatikala.

He aha ia a no wai?

No laila, ua kamaʻilio mua mākou e pili ana i ke ala hou o ka mālama ʻana ma Kubernetes: pehea ka hana o CSI? и pehea i hele mai ai ke kaiāulu i keia alahele.

I kēia manawa, nui nā mea lawelawe kapuaʻi nui i hoʻomohala i nā mea hoʻokele no ka hoʻohana ʻana i kā lākou kapuaʻi disks e like me ka Volume Persistent ma Kubernetes. Inā ʻaʻohe mea hoʻokele o ka mea hoʻolako, akā hāʻawi ʻia nā hana pono āpau ma o ka API, a laila ʻaʻohe mea e pale iā ʻoe mai ka hoʻokō ʻana i ka mea hoʻokele iā ʻoe iho. ʻO kēia ka mea i hana me Yandex.Cloud.

Lawe mākou i kumu no ka hoʻomohala ʻana Keaukaha CSI no ke ao DigitalOcean a me kekahi mau manao mai nā mea hoʻokele no GCP, mai ka pilina me ka API o kēia mau ao (Google a me Yandex) he mau mea like. ʻO ka mea kūikawā, ka API a me GCP, a ma ka Yandex hoʻihoʻi i kahi mea Operation e nānā i ke kūlana o nā hana lōʻihi (no ka laʻana, ka hana ʻana i kahi disk hou). E launa pū me ka Yandex.Cloud API, e hoʻohana Yandex.Cloud Go SDK.

Ka hopena o ka hana i hana ʻia опубликован ma GitHub a he mea pono paha no ka poʻe, no kekahi kumu, e hoʻohana i kā lākou hoʻonohonoho Kubernetes ma nā mīkini virtual Yandex.Cloud (akā ʻaʻole kahi pūʻulu hoʻokele mākaukau) a makemake e hoʻohana i nā disks (kauoha) ma o CSI.

Ka hoʻokō

Nā Mea Aʻo

I kēia manawa, kākoʻo ka mea hoʻokele i kēia mau hana:

  • Ke kauoha ʻana i nā diski ma nā ʻāpana āpau o ka pūʻulu e like me ka topology o nā nodes i ka pūʻulu;
  • Wehe i nā diski i kauoha mua ʻia;
  • Hoʻololi i ka nui pahemo no nā disks (Yandex.Cloud mai kākoʻo hoʻonui i nā disks i kau ʻia i ka mīkini virtual). No ka ʻike e pili ana i ke ʻano o ka hoʻololi ʻana o ka mea hoʻokele e hoʻololi i ka nui e like me ka hiki ʻole, e ʻike ma lalo.

I ka wā e hiki mai ana, hoʻolālā mākou e hoʻokō i ke kākoʻo no ka hana ʻana a me ka holoi ʻana i nā snapshot disk.

ʻO ka pilikia nui a pehea e lanakila ai

ʻO ka nele o ka hiki ke hoʻonui i nā disks i ka manawa maoli i ka Yandex.Cloud API he palena ia e hoʻopiʻi i ka hana hoʻololi no PV (Persistent Volume): i kēia hihia, pono e hoʻopau ʻia ka pod noi e hoʻohana ana i ka disk. a hiki i kēia ke hana i nā noi downtime.

Wahi a Nā kikoʻī CSI, inā hōʻike ka mea hoʻokele CSI hiki iā ia ke hoʻololi i nā disks "offline" wale nō (VolumeExpansion.OFFLINE), a laila e like ke kaʻina hana o ka hoʻonui ʻana i ka disk:

Inā loaʻa wale ka plugin VolumeExpansion.OFFLINE paʻi ʻia ka mana hoʻonui a me ka leo i kēia manawa a loaʻa paha ma kahi node a laila ControllerExpandVolume Pono e kāhea ʻia ma hope wale nō:

  • Loaʻa i ka plugin ka mea hoʻoponopono PUBLISH_UNPUBLISH_VOLUME hiki a ControllerUnpublishVolume Ua hoʻopiʻi maikaʻi ʻia.

A I OLE

  • ʻAʻohe mea hoʻoponopono i ka plugin PUBLISH_UNPUBLISH_VOLUME hiki, loaʻa i ka plugin node STAGE_UNSTAGE_VOLUME hiki, a NodeUnstageVolume ua hoʻopau maikaʻi ʻia.

A I OLE

  • ʻAʻohe mea hoʻoponopono i ka plugin PUBLISH_UNPUBLISH_VOLUME hiki, aole node STAGE_UNSTAGE_VOLUME hiki, a NodeUnpublishVolume ua pau pono.

ʻO kēia ke kumu pono ʻoe e wehe i ka disk mai ka mīkini virtual ma mua o ka hoʻonui ʻana.

Eia naʻe, pōʻino hoʻokō ʻAʻole kūpono ka kikoʻī CSI ma o nā kaʻa ʻaoʻao i kēia mau koi:

  • I loko o kahi pahu kaʻa ʻaoʻao csi-attacher, ʻo ia ke kuleana no ka loaʻa ʻana o ke āpau i koi ʻia ma waena o nā mauna, ʻaʻole i hoʻokō ʻia kēia hana ma ka hoʻololi ʻana i waho. Ua hoʻomaka ʻia kahi kūkākūkā e pili ana i kēia maanei.
  • He aha ka pahu kaʻa ʻaoʻao ma kēia pōʻaiapili? ʻAʻole pili ka CSI plugin me ka Kubernetes API, akā pane wale i nā kelepona gRPC i hoʻouna ʻia iā ia e nā pahu sidecar. Hou loa ke kūkulu ʻia nei e ka hui Kubernetes.

I kā mākou hihia (CSI plugin), ʻo ka hana o ka hoʻonui ʻana i ka disk e like me kēia:

  1. Loaʻa iā mākou kahi kelepona gRPC ControllerExpandVolume;
  2. Ke ho'āʻo nei mākou e hoʻonui i ka diski i ka API, akā loaʻa iā mākou kahi hewa e pili ana i ka hiki ʻole ke hana i ka hana no ka mea ua kau ʻia ka disk;
  3. Mālama mākou i ka ʻike disk ma ka palapala ʻāina, aia nā disks kahi e pono ai ka hana hoʻonui. Ma lalo iho nei, no ka pōkole, e kapa mākou i kēia palapala 'āina volumeResizeRequired;
  4. Wehe lima lima i ka pod e hoʻohana ana i ka disk. E hoʻomaka hou ʻo Kubernetes. No laila ʻaʻohe manawa o ka diski e kau ai (ControllerPublishVolume) ma mua o ka hoʻopau ʻana i ka hana hoʻonui i ka wā e hoʻāʻo ai e kau, e nānā mākou aia ka disk i hāʻawi ʻia volumeResizeRequired a hoʻihoʻi i kahi hewa;
  5. Ho'āʻo ka mea hoʻokele CSI e hana hou i ka hana hoʻololi. Inā holomua ka hana, a laila e wehe i ka diski volumeResizeRequired;
  6. No ka mea Nalo ka ID Disk mai volumeResizeRequired, ControllerPublishVolume holo maikaʻi, kau ʻia ka disk, hoʻomaka ka pod.

He mea maʻalahi nā mea a pau, akā, e like me nā manawa a pau, aia nā pitfalls. Hoʻonui i nā diski waho-resizer, inā he hewa i ka wā o ka hana hoʻohana i ka pila me ka piʻi nui ʻana o ka manawa manawa a hiki i 1000 kekona:

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

Hiki i kēia ke hopena i kēlā me kēia manawa i ka hoʻonui ʻia ʻana o ka hana hoʻonui disk no 15+ mau minuke a, no laila, ʻaʻole i loaʻa ka pod pili.

ʻO ke koho wale nō i maʻalahi a me ka ʻeha ʻole i ʻae iā mākou e hōʻemi i ka downtime hiki ke hoʻohana ʻia i kā mākou mana o waho-resizer me ka palena palena manawa. i 5 kekona:

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

ʻAʻole mākou i manaʻo he pono ke hoʻomaka koke i kahi kūkākūkā a hoʻopaʻa i ka external-resizer, no ka mea, ʻo ka hoʻololi ʻana i waho o nā disks he kiʻi hope e nalowale koke mai nā mea hoʻolako kapua.

Pehea e hoʻomaka ai e hoʻohana?

Kākoʻo ʻia ka mea hoʻokele ma ka mana Kubernetes 1.15 a ʻoi aʻe. No ka hana ʻana o ka mea hoʻokele, pono e hoʻokō ʻia kēia mau koi:

  • Ho'āka --allow-privileged hoʻonoho i ka waiwai true no ke kikowaena API a me ka kubelet;
  • Hoʻokomo ʻia --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true no ke kikowaena API a me ka kubelet;
  • Hoʻolaha mauna (hoʻonui mauna) pono e hoʻohana ʻia ma ka pūʻulu. I ka hoʻohana ʻana iā Docker, pono e hoʻonohonoho ʻia ka daemon e ʻae i nā puʻu like.

ʻO nā ʻanuʻu pono a pau no ka hoʻokomo ʻana iā ia iho wehewehe ʻia ma README. Hoʻokomo ʻia ka hana ʻana i nā mea ma Kubernetes mai nā hōʻike.

No ka hana ʻana o ka mea hoʻokele, pono ʻoe i kēia:

  • E wehewehe i ka mea kuhikuhi papa kuhikuhi ma ka hōʻike (folder-id) Yandex.Cloud (see palapala);
  • No ka launa pū me ka Yandex.Cloud API, hoʻohana ka mea hoʻokele CSI i kahi moʻokāki lawelawe. I ka hōʻike, pono e hāʻawi ʻia ka mea huna kī ʻae ʻia mai ka mooolelo lawelawe. Ma ka palapala wehewehe ʻia, pehea e hana ai i moʻokāki lawelawe a loaʻa nā kī.

ʻO nā mea a pau - e hoʻāʻo, a e hauʻoli mākou i ka loaʻa ʻana o nā manaʻo a me nā pilikia houinā pilikia ʻoe!

Kākoʻo hou aku

ʻO ka hopena, makemake mākou e hoʻomaopopo ua hoʻokō mākou i kēia mea hoʻokele CSI ʻaʻole ma muli o ka makemake nui e leʻaleʻa i nā palapala kākau ma Go, akā ma muli o kahi koi wikiwiki i loko o ka hui. ʻAʻole hiki iā mākou ke mālama i kā mākou hoʻokō ponoʻī, no laila inā hōʻike ʻo Yandex i ka hoihoi a hoʻoholo e hoʻomau i ke kākoʻo ʻana i ka mea hoʻokele, e hauʻoli mākou e hoʻoili i ka waihona iā lākou.

Eia kekahi, aia paha ʻo Yandex i kāna hoʻokō ponoʻī o ka mea hoʻokele CSI i kāna pūʻulu Kubernetes mālama ʻia, hiki ke hoʻokuʻu ʻia ma Open Source. ʻIke pū mākou i kēia koho hoʻomohala he mea maikaʻi - hiki i ke kaiāulu ke hoʻohana i kahi mea hoʻokele i hōʻoia ʻia mai kahi lawelawe lawelawe, ʻaʻole mai kahi hui ʻekolu.

PS

E heluhelu pū ma kā mākou blog:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka