FlexVolume
FlexVolume 是 Kubernetes v1.8+ 支持的一種存儲插件擴展方式。類似於 CNI 插件,它需要外部插件將二進制文件放到預先配置的路徑中(如 /usr/libexec/kubernetes/kubelet-plugins/volume/exec/
),並需要在系統中安裝好所有需要的依賴。
對於新的存儲插件,推薦基於 CSI 構建。
FlexVolume 接口
實現一個 FlexVolume 包括兩個步驟
實現 FlexVolume 插件接口,包括
init/attach/detach/waitforattach/isattached/mountdevice/unmountdevice/mount/umount
等命令(可參考 lvm 示例 和 NFS 示例)將插件放到
/usr/libexec/kubernetes/kubelet-plugins/volume/exec/<vendor~driver>/<driver>
目錄中
FlexVolume 的接口包括
init:kubelet/kube-controller-manager 初始化存儲插件時調用,插件需要返回是否需要要
attach
和detach
操作attach:將存儲卷掛載到 Node 上
detach:將存儲卷從 Node 上卸載
waitforattach: 等待 attach 操作成功(超時時間爲 10 分鐘)
isattached:檢查存儲卷是否已經掛載
mountdevice:將設備掛載到指定目錄中以便後續 bind mount 使用
unmountdevice:將設備取消掛載
mount:將存儲卷掛載到指定目錄中
umount:將存儲卷取消掛載
而存儲驅動在實現這些接口時需要以 JSON 格式返回數據,數據格式爲
使用 FlexVolume
在使用 flexVolume 時,需要指定卷的 driver,格式爲 <vendor~driver>/<driver>
,如下面的例子使用了 kubernetes.io/lvm
注意:
在 v1.7 版本,部署新的 FlevVolume 插件後需要重啓 kubelet 和 kube-controller-manager;
而從 v1.8 開始不需要重啓它們了。
Last updated