以下是PVC挂载到Pod的大致流程::
一. 创建PersistentVolume(PV):
- 管理员或通过自动化工具在Kubernetes集群中创建PV。PV是集群中的一段预定义存储资源,可以是物理磁盘、网络存储等,并且指定了存储的大小、访问模式(如ReadWriteOnce、ReadOnlyMany、ReadWriteMany)和其他特性。
- PV可以配置为静态的(预先创建好并定义在Kubernetes集群中)或者动态的(基于StorageClass自动创建)。
二. 创建PersistentVolumeClaim(PVC):
- 用户(开发者或应用管理员)在需要存储的Pod定义中或独立地创建PVC。PVC声明了用户需要的存储资源类型,包括请求的存储量、访问模式等,但不直接指定特定的PV。
- PVC可以指定一个
storageClassName
,该名称与某个StorageClass匹配,用于动态分配PV。
三. PV与PVC的绑定:
- Kubernetes的控制器负责匹配PVC和可用的PV。如果PV的特性和容量满足PVC的要求,并且两者的访问模式兼容,控制器将执行绑定操作,将PVC与PV关联起来。
- 对于动态PV,Kubernetes会根据PVC的请求和指定的StorageClass自动创建PV。
四. Pod定义中引用PVC:
- 在Pod的定义(YAML文件)中,通过volumes部分引用PVC。这通常涉及到两个字段:volume的名称和volumeMounts,其中volumeMounts定义了容器内部的挂载点。
apiVersion: v1
kind: Pod
metadata: name: my-pod
spec:
containers:
- name: my-container
image: some-image
volumeMounts:
- mountPath: /data
name: my-volume
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: my-pvc
五. Pod调度与挂载:
- 当Pod被调度到某个Node上时,Kubernetes确保对应的PV已经准备就绪,并将其挂载到该Node上的一个目录。
- 然后,这个Node上的目录会被挂载到Pod的容器内部,具体位置由容器的volumeMounts指定。
- Pod启动后,就可以通过挂载点访问到持久化存储,实现数据的持久保存。
六. Pod生命周期结束:
- 当Pod被删除或重建时,PVC不会被删除,因此存储的数据得以保留。
- 如果不再需要PVC,手动删除PVC将触发PV的回收过程,具体回收策略由PV的
persistentVolumeReclaimPolicy
决定(如Delete、Retain或Recycle)。
整个流程确保了Pod能够安全、灵活地访问持久化存储资源,满足了应用对数据持久性的需求。