目录
[一、Volume 存储卷核心价值](#一、Volume 存储卷核心价值)
[二、emptyDir 临时存储卷](#二、emptyDir 临时存储卷)
[三、hostPath 节点本地存储卷](#三、hostPath 节点本地存储卷)
[四、持久化存储 PV 与 PVC](#四、持久化存储 PV 与 PVC)
[1. PV(PersistentVolume)持久卷](#1. PV(PersistentVolume)持久卷)
[2. PVC(PersistentVolumeClaim)持久卷申领](#2. PVC(PersistentVolumeClaim)持久卷申领)
[3. PV 访问模式](#3. PV 访问模式)
[4. PV 回收策略](#4. PV 回收策略)
一、Volume 存储卷核心价值
容器内的文件属于临时存储,会带来两个明显问题:一是容器崩溃重启后数据丢失;二是同一个 Pod 内多个容器无法共享文件。Kubernetes Volume(存储卷) 就是用来解决这两个问题的关键组件。它独立于容器生命周期,支持数据持久化与容器间共享,Pod 可以同时使用多种类型的卷。
二、emptyDir 临时存储卷
emptyDir 是最基础的临时卷,随 Pod 创建而创建、随 Pod 删除而销毁。
Pod 被调度到节点时自动创建,初始为空
同一个 Pod 内所有容器均可读写共享
容器崩溃不会导致数据丢失
支持通过 sizeLimit 设置容量限制
三、hostPath 节点本地存储卷
hostPath 将节点本机的目录或文件挂载到 Pod 内部,数据存储在节点本地。
可以直接使用节点文件系统
Pod 删除后数据依然保留
会降低 Pod 迁移能力,生产应尽量避免
支持自动创建目录 DirectoryOrCreate
四、持久化存储 PV 与 PVC
1. PV(PersistentVolume)持久卷
PV 是集群级别的存储资源,由管理员配置或动态供给。它独立于 Pod 生命周期,支持 NFS、云存储等多种后端,是提供持久化能力的核心资源。
2. PVC(PersistentVolumeClaim)持久卷申领
PVC 是用户对存储的 "申请",类似 Pod 申请 CPU / 内存。用户通过 PVC 声明需要的存储大小、访问模式,系统自动匹配合适的 PV。Pod 只需挂载 PVC 即可使用持久存储。
3. PV 访问模式
ReadWriteOnce:单节点读写挂载
ReadOnlyMany:多节点只读挂载
ReadWriteMany:多节点读写挂载
ReadWriteOncePod:仅单个 Pod 读写挂载
4. PV 回收策略
Retain:手动回收
Recycle:自动清除数据(即将废弃)
Delete:删除 PV 并清理底层存储
五、问答题
Q:解释什么是 Kubernetes 的 Volume。
A: 容器中的文件在磁盘上是临时存放的,这给在其中运行的某些应用程序会带来一些问题,其一是当容器在崩溃时,kubelet 会以干净的状态重启容器,原有容器中的文件会丢失。第二个问题是,有些业务会要求在同一 Pod 中运行多个容器,而这些容器之间会有共享文件的情况出现。解决这些问题的办法是使用 Kubernetes Volume。Kubernetes 支持很多类型的卷。Pod 可以同时使用任意数目的卷类型。临时卷类型的生命周期与 Pod 相同,持久卷可以比 Pod 有更长的存活期。当 Pod 被删除时,临时卷也会被删除,但持久卷会保留在磁盘上。对于给定 Pod 中任何类型的卷,在其中的任何容器重启期间 Pod 中的数据都不会丢失。
Q:解释 emptyDir 卷类型的特征。
A: 当 Pod 被分派到某个 Node 上时,emptyDir 卷就会被创建,并且在 Pod 运行期间一直会存在。就像其名称表示的那样,emptyDir 卷最初是空的。尽管 Pod 中的容器挂载 emptyDir 卷的路径可能会有不同,但这些容器都可以读写 emptyDir 卷中相同的文件。当 Pod 因为某些原因被从节点上删除时,emptyDir 卷中的数据也会被永久删除。容器崩溃并不会导致 Pod 从节点上移除,因此在容器崩溃期间 emptyDir 卷中的数据是安全的。
Q:解释 hostPath 卷类型的特征。
A: hostPath 卷能将主机节点文件系统上的文件或目录直接挂载到 Pod 中。但要注意的是,要尽可能避免使用这个类型的卷,它会限制 Pod 的迁移性。
Q:解释 PV 卷类型的特征。
A: PV(PersistentVolume,持久卷),是集群中的一块存储,可以由管理员事先供应,或者使用存储类(Storage Class)来动态供应。PV 持久卷和节点一样,都是集群资源,PV 持久卷和普通的 Volume 类似,也是使用卷插件来实现的,只是它拥有独立于任何使用 PV 的 Pod 的生命周期。
Q:什么是 PVC,如何使用它。
A: PVC(PersistentVolumeClaim,持久卷申领)表达的是用户对存储的请求。概念上与 Pod 类似。Pod 会耗用节点资源,而 PVC 申领会耗用 PV 资源。Pod 可以请求特定数量的资源(CPU 和内存);同样 PVC 申领也可以请求特定的大小和访问模式。Pod 将 PVC 申领当做存储卷来使用。集群会检视 PVC 申领,找到所绑定的卷,并为 Pod 挂载该卷。
Q:PV 有哪几种访问模式,详细说明。
A: PV 的访问模式有四种:ReadWriteOnce:卷可以被一个节点以读写方式挂载。该访问模式也允许运行在同一节点上的多个 Pod 访问卷。
ReadOnlyMany:卷可以被多个节点以只读方式挂载。
ReadWriteMany:卷可以被多个节点以读写方式挂载。
ReadWriteOncePod:卷可以被单个 Pod 以读写方式挂载。
Q:解释 PV 的回收策略。
A: PV 的回收策略有:
Retain:需要手动回收
Recycle:执行的基本操作是 rm -rf /thevolume/*(1.33 后将被抛弃)
Delete:对于支持 Delete 回收策略的卷插件,删除动作会将 PersistentVolume 对象从 K8s 中移除,同时也会从外部基础设施(如 AWS EBS 或 GCE PD 卷)中移除所关联的存储资源。