Повторно используйте PersistentVolume после переустановки развертывания руля
Когда я helm delete <deploymentname>
развертывание его PV и PVC также удалены. Как я могу избежать удаления реальных данных в PV и иметь возможность восстановить эти PV, когда я helm install <deploymentname>
снова?
я использую helm upgrade
регулярно, но мне очень неудобно, если все, что требуется для удаления всех данных, это удаление с помощью helm (даже без опции --purge он удаляет все PV)
2 ответа
Предполагая, что вы используете default
Класс хранения, единственный способ избежать диаграммы Хелма для удаления используемых на нем PV / PVC, это заранее создать PVC, чтобы они не управлялись релизом Helm.
Единственным исключением являются StatefulSets, которые по определению никогда не удаляют свои PVC, даже если они созданы релизом Helm.
Другой вариант, если ваши диаграммы Хелма позволяют это, использует класс Storage сreclaimPolicy: Retain
, что позволит избежать удаления ваших PV, когда ваши развертывания, PVC-наборы модулей-демонов отделены и удалены
Если вы ищете постоянство между удалением и повторным созданием, вы не должны использовать Deployment
но StatefulSet
, Наборы с состоянием - это нечто, предназначенное для развертывания приложений, подобных базам данных.
Наборы с отслеживанием состояния используют постоянное именование модуля и поддерживают создание pvc для модуля, также с постоянным именем. Эти pvcs не удаляются, когда удаляются блоки / наборы с сохранением состояния, поэтому они остаются для повторного использования воссозданными наборами с сохранением состояния или ручным выпуском с удалением 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