ืื ื ืฉืืืื ืืืืืืข โโืฉ-Flant ืืจืืืื ืืช ืชืจืืืชื ืืืื ืงืื ืคืชืื ืขืืืจ Kubernetes ืขื ืืื ืฉืืจืืจ
ืืื ืืคื ื ืฉื ืขืืืจ ืืคืจืื ืืืืฉืื, ืืืื ื ืขื ื ืขื ืืฉืืื ืืืืข ืื ื ืืืฅ ืืืื ืืืฉืจ ื-Yandex ืืืจ ืืฉ ืฉืืจืืช
ืืืื
ืืื ืื?
ืืชืื ืืืืจื ืฉืื ื, ืืืจ ืืชืืืืช ืืฉืืืืฉ ื-Kubernetes ืืืืฆืืจ (ืืืืืจ ืืืจ ืืื ืฉื ืื), ืื ืื ื ืืคืชืืื ืืื ืืฉืื ื (ืckhouse), ืฉืืื, ืื ืื ื ืื ืืชืื ื ืื ืืืคืื ืืืชื ืืืืื ืืงืจืื ืืคืจืืืงื ืงืื ืคืชืื. . ืืขืืจืชื, ืื ื ืืืืืจืื ืืืืืืจืื ืืืืคื ืืืื ืืช ืื ืืืฉืืืืืช ืฉืื ื, ืืืจืืข ืืฉ ืืืจ ืืืชืจ ื-100 ืืื, ืืืืืื ืจืื ืฉื ืชืฆืืจืืช ืืืืจื ืืืื ืฉืืจืืชื ืืขื ื ืืืืื ืื.
ืืืฉืืืืืช ืืืฉืชืืฉืื ื-deckhouse ืืฉ ืืช ืื ืืจืืืืื ืืืจืืฉืื ืืชืคืขืื: ืืืื ืื, ื ืืืืจ ืขื ืชืจืฉืืืื ื ืืืื, ืืืืื ืืืชืจืืืช, ืืืืืช ืืฉืชืืฉืื ืืจื ืกืคืงืื ืืืฆืื ืืื ืืืืฉื ืืื ืืืืืช ืืืืืื ืื ืืื'. ืืื ืืขื ืืืชืงืื ืืฉืืื "ืืฉืืื" ืฉืืื ืืคืชืจืื ืื ืืื, ืืืืืื ืฉืืขืชืื ืงืจืืืืช ืื ืืืชื ืืคืฉืจื ืื ืืืืื ืืฆืืจื ืืืฉืืืช ืืืฆืืช ืืืจืืืืื.
NB: ืื ืื ืืกืืื ืฉืื ื, ืืืื ืื ืกืคืฆืืคื. ืื ืื ื ืืฉืื ืืืคื ืื ืืฆืืขืื ืฉืื ืืื ืฆืจืื ืืคืจืืก ืืฉืืืืืช Kubernetes ืืขืฆืื ืืืงืื ืืืฉืชืืฉ ืืคืชืจืื ืืช ืืืื ืื. ืืื, ืืื ืื ื ื ืืกืืื ืืืืชื ืืืคืขืืช Kubernetes ื- Yandex ืืื ื ืืชื ืฉืื ืืขืจืื ืืืื ืฉืืจืืช ืื ืืืืืจ ืื.
ืื ืื ืืืื?
ืื, ืืืจ ืืืืจื ื ืขื ืืืืฉื ืืืืืจื ืืช ืืืืกืื ื- Kubernetes:
ื ืืื ืืขืืฉืื, ืกืคืงื ืฉืืจืืชื ืขื ื ืืืืืื ืจืืื ืคืืชืื ืืจืืืืจืื ืืฉืืืืฉ ืืืืกืงื ืืขื ื ืฉืืื ืื ืคื ืงืืืข ื-Kubernetes. ืื ืืกืคืง ืืื ืืจืืืืจ ืืื, ืืื ืื ืืคืื ืงืฆืืืช ืืืจืืฉืืช ืืกืืคืงืืช ืืจื ื-API, ืื ืฉืื ืืืจ ืื ืืื ืข ืืื ืืืืฉื ืืช ืืืจืืืืจ ืืขืฆืื. ืื ืื ืฉืงืจื ืขื Yandex.Cloud.
ืืงืื ื ืืืกืืก ืืคืืชืื Operation
ืืื ืืขืงืื ืืืจ ืืืฆื ืฉื ืคืขืืืืช ืืจืืืืช (ืืืืืื, ืืฆืืจืช ืืืกืง ืืืฉ). ืืื ืืืฆืืจ ืืื ืืจืืงืฆืื ืขื ื-API ืฉื Yandex.Cloud, ืืฉืชืืฉ
ืืชืืฆืื ืฉื ืืขืืืื ืฉื ืขืฉืชื
ะ ะตะฐะปะธะทะฐัะธั
ืชืืื ืืช ืขืืงืจืืืช
ืืจืืข ืื ืื ืืืชืงื ืชืืื ืืคืื ืงืฆืืืช ืืืืืช:
- ืืืื ืช ืืืกืงืื ืืื ืืืืจื ืืืฉืืื ืืคื ืืืืคืืืืืื ืฉื ืืฆืืชืื ืืืฉืืื;
- ืืกืจืช ืืืกืงืื ืฉืืืืื ื ืืขืืจ;
- ืฉืื ืื ืืืื ืื ืืงืืื ืขืืืจ ืืืกืงืื (Yandex.Cloud
ืืื ื ืชืืื ืืืืืช ืืืืกืงืื ืฉืืืจืืืื ืืืืื ื ืืืืจืืืืืืช). ืืืืืข ืขื ืืืืคื ืฉืื ืืื ืฆืจืื ืืฉื ืืช ืืช ืื ืื ืืืชืงื ืืื ืืืคืื ืืช ืฉืื ืื ืืืืื ืืื ืืืืื ืืื ืืืคืฉืจ, ืจืื ืืืื.
ืืขืชืื, ืื ื ืืชืื ื ืื ืืืืฉื ืชืืืื ืืืฆืืจื ืืืืืงื ืฉื ืฆืืืืื ืืืกืง.
ืืงืืฉื ืืขืืงืจื ืืืื ืืืชืืืจ ืขืืื
ืืืขืืจ ืืืืืืช ืืืืืื ืืืกืงืื ืืืื ืืืช ื-Yandex.Cloud API ืืื ืืืืื ืฉืืกืืืช ืืช ืคืขืืืช ืฉืื ืื ืืืืื ืขืืืจ PV (Persistent Volume): ืืืงืจื ืื, ืืฉ ืฆืืจื ืืขืฆืืจ ืืช ืืคืื ืฉื ืืืคืืืงืฆืื ืฉืืฉืชืืฉ ืืืืกืง, ืืื ืืืื ืืืจืื ืืืืฉืืื ืืฉืืชื.
ืขื ืคื 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
ืขืืืจ ืืืฆืืื, ืืืืกืง ืืืชืงื, ืืคืื ืืชืืื.
ืืื ื ืจืื ืคืฉืื ืืกืคืืง, ืืื ืืื ืชืืื ืืฉ ืืืืืืืช. ืืืืื ืืืกืงืื
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, ืืฉ ืืืืืืจ ืืช ืืืืื ืื ืฉืืืคืฉืจ ืจืืืืืช ืืฉืืชืคืืช.
ืื ืืฉืืืื ืืืจืืฉืื ืืืชืงื ื ืขืฆืื
ืืื ืฉืื ืื ืืขืืื ืชืฆืืจื ืืช ืืืืจืื ืืืืื:
- ืฆืืื ืืช ืืืื ืืกืคืจืืื ืืื ืืคืกื (
folder-id
) Yandex.Cloud (ืจืื ืชืืขืื ); - ืืื ืืืฆืืจ ืืื ืืจืืงืฆืื ืขื ื-API ืฉื Yandex.Cloud, ืื ืื ืืืชืงื ืฉื CSI ืืฉืชืืฉ ืืืฉืืื ืฉืืจืืช. ืืื ืืคืกื, ืกืื ืืืื ืืขืืืจ
ืืคืชืืืช ืืืจืฉืื ืืืฉืืื ืืฉืืจืืช. ืืชืืขืืืึฐืชืึผืึธืจ , ืืืฆื ืืืฆืืจ ืืฉืืื ืฉืืจืืช ืืืงืื ืืคืชืืืช.
ืืื ืืืื -
ืชืืืื ื ืืกืคืช
ืืชืืฆืื ืืื, ืืจืฆืื ื ื ืืฆืืื ืฉืืืืขื ื ืืจืืืืจ CSI ืื ืื ืืชืื ืจืฆืื ืืืื ืืืชืืืช ืืคืืืงืฆืืืช ื-Go, ืืื ืืืื ืฆืืจื ืืืืฃ ืืืืจื. ืื ืื ื ืจืื ืื ื ืืขืฉื ืืฉืืืจ ืขื ืืืฉืื ืืฉืื ื, ืื ืื Yandex ืืืื ืขื ืืื ืืชืืืื ืืืืฉืื ืืชืืื ืื ืื, ื ืฉืื ืืืขืืืจ ืืื ืืช ืืืืืจ.
ืื ืืกืฃ, ื-Yandex ืืฉ ืื ืจืื ืืืฉืื ืืฉืื ืฉื ืื ืื ืืืชืงื CSI ืืืฉืืื Kubernetes ืืื ืืื ืฉืื, ืฉื ืืชื ืืฉืืจืจ ืืงืื ืคืชืื. ืื ื ืจืืืื ืื ืืช ืืคืฉืจืืช ืืคืืชืื ืืื ืืืืืืืช โ ืืงืืืื ืชืืื ืืืฉืชืืฉ ืืืจืืืจ ืืืื ืฉื ืกืคืง ืฉืืจืืช, ืืื ืืืืจืช ืฆื ืฉืืืฉื.
ื .ื.
ืงืจื ืื ืืืืื ืฉืื ื:
- ยซ
ืชืืกืคื ื ืคื ืืืืกืื Kubernetes: ื-Flexvolume ืืขื CSI "; - ยซ
ืื ื ืืืื ืื ืืช ืืืฉืง ืืืกืื ืืืืืืืช (ื-Kubernetes ืืื ืจืง) "; - ยซ
ืืื ืงื ืื ืื ืืืืื ืืฉืืื Kubernetes? ืืืจืื ืขื ืืคืขืื ืชืืกืฃ "; - ยซ
ืืจืืืช ืืืฉืืื ืฉื Kubernetes (ืกืงืืจื ืืืืืช ืืืื ืืืืื) ".
ืืงืืจ: www.habr.com