如何在Kubernetes The Hard Way中配置持久化存储:从持久化卷到存储类的完整指南
Kubernetes The Hard Way是一个通过手动配置而非脚本快速搭建Kubernetes集群的开源项目,它为用户提供了深入理解Kubernetes核心组件的实践机会。本文将详细介绍如何在该环境中配置持久化存储,包括持久化卷(PersistentVolume)和存储类(StorageClass)的创建与管理,帮助新手用户轻松掌握Kubernetes存储管理的核心技能。
为什么Kubernetes持久化存储至关重要?
在Kubernetes集群中,Pod是临时的,当Pod重启或重新调度时,其中的数据会丢失。持久化存储解决了这一问题,确保数据能够在Pod生命周期之外长期保存。无论是数据库应用、日志存储还是用户数据,持久化存储都是生产环境中不可或缺的一部分。
Kubernetes提供了多种持久化存储方案,其中持久化卷(PV)和持久化卷声明(PVC)是最基础也是最常用的方式。存储类(StorageClass)则进一步简化了存储的动态供应,让用户无需手动创建PV即可快速获取存储资源。
持久化卷(PV):集群级别的存储资源
持久化卷是集群中的一块存储,由管理员预先配置或通过存储类动态创建。它与Pod无关,独立于Pod的生命周期,即使使用它的Pod被删除,PV仍然存在。
PV的主要类型
Kubernetes支持多种PV类型,包括:
- 本地存储:直接使用节点上的本地磁盘
- 网络存储:如NFS、iSCSI、Ceph等
- 云存储:如AWS EBS、GCP Persistent Disk、Azure Disk等
在Kubernetes The Hard Way项目中,虽然没有提供现成的PV配置文件,但你可以参考项目中的部署文件结构,创建类似deployments/coredns.yaml的PV配置文件。
创建PV的基本步骤
- 准备存储介质(本地磁盘或网络存储)
- 创建PV配置文件(yaml格式)
- 使用kubectl apply命令创建PV
以下是一个简单的本地存储PV示例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
hostPath:
path: /data/local-pv
持久化卷声明(PVC):用户对存储的请求
持久化卷声明是用户对存储资源的请求。用户不需要直接了解底层存储的细节,只需通过PVC指定所需的存储大小和访问模式,Kubernetes会自动为其绑定合适的PV。
PVC的关键属性
- 存储大小:请求的存储容量
- 访问模式:
- ReadWriteOnce(RWO):只能被一个节点以读写方式挂载
- ReadOnlyMany(ROX):可以被多个节点以只读方式挂载
- ReadWriteMany(RWX):可以被多个节点以读写方式挂载
- 存储类:指定使用哪个存储类
创建和使用PVC
创建PVC后,Kubernetes会自动为其绑定匹配的PV。然后,你可以在Pod中通过volumeMounts使用该PVC。
以下是一个PVC示例及其在Pod中的使用:
# PVC配置
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: local-storage
# Pod中使用PVC
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- name: my-volume
mountPath: /data
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: my-pvc
存储类(StorageClass):动态供应存储资源
存储类允许管理员定义不同类型的存储,用户可以通过PVC直接请求特定类型的存储,而无需关心底层PV的创建细节。Kubernetes会根据存储类的配置自动创建PV并绑定到PVC。
存储类的主要功能
- 动态供应:自动创建PV
- 回收策略:定义PV的回收方式(删除、保留或回收)
- 参数配置:指定存储的性能、类型等参数
创建存储类
以下是一个使用本地存储的存储类示例:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
在Kubernetes The Hard Way项目中,你可以将存储类配置文件放在deployments/目录下,与其他部署文件保持一致。
验证存储配置是否生效
配置完PV、PVC和存储类后,你需要验证存储是否正常工作。可以参考docs/16-smoke-test.md中的测试方法,创建一个使用PVC的Pod,并检查数据是否能够持久化。
验证步骤
- 创建一个使用PVC的测试Pod
- 在Pod中创建测试文件
- 删除Pod并重新创建
- 检查测试文件是否仍然存在
如果测试文件在Pod重新创建后仍然存在,说明你的持久化存储配置成功。
总结:Kubernetes存储管理最佳实践
- 合理选择存储类型:根据应用需求选择合适的存储类型和访问模式
- 使用存储类:尽量使用存储类实现动态存储供应,简化管理
- 定期备份数据:即使使用了持久化存储,也需要定期备份重要数据
- 监控存储使用情况:关注PV和PVC的使用情况,及时扩容
通过本文的指南,你已经了解了如何在Kubernetes The Hard Way项目中配置持久化存储。虽然该项目没有提供现成的存储配置文件,但你可以参考项目结构和本文的示例,轻松实现持久化卷和存储类的配置。
要开始使用Kubernetes The Hard Way项目,请克隆仓库:
git clone https://gitcode.com/gh_mirrors/kub/kubernetes-the-hard-way
祝你在Kubernetes的学习之旅中取得成功!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




