存储卷基础
在Docker中,文件系统与Docker容器具有相同的生命周期。在多节点运行Docker的环境中,应用会因为各种原因而退出。于是在多节点中运行的容器就面临着一种境况,如某个容器崩溃、节点崩溃、用户误删除而导致容器被删除。若我们直接将数据存在容器内的文件系统上数据也将丢失,为了避免数据与容器产生直接绑定关系,我们应该将其数据存储在容器文件系统之外,而存储方式则是为容器引入外部的存储空间。
外部存储分类
外部的存储空间分为两类:
- Host:宿主机级别,在节点本地进行存储。
- Network Storage:网络存储
对于Host类型的存储来说,若在其节点上运行的容器崩溃了,再次启动容器时,只能在同一个节点上进行复,而对于集群环境的k8s来说这种类型的存储不适用。因此使用网络存储更加合适。
共享式存储设备
共享式存储设备分为:
- 多路并行读写
- 多路只读
- 单路读写
pod使用Volume步骤
- 在Pod上定义存储卷,并关联到目标存储服务上
- 在需要用到存储卷的容器上挂载其所属的Pod的存储卷
pod中使用volume的资源清单格式
1 | spec: |
VOL_TYPE 存储卷类型
存储卷指的是pod外部某个存储空间,而要想访问存储空间通常需要在节点上能适配到存储空间,也就是所谓的驱动程序。
管理存储卷的功能是kubelet实现的,在kubelet中实现此功能的位置叫做Volume Plugin,也叫做卷类型。
卷插件分为以下几种类型:
- Host级别:hostPath、Local
- 网络级别:NFS、GlusterFS、rbd(块设备)、CephFS(文件系统)、OSS(aliyun)
- 临时存储:emptyDir(空目录,将内存空间作为存储使用)
对于任何一种存储卷都需要,kubelet通过Volume Plugin
的支持才能实现。
如果Volume Plugin无法支持,也想让其能被使用则需要借助一种特殊形式CSI来使用
CSI(Container Storage Interface)
CSI容器存储接口,一旦借助于CSI来实现,就意味任何存储服务商可以自己开发一个专用的外部存储插件,通过CSI对接到kubelet之上,如此其扩展能力就强大了,任何服务商都能提供。
目前来说有很多服务都能被CSI所对接,如Longhorn、
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 MyLinuxOPS!