一.概念
PersistentVolumes 可以有多种回收策略,包括 "Retain"、"Recycle" 和 "Delete"。对于动态配置的 PersistentVolumes 来说,默认回收策略为 "Delete"。这表示当用户删除对应的 PersistentVolumeClaim 时,动态配置的 volume 将被自动删除。 如果 volume 包含重要数据时,这种自动行为可能是不合适的。 那种情况下,更适合使用 "Retain" 策略。使用 "Retain" 时,如果用户删除 PersistentVolumeClaim,对应的 PersistentVolume 不会被删除。相反,它将变为 Released 状态,表示所有的数据可以被手动恢复
二.恢复数据(基于aws efs)
1.全局配置文件
[bpmdev@bpm static]$ cat busybox_deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: busybox
name: busybox
namespace: test-persistentvolume
spec:
replicas: 1
selector:
matchLabels:
app: busybox
template:
metadata:
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox
command: ["/bin/sh"]
args: ["-c","while true;do echo $(date -u) >> /data/out1.txt;sleep 5;done"]
volumeMounts:
- name: busybox-storage
mountPath: /data
subPath: busybox
volumes:
- name: busybox-storage
persistentVolumeClaim:
claimName: busybox-efs-claim
---
deployment-recovery 作用:每隔5秒打印时间戳到/data/out2.txt
[bpmdev@bpm static]$ cat busybox_deployment-recovery.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: busybox-recovery
name: busybox-recovery
namespace: test-persistentvolume
spec:
replicas: 1
selector:
matchLabels:
app: busybox-recovery
template:
metadata:
labels:
app: busybox-recovery
spec:
containers:
- name: busybox-recovery
image: busybox
command: ["/bin/sh"]
args: ["-c","while true;do echo $(date -u) >> /data/out2.txt;sleep 5;done"]
volumeMounts:
- name: busybox-storage
mountPath: /data
subPath: busybox
volumes:
- name: busybox-storage
persistentVolumeClaim:
claimName: busybox-efs-claim
---
pvc
[bpmdev@bpm static]$ cat busybox_pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: busybox-efs-claim
namespace: test-persistentvolume
spec:
accessModes:
- ReadWriteMany
storageClassName: efs-sc
resources:
requests:
storage: 5Gi
---
pv
[bpmdev@bpm static]$ cat busybox_pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: busybox-efs-pv
namespace: test-persistentvolume
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
storageClassName: efs-sc
#persistentVolumeReclaimPolicy: Recycle
persistentVolumeReclaimPolicy: Retain
#persistentVolumeReclaimPolicy: Delete
csi:
driver: efs.csi.aws.com
volumeHandle: xxxxxxxx
2.依次创建:pv,pvc,deployment,然后再删除pvc,deployment,此时pv的状态为Released
3.编辑当前pv的内存文件,删除claimRef字段值并将STATUS值由Release修改为Available
kubectl edit pv/busybox-efs-pv -n test-persistentvolume
```
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{},"labels":{"pv":"test001"},"name":"busybox-efs-pv"},"spec":{"accessModes":["ReadWriteMany"],"capacity":{"storage":"5Gi"},"csi":{"driver":"efs.csi.aws.com","volumeHandle":"fs-0651fbb10903bddf7"},"persistentVolumeReclaimPolicy":"Retain","storageClassName":"efs-sc","volumeMode":"Filesystem"}}
pv.kubernetes.io/bound-by-controller: "yes"
creationTimestamp: "2024-05-23T05:41:33Z"
finalizers:
- kubernetes.io/pv-protection
labels:
pv: test001
name: busybox-efs-pv
resourceVersion: "42501918"
uid: 67142a43-480f-48fc-893a-da668d752e06
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 5Gi
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: busybox-efs-claim
namespace: test-persistentvolume
resourceVersion: "42501030"
uid: 45ba88d4-009a-4f87-afd8-59d62d8997d7
csi:
driver: efs.csi.aws.com
volumeHandle: fs-0651fbb10903bddf7
persistentVolumeReclaimPolicy: Retain
storageClassName: efs-sc
volumeMode: Filesystem
status:
phase: Released
```
4.此时pv变为可用,创建挂载pvc,就可以绑定了pv了,可以看到数据已恢复
[bpmdev@bpm static]$ kubectl get pv,pvc,deployment -n test-persistentvolume
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/busybox-efs-pv 5Gi RWX Retain Available efs-sc
```
重新应用pvc文件,并部署新的deployment-recovery,该文件会写out2.txt日志文件
```
[bpmdev@bpm static]$ kubectl apply -f busybox_pvc.yaml
persistentvolumeclaim/busybox-efs-claim created
[bpmdev@bpm static]$ kubectl get pv,pvc,deployment -n test-persistentvolume
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/busybox-efs-pv 5Gi RWX Retain Bound test-persistentvolume/busybox-efs-claim efs-sc
[bpmdev@bpm static]$ kubectl apply -f busybox_deployment-recovery.yaml
deployment.apps/busybox-recovery created
### 已恢复数据
[bpmdev@bpm static]$ kubectl exec -it deployment/busybox-recovery -n test-persistentvolume sh
/ # ls /data/
out1.txt out2.txt