Hed*_*dge 3 kubernetes persistent-volumes persistent-volume-claims kubernetes-helm
当我helm delete <deploymentname>
部署时,它的 PV 和 PVC 也被删除。如何避免 PV 中的实际数据被删除,并能够在我helm install <deploymentname>
再次回收这些 PV 时?
我helm upgrade
经常使用,但如果删除所有数据所需的只是 helm delete(即使没有 --purge 选项它也会删除所有 PV),这让我非常不舒服
小智 7
假设您使用的是default
存储类,避免 Helm 图表删除其上使用的 PV/PVC 的唯一方法是预先创建 PVC,这样它们就不会由 Helm 版本管理。
唯一的例外是StatefulSet,根据定义,即使 PVC 是由 Helm 版本创建的,它也不会删除它们
如果您的 Helm 图表允许,另一个选项是使用带有 的存储类reclaimPolicy: Retain
,这将避免在部署、守护进程集 pod PVC 分离和删除时删除您的 PV
小智 5
如果您正在寻找删除和重新创建之间的持久性,则不应使用Deployment
but StatefulSet
。有状态集旨在用于部署“类似数据库”的应用程序。
有状态集使用持久的 pod 命名并支持为每个 pod 生成 pvc,也具有持久的名称。当 pods/stateful sets 被删除时,这些 pvcs 不会被删除,因此它们保留以供重新创建的 stateful sets 或通过删除 pvc(s) 手动释放以供重用。
下面附上StatefulSet
了来自https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/ 的示例。
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3879 次 |
最近记录: |