在 Kubernetes 中,Volume 和 Persistent Volume 是与数据存储和管理相关的两个重要概念。
Volume 是一个属于 Pod 的存储单元,它可以被 Pod 中的容器所共享。Kubernetes Volume 的生命周期与 Pod 相同,当 Pod 被删除时,Volume 通常也会一同被清除。Volumes 支持多种数据源,包括本地存储、公共云存储服务等。
使用场景:
PV 是集群中的一块存储,其生命周期独立于任何单独的 Pod。这允许数据持久化,即使使用它的 Pod 不再存在。PVC 是对存储资源的请求,用户不需要了解后端存储的复杂性。它们让用户能以一种抽象的方式使用持久存储。
使用场景:
假设我们有一个需要运行 MySQL 数据库的应用程序,数据库需要持久化存储来保存数据。
PersistentVolume (PV) 示例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
在这个配置中,我们创建了一个名为 mysql-pv
的持久卷,存储类型被设置为 manual
,表示这是一个手动预先配置的存储类别,大小为 5Gi,并且指定访问模式为 ReadWriteOnce
,表示该卷只能被一个节点以读写方式挂载。
PersistentVolumeClaim (PVC) 示例:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
此 PVC mysql-pvc
请求与 PV 匹配的存储类别和大小,也设置为 ReadWriteOnce
访问模式。
Pod 使用 PVC 示例:
apiVersion: v1
kind: Pod
metadata:
name: mysql-pod
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: "yourpassword"
- name: MYSQL_DATABASE
value:
"mydatabase"
volumes:
- name: mysql-storage
persistentVolumeClaim:
claimName: mysql-pvc
volumeMounts:
- mountPath: /var/lib/mysql
name: mysql-storage
在这个 Pod 配置中,我们将 mysql-pvc
挂载到了 MySQL 容器的 /var/lib/mysql
目录。这样,MySQL 中的数据就会被存储在 PV 上,并且即使 Pod 被删除,数据也会得到保留。