简述 Kubernetes 共享存储的作用?
Kubernetes对于有状态的容器应用或者对数据需要持久化的应用,需要更加可靠的存储来保存应用产生的重要数据,以便容器应用在重建之后仍然可以使用之前的数据。因此,需要使用共享存储。
简述 Kubernetes PV 和 PVC ?
PV 是对底层网络共享存储的抽象,将共享存储定义为一种“资源”。
PVC 则是用户对存储资源的一个“申请”。
简述Kubernetes PV 生命周期内的阶段?
某个PV在生命周期中可能处于以下4个阶段(Phaes)之一。
- Available:可用状态,还未与某个PVC绑定。
- Bound:已与某个PVC绑定。
- Released:绑定的PVC已经删除,资源已释放,但没有被集群回收。
- Failed:自动资源回收失败。
k8s数据持久化的方式有哪些?
EmptyDir(空目录):
没有指定要挂载宿主机上的某个目录,直接由Pod内部映射到宿主机上。类似于docker中的manager volume
。
主要使用场景:
- 只需要临时将数据保存在磁盘上,比如在合并/排序算法中;
- 作为两个容器的共享存储,使得第一个内容管理的容器可以将生成的数据存入其中,同时由同一个webserver容器对外提供这些页面。
emptyDir的特性:
同一个pod里面的不同容器,共享同一个持久化目录,当pod节点删除时,volume的数据也会被删除。如果仅仅是容器被销毁,pod还在,则不会影响volume中的数据。
总结来说:emptyDir的数据持久化的生命周期和使用的pod一致,一般是作为临时存储使用。
Hostpath
将宿主机上已存在的目录或文件挂载到容器内部。类似于docker中的bind mount挂载方式。这种数据持久化方式,运用场景不多,因为它增加了pod与节点之间的耦合。
一般对于k8s集群本身的数据持久化和docker本身的数据持久化会使用这种方式,可以自行参考API Server的yaml文件:kube-apiserver.yaml
,位于:/etc/kubernetes/main…
目录下。
PersistentVolume(简称PV)
基于NFS服务的PV,也可以基于GFS的PV。它的作用是统一数据持久化目录,方便管理。
在一个PV的yaml文件中,可以对其配置PV的大小,指定PV的访问模式:
- ReadWriteOnce:只能以读写的方式挂载到单个节点;
- ReadOnlyMany:能以只读的方式挂载到多个节点;
- ReadWriteMany:能以读写的方式挂载到多个节点。指定pv的回收策略:recycle:清除PV的数据,然后自动回收;Retain:需要手动回收;delete:删除云存储资源,云存储专用;
PS:这里的回收策略指的是在PV被删除后,在这个PV下所存储的源文件是否删除。
简述 Kubernetes 所支持的存储供应模式?
Kubernetes支持两种资源的存储供应模式:静态模式(Static)和动态模式(Dynamic)。
- 静态模式:集群管理员手工创建许多PV,在定义PV时需要将后端存储的特性进行设置。
- 动态模式:集群管理员无须手工创建PV,而是通过
StorageClass
的设置对后端存储进行描述,标记为某种类型。此时要求PVC对存储的类型进行声明,系统将自动完成PV的创建及与PVC的绑定。
简述 Kubernetes CSI 模型?
Kubernetes CSI是Kubernetes推出与容器对接的存储接口标准。
存储提供方只需要基于标准接口进行存储插件的实现,就能使用Kubernetes的原生存储机制为容器提供存储服务。
CSI 使得存储提供方的代码能和Kubernetes代码彻底解耦,部署也与Kubernetes核心组件分离,显然,存储插件的开发由提供方自行维护,就能为Kubernetes用户提供更多的存储功能,也更加安全可靠。
CSI包括CSI Controller
和CSI Node
:
CSI Controller
的主要功能是提供存储服务视角对存储资源和存储卷进行管理和操作。CSI Node
的主要功能是对主机(Node)上的数据卷(Volume)进行管理和操作。