【kubernetes/k8s源码分析】 kubernetes csi external-resizer 源码分析

Git Repository: https://github.com/kubernetes-csi/external-resizer

Status: Alpha

Latest releaseBranchMin CSI VersionMax CSI VersionContainer ImageMin K8s VersionMax K8s VersionRecommended K8s Version
external-resizer v0.2.0masterv1.1.0-quay.io/k8scsi/csi-resizer:v0.2.0v1.15-v1.15
external-resizer v0.1.0masterv1.1.0-quay.io/k8scsi/csi-resizer:v0.1.0v1.14v1.14v1.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 是否设置了能力

	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
	}

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值