Kubernetes PersistentVolume 存储类
什么是 PersistentVolume (PV)?
PersistentVolume(PV)是 Kubernetes 中用于持久化存储的核心概念,PV 独立于 Pod 的生命周期,即使 Pod 被删除,数据依然会保留在 PV 中,PV 允许开发者将数据存储与 Pod 解耦,提供灵活且可靠的存储解决方案,PV 的生命周期与 Pod 无关,可以手动配置或通过动态存储类(StorageClass)来创建。
PersistentVolume 的基本结构
1、Access Modes(访问模式):定义了 Pod 如何与 PV 进行交互,主要有以下三种模式:
ReadWriteOnce(RWO):读写模式,只能被单个 Pod 挂载为读写模式。
ReadOnlyMany(ROX):只读模式,可以被多个 Pod 挂载为只读模式。
ReadWriteMany(RWX):读写模式,可以被多个 Pod 挂载为读写模式。
2、Storage Class(存储类):一种动态创建 PV 的机制,定义了 PV 的属性,包括存储类型、访问模式等,Storage Class 根据需求动态地创建 PV,使得存储管理更加灵活。
3、Capacity(容量):定义了 PV 的容量,以 GiB 或 TiB 为单位,Pod 可以使用 PV 上的所有容量,但不会超过 PV 的限制。
4、Reclaim Policy(回收策略):定义了当 PV 释放后的行为,主要有以下三种策略:
Retain:保留,PV 的数据会被保留,需要手动清理。
Recycle:回收,PV 的数据会被清空,重新变为可用状态。
Delete:删除,PV 的数据会被删除,PV 也会被删除。
PersistentVolume 的使用示例
以下是详细的使用步骤和示例,涉及 PV 的手动创建和使用。
步骤1:创建 PersistentVolume
创建一个 PV,指定其访问模式、容量、回收策略等属性。
apiVersion: v1 kind: PersistentVolume metadata: name: mypv spec: capacity: storage: 1Gi volumeMode: Filesystem accessModes: ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: manual hostPath: path: "/mnt/data"
应用 PV 配置:
kubectl apply f pv.yaml
步骤2:创建 PersistentVolumeClaim (PVC)
PVC 是用户对存储的请求,它指定了所需的存储大小、访问模式等。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mypvc spec: accessModes: ReadWriteOnce resources: requests: storage: 2Gi
应用 PVC 配置:
kubectl apply f pvc.yaml
步骤3:创建 Pod 并使用 PVC
在 Pod 配置文件中引用 PVC,为容器提供持久化存储。
apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: name: mycontainer image: nginx volumeMounts: mountPath: "/usr/share/nginx/html" name: mypv volumes: name: mypv persistentVolumeClaim: claimName: mypvc
应用 Pod 配置:
kubectl apply f pod.yaml
步骤4:验证
确保 Pod 正常运行并且数据已正确挂载。
kubectl get pod mypod
查看 PVC 绑定情况:
kubectl get pvc mypvc
查看 PV 状态:
kubectl get pv mypv
存储类的使用
存储类允许管理员定义存储的动态供应策略,当 PVC 与存储类匹配时,存储系统会自动创建相应的 PV,以下是创建和使用存储类的示例。
步骤1:创建存储类
创建一个名为mystorageclass
的存储类,使用 NFS 服务器作为后端存储。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: mystorageclass provisioner: k8ssigs/nfssubdirexternalprovisioner parameters: nfsServer: nfsserver.example.com path: /k8svolumes reclaimPolicy: Delete volumeBindingMode: Immediate
应用存储类配置:
kubectl apply f storageclass.yaml
步骤2:创建 PVC 并关联存储类
创建一个 PVC,指定存储类名称。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: myapppvc spec: accessModes: ReadWriteOnce resources: requests: storage: 1Gi storageClassName: mystorageclass
应用 PVC 配置:
kubectl apply f pvc.yaml
步骤3:创建 Deployment 使用 PVC
创建一个 Deployment,并将 PVC 与容器关联起来。
apiVersion: apps/v1 kind: Deployment metadata: name: myappdeployment spec: replicas: 1 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: name: myapp image: myapp:v1 ports: containerPort: 8080 volumeMounts: mountPath: "/data" name: datavolume volumes: name: datavolume persistentVolumeClaim: claimName: myapppvc
应用 Deployment 配置:
kubectl apply f deployment.yaml
通过以上步骤,我们成功地为 Kubernetes 应用程序配置了持久化存储,使用 PersistentVolume、PersistentVolumeClaim 和 StorageClass,我们可以灵活地管理存储资源,并确保数据的持久性和可移植性,在实际生产环境中,建议进行详细的规划和测试,以确保存储解决方案满足应用程序的需求。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1236460.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复