Мо асоси тараккиётро гирифтем Ронандаи CSI барои абри DigitalOcean ва якчанд идеяҳо аз ронандагон барои GCP, зеро ҳамкорӣ бо API-и ин абрҳо (Google ва Яндекс) як қатор монандиҳо дорад. Аз ҷумла, API ва GCPва u Yandex объектро баргардонед Operation барои пайгирии ҳолати амалиёти дарозмуддат (масалан, сохтани диски нав). Барои ҳамкорӣ бо API Yandex.Cloud, истифода баред Yandex.Cloud Go SDK.
Натичаи кори ичрошуда дар GitHub нашр шудааст ва метавонад барои онҳое, ки бо ягон сабаб насбкунии Kubernetes-и худро дар мошинҳои виртуалии Yandex.Cloud истифода мебаранд (вале кластери омодаи идорашаванда) ва мехоҳанд дискҳоро тавассути CSI истифода баранд (фармоиш) муфид бошад.
Подчаеро, ки дискро истифода мебарад, дастӣ хориҷ кунед. Кубернетес онро аз нав оғоз мекунад. Барои он ки диск вақти насб кардан надошта бошад (ControllerPublishVolume) пеш аз ба итмом расонидани амалиёти афзоиш ҳангоми кӯшиши васлкунӣ, мо тафтиш мекунем, ки диски додашуда ҳанӯз дар дохили он аст volumeResizeRequired ва хато баргардонед;
Ронандаи CSI кӯшиш мекунад, ки амалиёти тағир додани андозаро дубора иҷро кунад. Агар амалиёт муваффақ бошад, пас дискро аз он хориҷ кунед volumeResizeRequired;
Зеро ID-диск аз volumeResizeRequired, ControllerPublishVolume бомуваффакият мегузарад, диск васл карда мешавад, подшох ба кор медарояд.
Ҳама чиз ба қадри кофӣ оддӣ ба назар мерасад, аммо чун ҳамеша домҳо вуҷуд доранд. Дискҳоро васеъ мекунад берунӣ-reizer, ки дар сурати руй додани хатой хангоми амалиёт навбатро истифода мебарад бо афзоиши экспоненсиалии вақт то 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)},
)
}
Ин метавонад давра ба давра ба он оварда расонад, ки амалиёти тавсеаи диск барои 15+ дақиқа дароз карда шавад ва аз ин рӯ, поди мувофиқ дастнорас мешавад.
Ягона вариант, ки ба осонӣ ва бедард ба мо имкон дод, ки вақти бекористии эҳтимолиро кам кунем, ин истифодаи версияи мо аз resizer-и беруна бо маҳдудияти ҳадди аксар буд. дар 5 сония:
Флаг --allow-privileged ба арзиш таъин кунед true барои API сервер ва kubelet;
Дохил карда шудааст --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true барои API сервер ва kubelet;