Skip to content

56 Kubernetes存储扩展架构:一个真实的存储系统如何接入或移除新存储设备?

你好,我是周志明。

我们知道,容器存储具有很强的多样性,如何对接后端实际的存储系统,并且完全发挥出它所有的性能与功能,并不是Kubernetes团队所擅长的工作,这件事情只有存储提供商才能做到最好。所以,我们其实可以理解容器编排系统为什么会有很强烈的意愿,想把存储功能独立到外部去实现。

上节课我已经反复提到过多次In-Tree、Out-of-Tree插件,那么今天这节课,我就会以存储插件的接口与实现为中心,带你去解析Kubernetes的容器存储生态。

Kubernetes存储架构

在正式开始讲解Kubernetes的In-Tree、Out-of-Tree存储插件前,我们有必要先去了解一点Kubernetes存储架构的知识。了解一个真实的存储系统是如何接入到新创建的Pod中,成为可以读写访问的Volume,以及当Pod被销毁时,Volume如何被回收,回归到存储系统之中的。

那么,对于刚刚所说的这几点,Kubernetes其实是参考了传统操作系统接入或移除新存储设备的做法,把接入或移除外部存储这件事情,分解为了以下三个操作:

  • 决定应准备(Provision)何种存储:Provision可类比为给操作系统扩容而购买了新的存储设备。这步确定了接入存储的来源、容量、性能以及其他技术参数,它的逆操作是移除(Delete)存储。
  • 将准备好的存储附加(Attach)到系统中:Attach可类比为将存储设备接入操作系统,此时尽管设备还不能使用,但你已经可以用操作系统的fdisk -l命令查看到设备。这步确定了存储的设备名称、驱动方式等面向系统侧的信息,它的逆操作是分离(Detach)存储设备。
  • 将附加好的存储挂载(Mount)到系统中:Mount可类比为将设备挂载到系统的指定位置,也就是操作系统中mount命令的作用。这步确定了存储的访问目录、文件系统格式等面向应用侧的信息,它的逆操作是卸载(Unmount)存储设备。