Ond*_*žka 5 kubernetes persistent-volumes persistent-volume-claims
我使用进行动态PersistentVolume配置PersistentVolumeClaim。
吊舱完成后,我想保留PV。所以我想做什么persistentVolumeReclaimPolicy: Reclaim。
但是,这适用于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 ???
Run Code Online (Sandbox Code Playgroud)
解决方法是创建新的 StorageClass 并reclaimPolicy: Retain在任何地方使用该 StorageClass。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: gp2-retain
annotations:
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
fsType: ext4
reclaimPolicy: Retain
Run Code Online (Sandbox Code Playgroud)
PS:现有StorageClass的reclaimPolicy无法编辑,但您可以删除StorageClass并重新创建它reclaimPolicy: Retain
这不是OP的答案,但导致我来到这里的个人渴望的答案是我reclaimPolicy: Retain根本不需要。我需要一个StatefulSet来代替。如果这适合您,请继续阅读:
我渴望拥有一个PersistentVolume能够被容器以持久的方式一遍又一遍地重复使用的东西;docker这是使用和卷时的默认行为方式docker-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
Run Code Online (Sandbox Code Playgroud)
我认为做到这一点的方法是声明一个PersistentVolumeClaimwith reclaimPolicy: Retain,然后在我的部署中引用它。但即使当我开始reclaimPolicy: Retain工作时,PersistentVolume每个kubectl apply. reclaimPolicy: Retain只是确保旧的不会被删除。
但不是。实现此用例的方法是使用StatefulSet. 它更简单,而且它的行为就像我习惯使用 docker 和 docker-compose 一样。
小智 6
您可以在 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
Run Code Online (Sandbox Code Playgroud)
存储类.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
Run Code Online (Sandbox Code Playgroud)
打补丁
kubectl patch pv <your-pv-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
Run Code Online (Sandbox Code Playgroud)
Kubernetes Github 上有一个关于动态配置卷的回收策略的问题。
简短的回答是“不”——您无法设置策略。
以下是票证中有关如何避免 PV 被删除的对话中的小引述:
Speedline:偶然发现了这个,我也遇到了类似的问题。我想创建一个 Elasticsearch 集群,但要确保如果集群因任何原因出现故障,存储在永久性磁盘上的数据在重新启动时仍能得到维护。目前,我为每个承载数据的 Elasticsearch 部署都有一个 PersistentVolumeClaim。
jsafrane:@speedplane:只要你不删除PVC,它就会被维护。仅当 kuberenetes 发现 PV 绑定到 PVC 并且 PVC 不存在时,才会执行回收策略。
@jsafrane好的,明白了。所以一定要小心PVC,删除一个PVC就像删除磁盘上的所有数据一样。
| 归档时间: |
|
| 查看次数: |
1777 次 |
| 最近记录: |