k8s存储插件

276 阅读2分钟

在Kubernetes系统中,容器应用所需的存储资源被抽象为存储卷(Volume),Volume是与Pod绑定的(独立于容器)与Pod具有相同生命周期的资源对象。我们可以将Volume的内容理解为⽬录或⽂件,容器如需使⽤某个Volume,则仅需设置volumeMounts将⼀个或多个Volume挂载为容器中的⽬录或⽂件,即可访问Volume中的数据。Volume具体是什么类型,以及由哪个系统提供,对容器应⽤来说是透明的。

Kubernetes⽬前⽀持的Volume类型包括Kubernetes的内部资源对象类型(In-Tree)、开源共享存储等(Out-of-Tree)类型的存储服务。

1、In-Tree

Kubernetes 默认提供了主流的存储卷接入方案(如HostPath、Ceph、Glusterfs、NFS等),这种默认提供的存储方案一般成为In-Tree类型的存储。In-Tree 指存储接入逻辑在 Kubernetes 源码内部实现的,和 Kubernetes 一起发布、管理的,但是更新迭代慢、灵活性比较差

# 查看k8s in tree 内置支持的存储类型
kubectl explain pod.spec.volumes

2、Out-Of-Tree

Out-Of-Tree存储类型独立于 Kubernetes 源码,目前主要有 CSIFlexVolume 两种实现机制,开发者可以根据自己的存储类型实现不同的存储插件接入到 Kubernetes 中,其中FlexVolume是早期的存储扩展方式,常用于低版本的k8s集群中, CSI 是后期提出的扩展方式,目前已发展成为主流的接入方式。

  • Flexvolume
Kubernetes中自定义扩展存储驱动方式之一
用户将编写好的插件的二进制可执行文件放置到宿主机的指定目录即可正常调用使用(静态二进制可执行文件)
该二进制可执行文件可以使用任何语言开发
主要实现的接口:init、attach、detach、waitforattach、isattached、mountdevice、unmountdevice、mount、unmount
  • CSI
全称Container Storage Interface
Kubernetes中自定义扩展存储驱动方式之一
CSI 也是基于 gRPC 实现
要求插件开发者要实现三个 gRPC 服务:identity service、controller service、node service
CSI 监听在 unix socket 文件上
不能被kube-controller-manager直接调用
一般使用sidecar容器来部署CSI插件