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 初始化存储插件时调用,插件需要返回是否需要要
attach
和detach
操作 - attach:将存储卷挂载到 Node 上
- detach:将存储卷从 Node 上卸载
- waitforattach: 等待 attach 操作成功(超时时间为 10 分钟)
- isattached:检查存储卷是否已经挂载
- mountdevice:将设备挂载到指定目录中以便后续 bind mount 使用
- unmountdevice:将设备取消挂载
- mount:将存储卷挂载到指定目录中
使用 FlexVolume
在使用 flexVolume 时,需要指定卷的 driver,格式为 <vendor~driver>/<driver>
,如下面的例子使用了 kubernetes.io/lvm
apiVersion: v1
kind: Pod
metadata:
namespace: default
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: test
mountPath: /data
volumes:
- name: test
flexVolume:
driver: "kubernetes.io/lvm"
fsType: "ext4"
options:
volumeID: "vol1"
size: "1000m"
volumegroup: "kube_vg"
- 在 v1.7 版本,部署新的 FlevVolume 插件后需要重启 kubelet 和 kube-controller-manager;
- 而从 v1.8 开始不需要重启它们了。