FlexVolume

    • 实现 FlexVolume 插件接口,包括 init/attach/detach/waitforattach/isattached/mountdevice/unmountdevice/mount/umount 等命令(可参考 和 NFS 示例
    • 将插件放到 /usr/libexec/kubernetes/kubelet-plugins/volume/exec/<vendor~driver>/<driver> 目录中

    FlexVolume 的接口包括

    • init:kubelet/kube-controller-manager 初始化存储插件时调用,插件需要返回是否需要要 attachdetach 操作
    • attach:将存储卷挂载到 Node 上
    • detach:将存储卷从 Node 上卸载
    • waitforattach: 等待 attach 操作成功(超时时间为 10 分钟)
    • isattached:检查存储卷是否已经挂载
    • mountdevice:将设备挂载到指定目录中以便后续 bind mount 使用
    • unmountdevice:将设备取消挂载
    • mount:将存储卷挂载到指定目录中

    使用 FlexVolume

    在使用 flexVolume 时,需要指定卷的 driver,格式为 <vendor~driver>/<driver>,如下面的例子使用了 kubernetes.io/lvm

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. namespace: default
    5. spec:
    6. containers:
    7. - name: nginx
    8. image: nginx
    9. volumeMounts:
    10. - name: test
    11. mountPath: /data
    12. volumes:
    13. - name: test
    14. flexVolume:
    15. driver: "kubernetes.io/lvm"
    16. fsType: "ext4"
    17. options:
    18. volumeID: "vol1"
    19. size: "1000m"
    20. volumegroup: "kube_vg"
    • 在 v1.7 版本,部署新的 FlevVolume 插件后需要重启 kubelet 和 kube-controller-manager;
    • 而从 v1.8 开始不需要重启它们了。