ʻ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.
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:
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;
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;
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;
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;
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:
ʻ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.