目录
[1. 解释什么是Kubernetes的Volume。](#1. 解释什么是Kubernetes的Volume。)
[2. 解释emptyDir卷类型的特征。](#2. 解释emptyDir卷类型的特征。)
[3. 解释hostPath卷类型的特征。](#3. 解释hostPath卷类型的特征。)
[4. 解释PV卷类型的特征。](#4. 解释PV卷类型的特征。)
[5. 什么是PVC,如何使用它。](#5. 什么是PVC,如何使用它。)
[6. PV 有哪几种访问模式,详细说明。](#6. PV 有哪几种访问模式,详细说明。)
[7. 解释PV的回收策略。](#7. 解释PV的回收策略。)
1. 解释什么是Kubernetes的Volume。
Kubernetes Volume(卷) 是Pod中容器可以访问的存储目录,它解决了容器的两个核心问题:容器重启后数据丢失以及同一Pod内多个容器间文件共享。
K8s Volume的生命周期与Pod相同,而不是与容器绑定。这意味着:当Pod中的容器重启时,Volume中的数据仍然保留;只有当Pod被彻底删除时,Volume中的数据是否清除才取决于具体的卷类型(例如emptyDir会清除,hostPath或PersistentVolume则可能保留)。
Volume支持多种后端存储,包括临时存储(emptyDir)、宿主机存储(hostPath)、网络存储(NFS)等。Pod内的所有容器可以共享同一个Volume,通过不同的挂载路径访问。
2. 解释emptyDir卷类型的特征。
emptyDir 类型的卷在Pod被调度到节点时创建一个空目录,用于临时存储。
它有以下特征:
(1)生命周期与Pod一致:Pod被删除时,emptyDir中的数据被永久清除,适合存储临时数据或缓存。
(2)初始为空:Pod启动时目录为空,容器可以在其中创建、读写文件。
(3)容器间共享:同一Pod内的多个容器可以同时挂载同一个emptyDir,实现容器间的文件交换例如一个容器下载文件,另一个容器处理。
emptyDir卷适用于临时缓存、构建中间产物、同一Pod内多个容器的共享日志或检查点等不需要持久保存的数据。例如,一个Pod中运行两个容器------A容器将日志写入emptyDir,B容器读取并上传到中心存储,Pod销毁后临时日志自动清理。
3. 解释hostPath卷类型的特征。
hostPath 卷将宿主机节点文件系统上的目录或文件直接挂载到Pod中。
它有以下特征:
(1)节点感知:同一Pod在不同节点上运行时,看到的是不同节点的本地目录(因为挂载的是"所在节点"的路径),因此Pod重新调度后无法访问之前节点的数据。
(2)数据持久性:Pod被删除后,hostPath目录中的数据仍然保留在节点上,直到管理员手动清理。
(3)权限敏感:Pod对挂载路径的读写权限取决于宿主机目录的权限设置,需要谨慎配置Pod的安全上下文(SecurityContext)。
hostPath 适用于需要访问宿主机文件或目录的节点级守护进程(如日志采集、节点监控)以及单节点测试,但不推荐用于生产环境,因为 Pod 跨节点迁移会导致数据丢失。
4. 解释PV卷类型的特征。
PersistentVolume(PV,持久卷) 是集群中的存储资源抽象,由管理员预先创建(静态供应)或通过存储类(StorageClass)动态创建。PV独立于任何Pod,拥有独立的生命周期。
PV卷有以下特征::
(1)PV卷是集群级别的资源。PV不属于任何命名空间,是整个集群共享的存储资源,可供任何命名空间中的PVC绑定。
(2)PV不关心存储类型。PV不关心底层存储的实现细节,应用只需要通过PVC声明需求,无需关心具体存储类型。
(3)PV卷有独立的生命周期。即使没有任何Pod使用它,PV依然存在;Pod删除不影响PV,PVC删除后PV的回收策略决定数据如何处理。
(4)PV卷需要声明访问模式:PV定义中需要声明支持的访问模式,例如RWO、ROX、RWX。
(5)PV卷需要声明容量和属性:PV声明容量、存储类名(storageClassName)、挂载参数等特性。
PV卷适用于为数据库、消息队列、内容管理等有状态应用提供持久化数据存储,使数据在Pod重启、重新调度甚至删除后依然存在。
5. 什么是PVC,如何使用它。
PersistentVolumeClaim(PVC,持久卷声明) 是用户对存储资源的请求,它描述了Pod需要的存储特性:存储大小、访问模式、存储类名称等。PVC是命名空间级别的资源,用户通过创建PVC来申请存储。
使用PVC需要经过以下四个步骤:
(1)创建PVC:用户编写YAML,声明需要多大的存储、什么访问模式、使用哪StorageClass。
(2)绑定PV:K8s控制平面自动匹配满足条件的现有PV(静态供应)或通过StorageClass动态创建新PV,将PVC与PV一对一绑定。
(3)Pod引用PVC:在Pod的volumes字段中指定PVC名称,然后在容器的volumeMounts中挂载到具体路径。
(4)释放与回收:Pod删除后,PVC仍然存在(除非手动删除),可以被其他Pod挂载。当PVC被删除时,根据PV的回收策略处理后端存储数据。
6. PV 有哪几种访问模式,详细说明。
PV有 RWO、ROX、RWX、RWOP四种访问模式,用于声明存储卷如何被节点上的Pod访问。
(1)ReadWriteOnce (缩写为RWO):这种模式的卷可以被单个节点以读写方式挂载,适用于单副本有状态的应用,例如MySQL数据库。
(2)ReadOnlyMany (缩写为ROX):这种模式的卷可以被多个节点以只读方式同时挂载,适用于多个Pod需要读取相同静态数据的场景,例如配置文件、机器学习模型文件或公共库文件。
(3)ReadWriteMany (缩写为RWX):这种模式的卷可以被多个节点以读写方式同时挂载,适用于需要多节点共享写入的场景,例如文件共享服务器(Nextcloud)、内容协作平台。
(4)ReadWriteOncePod (缩写为RWOP):这种模式的卷可以被单个Pod以读写方式挂载(整个集群范围内仅允许一个Pod访问),适用于需要严格独占存储以防止并发写入导致数据损坏的场景,例如单实例数据库使用本地SSD存储。
7. 解释PV的回收策略。
回收策略定义了在PVC被删除后,PV及其后端存储中的数据应如何处理。回收策略是PV级别的属性,一旦设置,影响该PV的整个生命周期。PV的回收策略有以下三种:
(1)Retain(保留):PVC删除后,数据保留,需要管理员手动清理。适合生产环境,防止误删。
(2)Delete(删除):PVC删除时,自动删除PV和数据。适合测试环境,自动释放资源。
(3)Recycle(已废弃):清空目录后重复使用。不推荐,已被动态供应替代。