19 Kubernetes入门教程:持久化存储之持久卷(PV)与持久卷声明(PVC)
在上一篇中,我们讨论了如何在 Kubernetes 中通过环境变量与挂载进行配置与密钥管理。本篇将继续深入 Kubernetes 的存储管理部分,主要关注于持久化存储如何通过持久卷(Persistent Volume,PV)和持久卷声明(Persistent Volume Claim,PVC)来实现。在下一篇中,我们将探讨存储类(Storage Class)的概念与配置,进一步增强我们的存储能力。
什么是持久卷(PV)和持久卷声明(PVC)
在 Kubernetes 中,存储管理的核心是 持久卷(PV)
和 持久卷声明(PVC)
。
-
持久卷(PV): 是集群中的一块物理存储,具有独立于 Pod 生命周期的特性。PV 可以是多种存储后端,例如物理硬盘、NFS、云存储等。它是管理员创建的一种资源,通过定义其存储能力、访问模式等来进行配置。
-
持久卷声明(PVC): 是用户对存储资源的请求,指定所需的存储大小和访问模式。PVC 是用户和 PV 之间的桥梁,当 PVC 被创建时,Kubernetes 会查找满足该 PVC 的 PV。
持久卷(PV)的创建
下面的 YAML 文件是一个持久卷的示例配置文件。假设我们要创建一个 5Gi 的存储,使用 NFS 作为后端存储。
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
nfs:
path: /path/to/nfs
server: nfs-server.example.com
使用以上 YAML 文件,我们可以通过以下命令创建持久卷:
kubectl apply -f my-pv.yaml
持久卷声明(PVC)的创建
在创建好持久卷之后,我们需要为应用程序创建对应的 PVC。以下是一个示例 PVC 的 YAML 配置文件。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
执行以下命令创建持久卷声明:
kubectl apply -f my-pvc.yaml
查看 PV 和 PVC
在创建 PV 和 PVC 后,我们可以使用以下命令查看它们的状态:
kubectl get pv
kubectl get pvc
你将看到类似以下的输出:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
my-pv 5Gi RWO Retain Bound default/my-pvc 1m
NAME STATUS PRIORITY VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-pvc Bound 0 my-pv 5Gi RWO 1m
在这里,我们可以看到 STATUS
列标示了 PVC 是否已经成功绑定到对应的 PV。
使用 PVC 挂载到 Pod
在 Pod 中使用 PVC 也非常简单,以下是一个 Pod 示例,它将我们之前创建的 PVC 挂载到 /data
目录中:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- mountPath: /data
name: my-storage
volumes:
- name: my-storage
persistentVolumeClaim:
claimName: my-pvc
创建 Pod 的命令如下:
kubectl apply -f my-pod.yaml
总结
在本篇中,我们详细讲解了 Kubernetes 中如何使用持久卷(PV)和持久卷声明(PVC)来管理持久化存储。这些资源的使用可确保数据在 Pod 重启或删除时仍然保持可用。在下一篇中,我们将探讨 存储类(Storage Class)
的概念,以及如何在 Kubernetes 中动态管理持久化存储。欢迎继续关注!