
ืื ื ืฉืืืื ืืืืืืข โโืฉ-Flant ืืจืืืื ืืช ืชืจืืืชื ืืืื ืงืื ืคืชืื ืขืืืจ Kubernetes ืขื ืืื ืฉืืจืืจ (ืืืฉืง ืืืกืื ืืืื) ืขืืืจ Yandex.Cloud.
ืืื ืืคื ื ืฉื ืขืืืจ ืืคืจืื ืืืืฉืื, ืืืื ื ืขื ื ืขื ืืฉืืื ืืืืข ืื ื ืืืฅ ืืืื ืืืฉืจ ื-Yandex ืืืจ ืืฉ ืฉืืจืืช .
ืืืื
ืืื ืื?
ืืชืื ืืืืจื ืฉืื ื, ืืืจ ืืชืืืืช ืืฉืืืืฉ ื-Kubernetes ืืืืฆืืจ (ืืืืืจ ืืืจ ืืื ืฉื ืื), ืื ืื ื ืืคืชืืื ืืื ืืฉืื ื (ืckhouse), ืฉืืื, ืื ืื ื ืื ืืชืื ื ืื ืืืคืื ืืืชื ืืืืื ืืงืจืื ืืคืจืืืงื ืงืื ืคืชืื. . ืืขืืจืชื, ืื ื ืืืืืจืื ืืืืืืจืื ืืืืคื ืืืื ืืช ืื ืืืฉืืืืืช ืฉืื ื, ืืืจืืข ืืฉ ืืืจ ืืืชืจ ื-100 ืืื, ืืืืืื ืจืื ืฉื ืชืฆืืจืืช ืืืืจื ืืืื ืฉืืจืืชื ืืขื ื ืืืืื ืื.
ืืืฉืืืืืช ืืืฉืชืืฉืื ื-deckhouse ืืฉ ืืช ืื ืืจืืืืื ืืืจืืฉืื ืืชืคืขืื: ืืืื ืื, ื ืืืืจ ืขื ืชืจืฉืืืื ื ืืืื, ืืืืื ืืืชืจืืืช, ืืืืืช ืืฉืชืืฉืื ืืจื ืกืคืงืื ืืืฆืื ืืื ืืืืฉื ืืื ืืืืืช ืืืืืื ืื ืืื'. ืืื ืืขื ืืืชืงืื ืืฉืืื "ืืฉืืื" ืฉืืื ืืคืชืจืื ืื ืืื, ืืืืืื ืฉืืขืชืื ืงืจืืืืช ืื ืืืชื ืืคืฉืจื ืื ืืืืื ืืฆืืจื ืืืฉืืืช ืืืฆืืช ืืืจืืืืื.
NB: ืื ืื ืืกืืื ืฉืื ื, ืืืื ืื ืกืคืฆืืคื. ืื ืื ื ืืฉืื ืืืคื ืื ืืฆืืขืื ืฉืื ืืื ืฆืจืื ืืคืจืืก ืืฉืืืืืช Kubernetes ืืขืฆืื ืืืงืื ืืืฉืชืืฉ ืืคืชืจืื ืืช ืืืื ืื. ืืื, ืืื ืื ื ื ืืกืืื ืืืืชื ืืืคืขืืช Kubernetes ื- Yandex ืืื ื ืืชื ืฉืื ืืขืจืื ืืืื ืฉืืจืืช ืื ืืืืืจ ืื.
ืื ืื ืืืื?
ืื, ืืืจ ืืืืจื ื ืขื ืืืืฉื ืืืืืจื ืืช ืืืืกืื ื- Kubernetes: ะธ ืืืืฉื ืื.
ื ืืื ืืขืืฉืื, ืกืคืงื ืฉืืจืืชื ืขื ื ืืืืืื ืจืืื ืคืืชืื ืืจืืืืจืื ืืฉืืืืฉ ืืืืกืงื ืืขื ื ืฉืืื ืื ืคื ืงืืืข ื-Kubernetes. ืื ืืกืคืง ืืื ืืจืืืืจ ืืื, ืืื ืื ืืคืื ืงืฆืืืช ืืืจืืฉืืช ืืกืืคืงืืช ืืจื ื-API, ืื ืฉืื ืืืจ ืื ืืื ืข ืืื ืืืืฉื ืืช ืืืจืืืืจ ืืขืฆืื. ืื ืื ืฉืงืจื ืขื Yandex.Cloud.
ืืงืื ื ืืืกืืก ืืคืืชืื ืืืื ืจืขืืื ืืช ื , ืฉืื ืืืื ืืจืืงืฆืื ืขื ื-API ืฉื ืืขื ื ืื ืืืื (ืืืื ื-Yandex) ืืฉ ืืกืคืจ ืงืืื ืืืืื. ืืคืจื, ื-API ื , ื ืืืืืืจ ืืคืฅ Operation ืืื ืืขืงืื ืืืจ ืืืฆื ืฉื ืคืขืืืืช ืืจืืืืช (ืืืืืื, ืืฆืืจืช ืืืกืง ืืืฉ). ืืื ืืืฆืืจ ืืื ืืจืืงืฆืื ืขื ื-API ืฉื Yandex.Cloud, ืืฉืชืืฉ .
ืืชืืฆืื ืฉื ืืขืืืื ืฉื ืขืฉืชื ืืขืฉืืืื ืืืืืช ืฉืืืืฉืืื ืขืืืจ ืืื ืฉืืกืืื ืืืฉืื, ืืฉืชืืฉืื ืืืชืงื ืช Kubernetes ืืฉืืื ืืืืื ืืช ืืืจืืืืืืืช ืฉื Yandex.Cloud (ืื ืื ืืืฉืืื ืื ืืื ืืืื) ืืจืืฆืื ืืืฉืชืืฉ (ืืืืืื) ืืืกืงืื ืืจื CSI.
ะ ะตะฐะปะธะทะฐัะธั
ืชืืื ืืช ืขืืงืจืืืช
ืืจืืข ืื ืื ืืืชืงื ืชืืื ืืคืื ืงืฆืืืช ืืืืืช:
- ืืืื ืช ืืืกืงืื ืืื ืืืืจื ืืืฉืืื ืืคื ืืืืคืืืืืื ืฉื ืืฆืืชืื ืืืฉืืื;
- ืืกืจืช ืืืกืงืื ืฉืืืืื ื ืืขืืจ;
- ืฉืื ืื ืืืื ืื ืืงืืื ืขืืืจ ืืืกืงืื (Yandex.Cloud ืืืืืช ืืืืกืงืื ืฉืืืจืืืื ืืืืื ื ืืืืจืืืืืืช). ืืืืืข ืขื ืืืืคื ืฉืื ืืื ืฆืจืื ืืฉื ืืช ืืช ืื ืื ืืืชืงื ืืื ืืืคืื ืืช ืฉืื ืื ืืืืื ืืื ืืืืื ืืื ืืืคืฉืจ, ืจืื ืืืื.
ืืขืชืื, ืื ื ืืชืื ื ืื ืืืืฉื ืชืืืื ืืืฆืืจื ืืืืืงื ืฉื ืฆืืืืื ืืืกืง.
ืืงืืฉื ืืขืืงืจื ืืืื ืืืชืืืจ ืขืืื
ืืืขืืจ ืืืืืืช ืืืืืื ืืืกืงืื ืืืื ืืืช ื-Yandex.Cloud API ืืื ืืืืื ืฉืืกืืืช ืืช ืคืขืืืช ืฉืื ืื ืืืืื ืขืืืจ PV (Persistent Volume): ืืืงืจื ืื, ืืฉ ืฆืืจื ืืขืฆืืจ ืืช ืืคืื ืฉื ืืืคืืืงืฆืื ืฉืืฉืชืืฉ ืืืืกืง, ืืื ืืืื ืืืจืื ืืืืฉืืื ืืฉืืชื.
ืขื ืคื , ืื ืืงืจ ื-CSI ืืืืื ืฉืืื ืืืื ืืฉื ืืช ืืช ืืืื ืืืืกืงืื ืจืง "ืื ืืงืืื" (VolumeExpansion.OFFLINE), ืื ืชืืืื ืืืืืช ืืืืกืง ืืืืจ ืืืชื ืื ืื:
ืื ืืคืืืืื ืืฉ ืจืง
VolumeExpansion.OFFLINEืืืืืช ืืจืืื ืื ืคื ืืชืคืจืกืืื ืืขืช ืื ืืืื ืื ืืฆืืืช ืืControllerExpandVolumeืืฉ ืืืชืงืฉืจ ืจืง ืืืืจ:
- ืืคืืืืื ืืฉ ืืงืจ
PUBLISH_UNPUBLISH_VOLUMEืืืืืช ืControllerUnpublishVolumeืืืคืขื ืืืฆืืื.ืืืจืช
- ืืคืืืืื ืืื ืืงืจ
PUBLISH_UNPUBLISH_VOLUMEืืืืืช, ืืคืืืืื ืืฉ ืฆืืืชSTAGE_UNSTAGE_VOLUMEืืืืืช, ืNodeUnstageVolumeืืืฉืื ืืืฆืืื.ืืืจืช
- ืืคืืืืื ืืื ืืงืจ
PUBLISH_UNPUBLISH_VOLUMEืืืืืช, ืืื ืฆืืืชSTAGE_UNSTAGE_VOLUMEืืืืืช, ืNodeUnpublishVolumeืืกืชืืื ืืืฆืืื.
ืื ืืขืฆื ืืืืจ ืฉืืชื ืฆืจืื ืื ืชืง ืืช ืืืืกืง ืืืืืื ื ืืืืจืืืืืืช ืืคื ื ืืจืืืชื.
ืขื ืืืช, ืืืจืื ืืฆืขืจ ืืืฉืื ืืคืจื ื-CSI ืืืืฆืขืืช ืงืจืื ืืช ืฆื ืืื ื ืขืืื ืืืจืืฉืืช ืืืืืช:
- ืืืืื ืฆื
csi-attacher, ืฉืืืืจ ืืืืืช ืืืจืื ืื ืืืืืช ืืคืขืจ ืื ืืจืฉ ืืื ืืจืืืืื, ืืคืื ืงืฆืืื ืืืืช ืืื ืคืฉืื ืื ืืืืฉืืช ืืฉืื ืื ืืืืื ืืื ืืงืืื. ื ืคืชื ืืืื ืื ืืฉื . - ืื ืื ืืขืฆื ืืืื ืฆื ืืืงืฉืจ ืืื? ืืชืืกืฃ CSI ืขืฆืื ืืื ื ืืืฆืจ ืืื ืืจืืงืฆืื ืขื ื-API ืฉื Kubernetes, ืืื ืืืื ืจืง ืืงืจืืืืช gRPC ืื ืฉืืืืช ืืืื ืืืืฆืขืืช ืงืื ืืืื ืจืื ืฆืืืืื. ืืื ืืืืืจ ืขื ืืื ืงืืืืช Kubernetes.
ืืืงืจื ืฉืื ื (ืชืืกืฃ CSI), ืคืขืืืช ืืืืืช ืืืืกืง ื ืจืืืช ืื:
- ืื ื ืืงืืืื ืฉืืืช gRPC
ControllerExpandVolume; - ืื ื ืื ืกืื ืืืืืื ืืช ืืืืกืง ื-API, ืื ืื ื ืืงืืืื ืฉืืืื ืืืื ืืืกืจ ืืืคืฉืจืืช ืืืฆืข ืืช ืืคืขืืื ืืืืืื ืฉืืืืกืง ืืืชืงื;
- ืื ื ืืืืกื ืื ืืช ืืืื ืืืืกืง ืืืคื, ืืืืืื ืืช ืืืืกืงืื ืฉืขืืืจื ืืฉ ืืืฆืข ืืช ืคืขืืืช ืืืืืื. ืืืื, ืืงืืฆืืจ, ื ืงืจื ืืืคื ืื ืืฉื
volumeResizeRequired; - ืืกืจ ืืืืคื ืืื ื ืืช ืืคืื ืฉืืฉืชืืฉ ืืืืกืง. Kubernetes ืืคืขืื ืืืชื ืืืืฉ. ืืื ืฉืืืืกืง ืืื ืืื ืืขืืืช (
ControllerPublishVolume) ืืคื ื ืืฉืืืช ืคืขืืืช ืืืืืื ืืขืช ื ืืกืืื ืืขืืืช, ืื ื ืืืืงืื ืฉืืืืกืง ืื ืชืื ืขืืืื ืืคื ืืvolumeResizeRequiredืืืืืืืจ ืฉืืืื; - ืื ืื ืืืชืงื ืฉื CSI ืื ืกื ืืืฆืข ืืืืฉ ืืช ืคืขืืืช ืฉืื ืื ืืืืื. ืื ืืคืขืืื ืืฆืืืื, ืืกืจ ืืช ืืืืกืง ื
volumeResizeRequired; - ืื ืืืื ืืืกืง ืืกืจ
volumeResizeRequired,ControllerPublishVolumeืขืืืจ ืืืฆืืื, ืืืืกืง ืืืชืงื, ืืคืื ืืชืืื.
ืืื ื ืจืื ืคืฉืื ืืกืคืืง, ืืื ืืื ืชืืื ืืฉ ืืืืืืืช. ืืืืื ืืืกืงืื , ืืฉืจ ืืืงืจื ืฉื ืฉืืืื ืืืืื ืืคืขืืื ืขื ืขืืืื ืืงืกืคืื ื ืฆืืืืืช ืืืื ืคืกืง ืืืื ืขื 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 ืืืฆืื ื ืขื ืืืืืช ืคืกืง ืืื ืืงืกืืืืืช :
workqueue.NewItemExponentialFailureRateLimiter(5*time.Millisecond, 5*time.Second)ืื ืจืืื ื ืฆืืจื ืืืืื ืืืื ืืืืืคืืช ืืืชืงื ืืช resizer ืืืืฆืื ื, ืื ืฉืื ืื ืืืื ืื ืืงืืื ืฉื ืืืกืงืื ืืื ื ืกืืื ืฉืืงืจืื ืชืืขืื ืืื ืกืคืงื ืืขื ื.
ืืืฆื ืืืชืืื ืืืฉืชืืฉ?
ืื ืื ืืืชืงื ื ืชืื ืืืจืกื 1.15 ืืืขืื ืฉื Kubernetes. ืืื ืฉืื ืื ืืขืืื, ืืฉ ืืขืืื ืืืจืืฉืืช ืืืืืช:
- ืืื
--allow-privilegedืืืืืจ ืืขืจืtrueืขืืืจ ืฉืจืช API ื-kubelet; - ืืืื
--feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=trueืขืืืจ ืฉืจืช API ื-kubelet; - ืืชืคืฉืืืช ืืจ () ืืืื ืืืืืช ืืืื ืืืฉืืื. ืืขืช ืฉืืืืฉ ื-Docker, ืืฉ ืืืืืืจ ืืช ืืืืื ืื ืฉืืืคืฉืจ ืจืืืืืช ืืฉืืชืคืืช.
ืื ืืฉืืืื ืืืจืืฉืื ืืืชืงื ื ืขืฆืื . ืืืชืงื ื ืืืืืช ืืฆืืจืช ืืืืืืงืืื ื-Kubernetes ืืื ืืคืกืืื.
ืืื ืฉืื ืื ืืขืืื ืชืฆืืจื ืืช ืืืืจืื ืืืืื:
- ืฆืืื ืืช ืืืื ืืกืคืจืืื ืืื ืืคืกื (
folder-id) Yandex.Cloud (); - ืืื ืืืฆืืจ ืืื ืืจืืงืฆืื ืขื ื-API ืฉื Yandex.Cloud, ืื ืื ืืืชืงื ืฉื CSI ืืฉืชืืฉ ืืืฉืืื ืฉืืจืืช. ืืื ืืคืกื, ืกืื ืืืื ืืขืืืจ ืืืฉืืื ืืฉืืจืืช. ืืชืืขืื , ืืืฆื ืืืฆืืจ ืืฉืืื ืฉืืจืืช ืืืงืื ืืคืชืืืช.
ืืื ืืืื - , ืื ืฉืื ืืงืื ืืฉืื ื ืื ืืชื ื ืชืงื ืืืขืืืช ืืืฉืื!
ืชืืืื ื ืืกืคืช
ืืชืืฆืื ืืื, ืืจืฆืื ื ื ืืฆืืื ืฉืืืืขื ื ืืจืืืืจ CSI ืื ืื ืืชืื ืจืฆืื ืืืื ืืืชืืืช ืืคืืืงืฆืืืช ื-Go, ืืื ืืืื ืฆืืจื ืืืืฃ ืืืืจื. ืื ืื ื ืจืื ืื ื ืืขืฉื ืืฉืืืจ ืขื ืืืฉืื ืืฉืื ื, ืื ืื Yandex ืืืื ืขื ืืื ืืชืืืื ืืืืฉืื ืืชืืื ืื ืื, ื ืฉืื ืืืขืืืจ ืืื ืืช ืืืืืจ.
ืื ืืกืฃ, ื-Yandex ืืฉ ืื ืจืื ืืืฉืื ืืฉืื ืฉื ืื ืื ืืืชืงื CSI ืืืฉืืื Kubernetes ืืื ืืื ืฉืื, ืฉื ืืชื ืืฉืืจืจ ืืงืื ืคืชืื. ืื ื ืจืืืื ืื ืืช ืืคืฉืจืืช ืืคืืชืื ืืื ืืืืืืืช โ ืืงืืืื ืชืืื ืืืฉืชืืฉ ืืืจืืืจ ืืืื ืฉื ืกืคืง ืฉืืจืืช, ืืื ืืืืจืช ืฆื ืฉืืืฉื.
ื .ื.
ืงืจื ืื ืืืืื ืฉืื ื:
- ยซ";
- ยซ";
- ยซ";
- ยซ".
ืืงืืจ: www.habr.com
