在 Kubernetes 中,Persistent Volumes (PV) 和 Persistent Volume Claims (PVC) 是用来管理存储的抽象概念。PV 是集群中的一块存储,它已经被管理员预先配置好或通过存储类动态创建。PVC 是用户对存储的请求,它指定了存储的大小、访问模式等要求。Kubernetes 会自动匹配合适的 PV 来满足 PVC 的需求。
以下是使用 Persistent Volumes 管理存储的基本步骤:
创建 Persistent Volume (PV):
- PV 是集群中的一块存储,可以是本地磁盘、网络存储(如 NFS、iSCSI、云存储等)。管理员需要预先创建 PV 资源。
- 示例 PV 配置文件
pv.yaml
:apiVersion: v1 kind: PersistentVolume metadata: name: my-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data"
- 应用 PV 配置:
kubectl apply -f pv.yaml
创建 Persistent Volume Claim (PVC):
- PVC 是用户对存储的请求。它指定了所需的存储大小、访问模式等。
- 示例 PVC 配置文件
pvc.yaml
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi
- 应用 PVC 配置:
kubectl apply -f pvc.yaml
使用 PVC 在 Pod 中:
- 在 Pod 配置文件中,你可以引用 PVC 来为容器提供持久化存储。
- 示例 Pod 配置文件
pod.yaml
:apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: nginx volumeMounts: - mountPath: "/usr/share/nginx/html" name: my-pv volumes: - name: my-pv persistentVolumeClaim: claimName: my-pvc
- 应用 Pod 配置:
kubectl apply -f pod.yaml
存储类的使用:
- 存储类允许管理员定义存储的动态供应策略。当 PVC 与存储类匹配时,存储系统会自动创建相应的 PV。
- 创建存储类配置文件
storage-class.yaml
:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-storage-class provisioner: kubernetes.io/aws-ebs parameters: type: gp2 reclaimPolicy: Retain
- 应用存储类配置:
kubectl apply -f storage-class.yaml
动态供应:
- 当 PVC 被创建且没有现成的 PV 与之匹配时,如果 PVC 指定了存储类,且存储类的
provisioner
有效,Kubernetes 将自动创建一个新的 PV。
- 当 PVC 被创建且没有现成的 PV 与之匹配时,如果 PVC 指定了存储类,且存储类的
管理存储:
- 使用
kubectl get pv
查看集群中的所有 PV。 - 使用
kubectl get pvc
查看集群中的所有 PVC。 - 使用
kubectl describe pv/[PV_NAME]
或kubectl describe pvc/[PVC_NAME]
获取更多详细信息。
- 使用
回收策略:
- 你可以为 PV 设置回收策略,如
Retain
、Recycle
或Delete
。默认策略是Delete
,这意味着当 PVC 被删除时,PV 也会被自动删除。
- 你可以为 PV 设置回收策略,如
备份和迁移数据:
- 在删除 PVC 或 PV 之前,确保备份重要数据,以防数据丢失。
监控存储使用情况:
- 使用 Kubernetes 监控工具(如 Prometheus 和 Grafana)来监控存储使用情况。
通过以上步骤,你可以在 Kubernetes 集群中有效地管理存储资源。记得在生产环境中进行详细的规划和测试,以确保存储解决方案满足应用程序的需求。