10.3 核心设计:PVC与PV体系

在Kubernetes中通过引入PVC和PV资源对象的设计,来解耦Pod和Pod使用的存储的生命周期管理,而PVC和PV资源对象由一组单独的Kubernetes Controller来管理。这样的设计可以给以下常见的场景带来良好的扩展性:

● 宿主机故障数据迁移(如StatefulSet管理的Pod带远程Volume迁移)。

● 多Pod共享同一个数据Volume(如共享NFS文件系统)。

● Volume Snapshot和在线扩容Size等功能的扩展。

而PVC和PV之间有什么区别?为什么Kubernetes要引入两个看起来相近的资源对象?

简单来说是为了简化用户使用存储的过程,区分存储使用方与存储服务提供方的职责。用户只需通过PVC声明自己需要的存储Size、AccessMode(单Node独占还是多Node共享?只读还是读写访问?)等业务真正关心的需求,而不用关心存储系统的实现细节,PV和其对应的后端复杂信息完全可以交由Kubernetes Cluster或Administrator统一维护和管控。

接下来我们来一起看看在Kubernetes中通过PVC和PV使用存储的两种方式。

(1)预先声明PV的静态方式:所需存储类型、大小等预先定义和分配好,一般来说相应的存储是预先分配好的,这种使用方式不够灵活,如图10-1所示。

图10-1 以静态方式使用存储

(2)通过SC按需动态分配方式:SC用于声明动态申请的存储Volume将由哪种Volume Plugin创建、创建时的参数,还可以从其他功能性和非功能性角度进行描述。这种方式可按需动态分配,使用起来比较灵活,在Kubernetes中比较常用,如图10-2所示。

图10-2 以动态方式使用存储