持久化

Table of Contents

  卷可以让容器之外的存储挂在到容器中的某个目录上,使得删除容器后修改不会丢失

目录共享

EmptyDir 使得多容器的pod可以很方便的共享读写某个目录/文件:

apiVersion: v1
kind: Pod
metadata:
  name: volume-pod
spec:
  containers:
  - image: busybox
    name: busybox
    command: ["/bin/sh", "-c", "while true; do sleep 3600; done"]
    volumeMounts:
    - mountPath: /tmp/storage
          name: my-volume
  volumes:
  - name: my-volume
    emptyDir: {}

持久化卷

Persistent Volume是对存储的抽象,这个抽象包含两个资源:

  • 持久化卷: PersistentVolume,简称PV, 是集群中的一块网络存储,也是Kubernetes集群的一种资源
  • 持久卷申请:PersistentVolumeClaim,简称PVC,是用户对PV资源的申请,例如申请特定的访问模式和大小
 Pod的Volume与PV的区别是:

Volume的生命周期和Pod相同,Pod被删除时,Volume和保存在Volume中的数据就被删除了

对于PV,即使挂载PV的Pod被删除了,PV仍然存在,PV上的数据也还在

PV定义文件:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: my-pv
spec:
  storageClassName: local-storage
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

PVC定义文件:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: local-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
       storage: 512Mi
1. PVC中的storageClassName 和 accessModes 必须和PV中的相同
2. PVC的容量必须小于PV的容量

查询PV和PVC:

kubectl get pv
kubectl get pvc

在Pod定义文件中使用创建好的PVC:

kind: Pod
apiVersion: v1
metadata:
  name: my-pvc-pod
spec:
  containers:
  - name: busybox
    image: busybox
    command: ["/bin/sh", "-c", "while true; do sleep 3600; done"]
    volumeMounts:
    - mountPath: "/mnt/storage"
           name: my-storage
  volumes:
  - name: my-storage
    persistentVolumeClaim:
          claimName: my-pvc