Flexvolume

Flexvolume的Volume Plugin只包含了一部分Flexvolume的实现代码,这部分代码只有Proxy功能和一些默认实现
AD Controller和Volume Manager调用Volume Plugins的接口时,接口只是把调用转到相应的Flexvolume的可被Kubelet驱动的可执行文件的命令行调用(因此Flexvolume不是一个常驻内存的守护进程);若Flexvolume中没有定义某个接口,就会调用默认实现。 
下面是命令格式和调用的实例:
 
Flexvolum包含以下接口:
  • init
主要做一些初始化的操作,比如部署插件、更新插件时的初始化操作
会返回DriveCapabilities类型的数据结构,用来说明Flexvolume插件有哪些功能
  • GetVolumeName
返回插件名
  • Attach:
挂载功能的实现
根据 --enable-controller-attach-detach标签来决定是由AD Controller还是 Kubelet来发起挂载操作
  • WaitforAttach: 
Attach经常是异步操作,因此需要等待挂载完成,才能需要进行下面的操作
  • MountDevice、Setup
此处将mount分为MountDevice和SetUp两部分
    MountDevice主要做一些简单的预处理工作,比如设备格式化、挂载到 GlobalMount目录中等
    Setup使用Bind方式将GlobalPath中的设备挂载到Pod的本地目录
  • GetPath
获取每个Pod对应的本地挂载目录
  • TearDown、UnmountDevice、Detach
实现的是上面一些接口的逆过程
  • ExpandVolumeDevice
扩容存储卷,由Expand Controller发起调用
  • NodeExpand:
扩容文件系统,由Kubelet发起调用。
 
上面这些接口不一定需要全部实现,如果某个接口没有实现的话,可以按如下格式返回以告诉调用者没有实现这个接口:
{
"status": "Not supported",
"message": "error message"
}

 

 
Flexvolume的代码示例:
posted @ 2020-05-04 00:11  扬羽流风  阅读(326)  评论(0编辑  收藏  举报