Git Repository: https://github.com/kubernetes-csi/external-resizer
Status: Alpha
Latest release | Branch | Min CSI Version | Max CSI Version | Container Image | Min K8s Version | Max K8s Version | Recommended K8s Version |
---|---|---|---|---|---|---|---|
external-resizer v0.2.0 | master | v1.1.0 | - | quay.io/k8scsi/csi-resizer:v0.2.0 | v1.15 | - | v1.15 |
external-resizer v0.1.0 | master | v1.1.0 | - | quay.io/k8scsi/csi-resizer:v0.1.0 | v1.14 | v1.14 | v1.14 |
默认命令行
/csi-resizer --v=5 --csi-address=/var/lib/csi/sockets/pluginproxy/mock.socket
1. NewResizer 函数
csi.New 建立GRPC 连接
// NewResizer creates a new resizer responsible for resizing CSI volumes.
func NewResizer(
address string,
timeout time.Duration,
k8sClient kubernetes.Interface,
informerFactory informers.SharedInformerFactory) (Resizer, error) {
csiClient, err := csi.New(address, timeout)
if err != nil {
return nil, err
}
return NewResizerFromClient(csiClient, timeout, k8sClient, informerFactory)
}
1.1 NewResizerFromClient 函数
func NewResizerFromClient(
csiClient csi.Client,
timeout time.Duration,
k8sClient kubernetes.Interface,
informerFactory informers.SharedInformerFactory) (Resizer, error) {
driverName, err := getDriverName(csiClient, timeout)
if err != nil {
return nil, fmt.Errorf("get driver name failed: %v", err)
}
1.1.1 插件是否支持 controller service
是否 controller 设置能力 PluginCapability_Service_CONTROLLER_SERVICE
supportControllerService, err := supportsPluginControllerService(csiClient, timeout)
if err != nil {
return nil, fmt.Errorf("failed to check if plugin supports controller service: %v", err)
}
if !supportControllerService {
return nil, controllerServiceNotSupportErr
}
1.1.2 controller 是否有能力 resize
主要时插件是否设置了能力 ControllerServiceCapability_RPC_EXPAND_VOLUME
如果 contoller 没有设置能力,试试看 node 是否设置了能力
扫描二维码关注公众号,回复:
8728803 查看本文章
supportControllerResize, err := supportsControllerResize(csiClient, timeout)
if err != nil {
return nil, fmt.Errorf("failed to check if plugin supports controller resize: %v", err)
}
if !supportControllerResize {
supportsNodeResize, err := supportsNodeResize(csiClient, timeout)
if err != nil {
return nil, fmt.Errorf("failed to check if plugin supports node resize: %v", err)
}
if supportsNodeResize {
klog.Info("The CSI driver supports node resize only, using trivial resizer to handle resize requests")
return newTrivialResizer(driverName), nil
}
return nil, resizeNotSupportErr
}