Kubernetes:如何使用 persistentVolumeReclaimPolicy: Reclaim.



我有一个使用PersistentVolumeClaim配置的动态PersistentVolume

我想在 pod 完成后保留 PV。所以我想拥有persistentVolumeReclaimPolicy: Retain所做的事情。

但是,这适用于PersistentVolume,而不是PersistentVolumeClaim(AFAIK(。

如何更改动态预配的 PV 的此行为?

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: {{ .Release.Name }}-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: gp2
resources:
requests:
storage: 6Gi
---
kind: Pod
apiVersion: v1
metadata:
name: "{{ .Release.Name }}-gatling-test"
spec:
restartPolicy: Never
containers:
- name: {{ .Release.Name }}-gatling-test
image: ".../services-api-mvn-builder:latest"
command: ["sh", "-c", 'mvn -B gatling:test -pl csa-testing -DCSA_SERVER={{ template "project.fullname" . }} -DCSA_PORT={{ .Values.service.appPort }}']
volumeMounts:
- name: "{{ .Release.Name }}-test-res"
mountPath: "/tmp/testResults"
volumes:
- name: "{{ .Release.Name }}-test-res"
persistentVolumeClaim:
claimName: "{{ .Release.Name }}-pvc"
#persistentVolumeReclaimPolicy: Retain  ???

解决方法是使用reclaimPolicy: Retain创建新的存储类,并在任何地方使用该存储类。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: gp2-retain
annotations:
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
fsType: ext4 
reclaimPolicy: Retain

PS:现有存储类的回收策略无法编辑,但您可以删除存储类并使用reclaimPolicy: Retain重新创建

这不是OP的答案,但导致我来到这里的个人痒的答案是我根本不需要reclaimPolicy: Retain。我需要一StatefulSet。如果这适合您,请继续阅读:

我的痒是有一个PersistentVolume被容器以持久的方式一遍又一遍地重用;这是使用dockerdocker-compose卷时的默认行为。因此,新PersistentVolume只创建一次:

# Create a new PersistentVolume the very first time
kubectl apply  -f my.yaml 
# This leaves the "volume" - the PersistentVolume - alone
kubectl delete -f my.yaml
# Second and subsequent times re-use the same PersistentVolume
kubectl apply  -f my.yaml 

我认为这样做的方法是使用reclaimPolicy: Retain声明一个PersistentVolumeClaim,然后在我的部署中引用它。但即使我reclaimPolicy: Retain工作,每个kubectl apply仍然会创建一个全新的PersistentVolumereclaimPolicy: Retain只是确保旧的不会被删除。

但是没有。实现此用例的方法是使用StatefulSet.它更简单,然后它的行为就像我习惯的docker和docker-compose一样。

您可以在pv.yaml或storageclass.yaml中配置它,或者使用补丁退出pv

pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0003
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: slow
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /tmp
server: 172.17.0.2

storageclass.yaml

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: gp2-retain
annotations:
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
fsType: ext4 
reclaimPolicy: Retain

打补丁

kubectl patch pv <your-pv-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'

Kubernetes Github 上存在一个关于动态配置卷的回收策略的问题。

简短的回答是"否" - 您无法设置策略。

以下是票证中关于如何避免PV删除的对话中的小引文:

Speedline:偶然发现了这个,我正在经历一个类似的问题。我想创建一个 Elasticsearch 集群,但请确保如果集群因任何原因关闭,存储在永久磁盘上的数据在重新启动期间得到维护。我目前有一个 PersistentVolumeClaim 用于每个携带数据的 elasticsearch 部署。

JSAFRANE: @speedplane:只要你不删除PVC,它就会被维护。仅当 kuberenetes 看到绑定到 PVC 的 PV 并且该 PVC 不存在时,才会执行回收策略。

@jsafrane好的,知道了。所以只需要小心PVC,删除一个就像删除磁盘上的所有数据。

相关内容

  • 没有找到相关文章

最新更新