基于华为fusionstorage的块存储CSI

承接上文,块存储的CSI要比对象存储复杂一些,但总的处理逻辑还是一致的。下面以华为fusionstorage的CSI为例进行介绍,该插件支持了多个后端存储,如fusionstorage和oceanstor。下面是CSI插件与后端存储(fusionstorage)交互用到的配置文件。其中pools为事先创建好的存储池,parameters为所有k8s的node节点的hostname:ip对,用于执行attach块存储操作。

  csi.json: |
    {
        "backends": [
            {
                "storage": "fusionstorage-san",
                "name": "***",
                "url": "https://*.*.*.*:28443",
                "user": "***",
                "password": "***",
                "pools": ["***"], 
                "parameters": {"SCSI": {"***": "*.*.*.*"}}
            }
        ]
    }

如上图所示,Node上的CSI容器挂载了Node的/dev/etc/var/lib/kubelet目录。整体挂载流程为:在后端存储创建一个卷(如果不存在),并将其attach到node节点的/dev目录下(具体的attach动作由iSCSI客户端,NFS,FC等方式完成);由于容器挂载了/dev目录,在容器中直接格式化该块存储并挂载到/var/lib/kubelet中的pod目录即可。/etc目录只用于在csi容器中获取node节点的hostname(PS:在容器中挂载node节点的/dev和/etc目录是比较危险的,如果容器损坏了这些目录,可能导致node节点的系统错误)。

创建并挂载卷的调用过程如下(下载):

参考:

posted @ 2020-04-07 13:01  charlieroro  阅读(1284)  评论(0编辑  收藏  举报