持久卷与持久卷声明
了解如何使用持久卷和持久卷声明为 Pod 提供持久化存储。
持久卷与持久卷声明 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
Pod 与临时数据
Pod 会创建也会终止,但应用程序的数据通常需要继续保留。数据库或用户上传的文件就是例子。
- 当 Pod 重启或被重新调度时,直接存储在其容器文件系统中的任何数据都会丢失。
- 对于无状态应用程序来说,这种临时性没有问题,但关键数据需要持久化解决方案。
- Kubernetes 提供了强大的系统来管理持久存储,使数据能够跨越 Pod 的生命周期持续存在。
PersistentVolume:集群存储
PersistentVolume (PV) 是 Kubernetes 集群中的一块存储。
- 它是集群范围的资源,也就是说它不属于任何特定的命名空间。
- PVs 可以由管理员预先配置,也可以由 StorageClass 动态配置。
- 它们屏蔽了底层存储技术的具体细节(例如 Google Persistent Disk、AWS EBS、NFS 共享存储)。
定义 PersistentVolume
PVs 的定义包括容量、访问模式和存储类型等详细信息。以下 YAML 使用 hostPath 描述了一个包含 5 GB 存储的 PV(用于本地测试)。
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-local-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: "/mnt/data"
注意:hostPath 通常用于单节点开发环境,不建议在生产环境中使用。
PersistentVolumeClaim:Pod 的存储请求
PersistentVolumeClaim (PVC) 是用户或应用程序在特定命名空间中提出的存储请求。
- Pod 不会直接使用 PV,而是通过 PVC 请求存储。
- PVC 受命名空间限制,因此存在于特定项目或团队的范围内。
- 它们会指定所需的容量、访问模式,以及可选的存储类。
PV 与 PVC:自动匹配
Kubernetes 会通过称为绑定的过程,自动将 PVC 与可用的 PV 匹配起来。
- 创建 PVC 时,Kubernetes 会查找满足 PVC 要求(容量、访问模式、存储类)的 PV。
- 找到合适的 PV 后,二者会以一对一的关系进行“绑定”。
- 这种绑定可以确保 PVC 获得其请求的特定存储。
PVs/PVCs 的访问模式
访问模式定义了存储可以如何挂载和供 Pod 使用。这些模式由 PVC 请求,并由 PV 提供支持:
- ReadWriteOnce (RWO):卷可以由单个节点以读写方式挂载。
- ReadOnlyMany (ROX):卷可以由多个节点以只读方式挂载。
- ReadWriteMany (RWX):卷可以由多个节点以读写方式挂载。
具体支持哪些模式取决于所使用的存储提供商。
用于自动化的存储类
Storage Classes 为管理员提供了一种描述不同存储“类别”的方式(例如“fast-ssd”和“slow-hdd”)。
- 无需手动创建 PV,PVC 请求存储类时,StorageClass 可以动态配置 PV。
- 这会根据预定义的模板自动创建 PV。
- 它将存储配置与存储使用分离开来,让用户使用起来更加方便。
创建 PVC 示例
让我们创建一个 PVC,请求 1 GB 存储并使用 ReadWriteOnce 访问模式。此 PVC 会查找现有 PV,或者通过 StorageClass 触发动态配置。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-app-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: standard # Optional: if you have a 'standard' StorageClass
将其保存为 pvc.yaml,然后使用 kubectl apply -f pvc.yaml 应用。
在 Pod 中使用 PVC
PVC 绑定后,Pod 可以在卷配置中引用 PVC 的名称来使用它。Pod 无需了解底层 PV,只需要知道 PVC。
apiVersion: v1
kind: Pod
metadata:
name: my-data-pod
spec:
containers:
- name: data-container
image: busybox
command: ["/bin/sh", "-c", "echo 'Hello from CoddyKit!' > /mnt/data/hello.txt && sleep 3600"]
volumeMounts:
- name: persistent-storage
mountPath: /mnt/data
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: my-app-pvc
此 Pod 会将文件写入挂载的持久卷。
监控 PVs 和 PVCs
您可以使用 kubectl 监控持久存储资源的状态:
- 查看所有 PV:
kubectl get pv - 查看命名空间中的所有 PVC:
kubectl get pvc - 获取包括状态和事件在内的详细信息:
kubectl describe pv <pv-name>kubectl describe pvc <pvc-name>
请确保您的 PVs 处于 Bound 状态,并且 PVCs 已绑定到正确的 PV。
了解 PV 与 PVC 的区别
用户想要部署一个需要 50GB 持久存储的数据库。哪个 Kubernetes 资源直接表示用户应用程序对该存储的请求?
持久存储总结
我们已经学习了 Kubernetes 如何为应用程序管理持久存储:
- PersistentVolumes (PVs) 是集群资源,代表实际的存储。
- PersistentVolumeClaims (PVCs) 是用户提出的存储请求。
- Kubernetes 会根据要求将 PVC 绑定到合适的 PV。
- 访问模式定义了存储的使用方式(RWO、ROX、RWX)。
- Storage Classes 支持动态配置 PV,从而自动完成设置。
即使 Pod 不断创建和终止,该系统也能确保应用程序数据持续存在,为有状态应用程序提供可靠性。
常见问题解答
「持久卷与持久卷声明」课时是免费的吗?
是的 — 「持久卷与持久卷声明」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「持久卷与持久卷声明」这节课中我会学到什么?
了解如何使用持久卷和持久卷声明为 Pod 提供持久化存储。 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「持久卷与持久卷声明」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。